Browse Source

Allow eraser and secondary color (makes it darker) on brightness tool

CPKreuz 2 years ago
parent
commit
13e0c50c5e

+ 3 - 2
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/BrightnessToolExecutor.cs

@@ -1,4 +1,5 @@
-using ChunkyImageLib.DataHolders;
+using System.Windows.Input;
+using ChunkyImageLib.DataHolders;
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.Models.Enums;
 using PixiEditor.ViewModels.SubViewModels.Document;
@@ -27,7 +28,7 @@ internal class BrightnessToolExecutor : UpdateableChangeExecutor
         guidValue = member.GuidValue;
         repeat = tool.BrightnessMode == BrightnessMode.Repeat;
         toolSize = tool.ToolSize;
-        correctionFactor = tool.Darken ? -tool.CorrectionFactor : tool.CorrectionFactor;
+        correctionFactor = tool.Darken || tool.UsedWith == MouseButton.Right ? -tool.CorrectionFactor : tool.CorrectionFactor;
 
         ChangeBrightness_Action action = new(guidValue, controller!.LastPixelPosition, correctionFactor, toolSize, repeat);
         internals!.ActionAccumulator.AddActions(action);

+ 3 - 1
src/PixiEditor/ViewModels/SubViewModels/Main/IoViewModel.cs

@@ -167,7 +167,7 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
             return;
 
         drawingWithRight = args.Button == MouseButton.Right;
-        Owner.ToolsSubViewModel.LeftMouseButtonDownInlet(args.PositionOnCanvas);
+        Owner.ToolsSubViewModel.UseToolEventInlet(args.PositionOnCanvas, args.Button);
         activeDocument.EventInlet.OnCanvasLeftMouseButtonDown(args.PositionOnCanvas);
     }
 
@@ -196,6 +196,8 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
                 tools.SetActiveTool<EraserToolViewModel>(true);
                 return true;
             }
+            case RightClickMode.SecondaryColor when tools.ActiveTool is BrightnessToolViewModel:
+                return true;
             case RightClickMode.SecondaryColor when tools.ActiveTool.UsesColor:
                 Owner.ColorsSubViewModel.SwapColors(null);
                 hadSwapped = true;

+ 5 - 2
src/PixiEditor/ViewModels/SubViewModels/Main/ToolsViewModel.cs

@@ -259,9 +259,12 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>
         ShortcutController.UnblockShortcutExecution("ShortcutDown");
     }
 
-    public void LeftMouseButtonDownInlet(VecD canvasPos)
+    public void UseToolEventInlet(VecD canvasPos, MouseButton button)
     {
-        ActiveTool?.OnLeftMouseButtonDown(canvasPos);
+        if (ActiveTool == null) return;
+
+        ActiveTool.UsedWith = button;
+        ActiveTool.UseTool(canvasPos);
     }
 
     public void ConvertedKeyDownInlet(FilteredKeyEventArgs args)

+ 6 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/ToolViewModel.cs

@@ -44,6 +44,11 @@ internal abstract class ToolViewModel : NotifyableObject
     /// </summary>
     public virtual bool AlwaysShowContextMenu => false;
 
+    /// <summary>
+    /// The mouse button that is being used with the tool
+    /// </summary>
+    public MouseButton UsedWith { get; set; }
+
     private LocalizedString actionDisplay = string.Empty;
     public LocalizedString ActionDisplay
     {
@@ -81,7 +86,7 @@ internal abstract class ToolViewModel : NotifyableObject
     }
 
     public virtual void ModifierKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown) { }
-    public virtual void OnLeftMouseButtonDown(VecD pos) { }
+    public virtual void UseTool(VecD pos) { }
     public virtual void OnSelected() 
     {
         ViewModelMain.Current.DocumentManagerSubViewModel.ActiveDocument?.Operations.TryStopToolLinkedExecutor();

+ 3 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/BrightnessToolViewModel.cs

@@ -22,6 +22,8 @@ internal class BrightnessToolViewModel : ToolViewModel
         Toolbar = ToolbarFactory.Create<BrightnessToolViewModel, BasicToolbar>(this);
     }
 
+    public override bool IsErasable => true;
+
     public override LocalizedString Tooltip => new LocalizedString("BRIGHTNESS_TOOL_TOOLTIP", Shortcut);
 
     public override BrushShape BrushShape => BrushShape.Circle;
@@ -51,7 +53,7 @@ internal class BrightnessToolViewModel : ToolViewModel
         }
     }
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseBrightnessTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/ColorPickerToolViewModel.cs

@@ -150,7 +150,7 @@ internal class ColorPickerToolViewModel : ToolViewModel
         referenceLayer.RaiseShowHighestChanged();
     }
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseColorPickerTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/EllipseToolViewModel.cs

@@ -34,7 +34,7 @@ internal class EllipseToolViewModel : ShapeTool
         }
     }
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseEllipseTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/EraserToolViewModel.cs

@@ -25,7 +25,7 @@ internal class EraserToolViewModel : ToolViewModel
 
     public override LocalizedString Tooltip => new LocalizedString("ERASER_TOOL_TOOLTIP", Shortcut);
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseEraserTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/FloodFillToolViewModel.cs

@@ -40,7 +40,7 @@ internal class FloodFillToolViewModel : ToolViewModel
         }
     }
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseFloodFillTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/LassoToolViewModel.cs

@@ -51,7 +51,7 @@ internal class LassoToolViewModel : ToolViewModel
     [Settings.Enum("MODE_LABEL")]
     public SelectionMode SelectMode => GetValue<SelectionMode>();
     
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseLassoTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/LineToolViewModel.cs

@@ -40,7 +40,7 @@ internal class LineToolViewModel : ShapeTool
         }
     }
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseLineTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/MagicWandToolViewModel.cs

@@ -31,7 +31,7 @@ internal class MagicWandToolViewModel : ToolViewModel
         ActionDisplay = "MAGIC_WAND_ACTION_DISPLAY";
     }
     
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseMagicWandTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/MoveToolViewModel.cs

@@ -44,7 +44,7 @@ internal class MoveToolViewModel : ToolViewModel
         }
     }
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseShiftLayerTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/PenToolViewModel.cs

@@ -42,7 +42,7 @@ namespace PixiEditor.ViewModels.SubViewModels.Tools.Tools
             ActionDisplay = new LocalizedString("PEN_TOOL_ACTION_DISPLAY", Shortcut);
         }
 
-        public override void OnLeftMouseButtonDown(VecD pos)
+        public override void UseTool(VecD pos)
         {
             ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UsePenTool();
         }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/RectangleToolViewModel.cs

@@ -34,7 +34,7 @@ internal class RectangleToolViewModel : ShapeTool
         }
     }
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseRectangleTool();
     }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/SelectToolViewModel.cs

@@ -56,7 +56,7 @@ internal class SelectToolViewModel : ToolViewModel
 
     public override LocalizedString Tooltip => new LocalizedString("SELECT_TOOL_TOOLTIP", Shortcut);
 
-    public override void OnLeftMouseButtonDown(VecD pos)
+    public override void UseTool(VecD pos)
     {
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseSelectTool();
     }