Browse Source

Added Brightness mode

flabbet 5 years ago
parent
commit
5d76e80e6a

+ 1 - 1
PixiEditor/Models/DataHolders/Selection.cs

@@ -47,7 +47,7 @@ namespace PixiEditor.Models.DataHolders
                 case SelectionType.Add:
                 case SelectionType.Add:
                     SelectedPoints = new ObservableCollection<Coordinates>(SelectedPoints.Concat(selection).Distinct());
                     SelectedPoints = new ObservableCollection<Coordinates>(SelectedPoints.Concat(selection).Distinct());
                     break;
                     break;
-                case SelectionType.Substract:
+                case SelectionType.Subtract:
                     SelectedPoints = new ObservableCollection<Coordinates>(SelectedPoints.Except(selection));
                     SelectedPoints = new ObservableCollection<Coordinates>(SelectedPoints.Except(selection));
                     _selectionColor = System.Windows.Media.Colors.Transparent;
                     _selectionColor = System.Windows.Media.Colors.Transparent;
                     break;
                     break;

+ 11 - 0
PixiEditor/Models/Enums/BrightnessMode.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace PixiEditor.Models.Enums
+{
+    public enum BrightnessMode
+    {
+        Default, Repeat
+    }
+}

+ 1 - 1
PixiEditor/Models/Enums/SelectionType.cs

@@ -4,6 +4,6 @@
     {
     {
         New,
         New,
         Add,
         Add,
-        Substract
+        Subtract
     }
     }
 }
 }

+ 4 - 1
PixiEditor/Models/Tools/ToolSettings/Toolbars/BrightnessToolToolbar.cs

@@ -1,4 +1,6 @@
-using PixiEditor.Models.Tools.ToolSettings.Settings;
+using System;
+using PixiEditor.Models.Enums;
+using PixiEditor.Models.Tools.ToolSettings.Settings;
 
 
 namespace PixiEditor.Models.Tools.ToolSettings.Toolbars
 namespace PixiEditor.Models.Tools.ToolSettings.Toolbars
 {
 {
@@ -7,6 +9,7 @@ namespace PixiEditor.Models.Tools.ToolSettings.Toolbars
         public BrightnessToolToolbar(float initialValue)
         public BrightnessToolToolbar(float initialValue)
         {
         {
             Settings.Add(new FloatSetting("CorrectionFactor", initialValue, "Strength:", 0f, 100f));
             Settings.Add(new FloatSetting("CorrectionFactor", initialValue, "Strength:", 0f, 100f));
+            Settings.Add(new DropdownSetting("Mode", Enum.GetNames(typeof(BrightnessMode)), "Mode"));
         }
         }
     }
     }
 }
 }

+ 1 - 1
PixiEditor/Models/Tools/ToolSettings/Toolbars/SelectToolToolbar.cs

@@ -6,7 +6,7 @@ namespace PixiEditor.Models.Tools.ToolSettings.Toolbars
     {
     {
         public SelectToolToolbar()
         public SelectToolToolbar()
         {
         {
-            Settings.Add(new DropdownSetting("Mode", new[] {"New", "Add", "Substract"}, "Selection type"));
+            Settings.Add(new DropdownSetting("Mode", new[] {"New", "Add", "Subtract"}, "Selection type"));
         }
         }
     }
     }
 }
 }

+ 23 - 1
PixiEditor/Models/Tools/Tools/BrightnessTool.cs

@@ -1,9 +1,12 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
+using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Input;
 using System.Windows.Media;
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Media.Imaging;
 using PixiEditor.Models.Colors;
 using PixiEditor.Models.Colors;
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.DataHolders;
+using PixiEditor.Models.Enums;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.Tools.ToolSettings.Toolbars;
 using PixiEditor.Models.Tools.ToolSettings.Toolbars;
@@ -15,6 +18,9 @@ namespace PixiEditor.Models.Tools.Tools
         private const float CorrectionFactor = 5f; //Initial correction factor
         private const float CorrectionFactor = 5f; //Initial correction factor
 
 
         public override ToolType ToolType => ToolType.Brightness;
         public override ToolType ToolType => ToolType.Brightness;
+        public BrightnessMode Mode { get; set; } = BrightnessMode.Default;
+
+        private List<Coordinates> _pixelsVisited = new List<Coordinates>();
 
 
         public BrightnessTool()
         public BrightnessTool()
         {
         {
@@ -22,10 +28,19 @@ namespace PixiEditor.Models.Tools.Tools
             Toolbar = new BrightnessToolToolbar(CorrectionFactor);
             Toolbar = new BrightnessToolToolbar(CorrectionFactor);
         }
         }
 
 
+        public override void OnMouseDown()
+        {
+            base.OnMouseDown();
+            _pixelsVisited.Clear();
+        }
+
         public override LayerChange[] Use(Layer layer, Coordinates[] coordinates, Color color)
         public override LayerChange[] Use(Layer layer, Coordinates[] coordinates, Color color)
         {
         {
             int toolSize = (int) Toolbar.GetSetting("ToolSize").Value;
             int toolSize = (int) Toolbar.GetSetting("ToolSize").Value;
             float correctionFactor = (float) Toolbar.GetSetting("CorrectionFactor").Value;
             float correctionFactor = (float) Toolbar.GetSetting("CorrectionFactor").Value;
+            Enum.TryParse<BrightnessMode>((Toolbar.GetSetting("Mode").Value as ComboBoxItem)?.Content as string, out var mode);
+            Mode = mode;
+
             LayerChange[] layersChanges = new LayerChange[1];
             LayerChange[] layersChanges = new LayerChange[1];
             if (Keyboard.IsKeyDown(Key.LeftCtrl))
             if (Keyboard.IsKeyDown(Key.LeftCtrl))
                 layersChanges[0] = new LayerChange(ChangeBrightness(layer, coordinates[0], toolSize, -correctionFactor),
                 layersChanges[0] = new LayerChange(ChangeBrightness(layer, coordinates[0], toolSize, -correctionFactor),
@@ -47,6 +62,13 @@ namespace PixiEditor.Models.Tools.Tools
 
 
             for (int i = 0; i < rectangleCoordinates.Length; i++)
             for (int i = 0; i < rectangleCoordinates.Length; i++)
             {
             {
+                if (Mode == BrightnessMode.Default)
+                {
+                    if(_pixelsVisited.Contains(rectangleCoordinates[i]))
+                        continue;
+                    _pixelsVisited.Add(rectangleCoordinates[i]);
+                }
+
                 Color pixel = layer.LayerBitmap.GetPixel(rectangleCoordinates[i].X, rectangleCoordinates[i].Y);
                 Color pixel = layer.LayerBitmap.GetPixel(rectangleCoordinates[i].X, rectangleCoordinates[i].Y);
                 Color newColor = ExColor.ChangeColorBrightness(Color.FromArgb(pixel.A, pixel.R, pixel.G, pixel.B),
                 Color newColor = ExColor.ChangeColorBrightness(Color.FromArgb(pixel.A, pixel.R, pixel.G, pixel.B),
                     correctionFactor);
                     correctionFactor);

+ 1 - 1
PixiEditor/Models/Tools/Tools/SelectTool.cs

@@ -26,7 +26,7 @@ namespace PixiEditor.Models.Tools.Tools
 
 
         public override void OnMouseDown()
         public override void OnMouseDown()
         {
         {
-            Enum.TryParse((Toolbar.GetSetting("Mode").Value as ComboBoxItem).Content as string, out SelectionType);
+            Enum.TryParse((Toolbar.GetSetting("Mode").Value as ComboBoxItem)?.Content as string, out SelectionType);
 
 
             _oldSelection = null;
             _oldSelection = null;
             if (ViewModelMain.Current.ActiveSelection != null &&
             if (ViewModelMain.Current.ActiveSelection != null &&