Browse Source

Added individual right click mode settings for tools

CPKreuz 2 years ago
parent
commit
4ca2b4cb3b

+ 25 - 26
src/PixiEditor/ViewModels/SubViewModels/Main/IoViewModel.cs

@@ -175,36 +175,35 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
     {
         var tools = Owner.ToolsSubViewModel;
 
-        if (tools.ActiveTool is not ShapeTool || tools.RightClickMode == RightClickMode.ContextMenu)
+        switch (tools.RightClickMode)
         {
-            return false;
-        }
-
-        if (tools.RightClickMode == RightClickMode.Erase)
-        {
-            var currentToolSize = tools.ActiveTool.Toolbar.Settings.FirstOrDefault(x => x.Name == "ToolSize");
-            hadSharedToolbar = tools.EnableSharedToolbar;
-            if (currentToolSize != null)
-            {
-                tools.EnableSharedToolbar = false;
-                var toolSize = tools.GetTool<EraserToolViewModel>().Toolbar.Settings.First(x => x.Name == "ToolSize");
-                previousEraseSize = (int)toolSize.Value;
-                toolSize.Value = tools.ActiveTool is PenToolViewModel { PixelPerfectEnabled: true } ? 1 : currentToolSize.Value;
-            }
-            else
+            case RightClickMode.Erase when tools.ActiveTool.IsErasable:
             {
-                previousEraseSize = null;
-            }
+                var currentToolSize = tools.ActiveTool.Toolbar.Settings.FirstOrDefault(x => x.Name == "ToolSize");
+                hadSharedToolbar = tools.EnableSharedToolbar;
+                if (currentToolSize != null)
+                {
+                    tools.EnableSharedToolbar = false;
+                    var toolSize = tools.GetTool<EraserToolViewModel>().Toolbar.Settings.First(x => x.Name == "ToolSize");
+                    previousEraseSize = (int)toolSize.Value;
+                    toolSize.Value = tools.ActiveTool is PenToolViewModel { PixelPerfectEnabled: true } ? 1 : currentToolSize.Value;
+                }
+                else
+                {
+                    previousEraseSize = null;
+                }
 
-            tools.SetActiveTool<EraserToolViewModel>(true);
-        }
-        else if (tools.RightClickMode == RightClickMode.SecondaryColor)
-        {
-            Owner.ColorsSubViewModel.SwapColors(null);
-            hadSwapped = true;
+                tools.SetActiveTool<EraserToolViewModel>(true);
+                return true;
+            }
+            case RightClickMode.SecondaryColor when tools.ActiveTool.UsesColor:
+                Owner.ColorsSubViewModel.SwapColors(null);
+                hadSwapped = true;
+                return true;
+            case RightClickMode.ContextMenu:
+            default:
+                return false;
         }
-
-        return true;
     }
 
     private void OnPreviewMiddleMouseButton(object sender)

+ 5 - 0
src/PixiEditor/ViewModels/SubViewModels/Tools/ShapeTool.cs

@@ -7,6 +7,11 @@ namespace PixiEditor.ViewModels.SubViewModels.Tools;
 internal abstract class ShapeTool : ToolViewModel
 {
     public override BrushShape BrushShape => BrushShape.Pixel;
+
+    public override bool UsesColor => true;
+
+    public override bool IsErasable => true;
+
     public ShapeTool()
     {
         Cursor = Cursors.Cross;

+ 10 - 0
src/PixiEditor/ViewModels/SubViewModels/Tools/ToolViewModel.cs

@@ -29,6 +29,16 @@ internal abstract class ToolViewModel : NotifyableObject
 
     public abstract LocalizedString Tooltip { get; }
 
+    /// <summary>
+    /// Determines if secondary color should be used if right click mode is set to secondary color
+    /// </summary>
+    public virtual bool UsesColor => false;
+
+    /// <summary>
+    /// Determines if PixiEditor should switch to the Eraser when right click mode is set to erase
+    /// </summary>
+    public virtual bool IsErasable => false;
+
     private LocalizedString actionDisplay = string.Empty;
     public LocalizedString ActionDisplay
     {

+ 2 - 0
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/ColorPickerToolViewModel.cs

@@ -21,6 +21,8 @@ internal class ColorPickerToolViewModel : ToolViewModel
     
     public override bool HideHighlight => true;
 
+    public override bool UsesColor => true;
+
     public override string ToolNameLocalizationKey => "COLOR_PICKER_TOOL";
     public override BrushShape BrushShape => BrushShape.Pixel;
 

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

@@ -15,7 +15,9 @@ internal class FloodFillToolViewModel : ToolViewModel
     public override string ToolNameLocalizationKey => "FLOOD_FILL_TOOL";
     public override BrushShape BrushShape => BrushShape.Pixel;
 
-    public override LocalizedString Tooltip => new LocalizedString("FLOOD_FILL_TOOL_TOOLTIP", Shortcut);
+    public override LocalizedString Tooltip => new("FLOOD_FILL_TOOL_TOOLTIP", Shortcut);
+
+    public override bool UsesColor => true;
 
     public bool ConsiderAllLayers { get; private set; }