Browse Source

Implemented AI to detimine what tools should do on right click

CPKreuz 2 years ago
parent
commit
bcc54c4ccb

+ 14 - 7
src/PixiEditor/ViewModels/SubViewModels/Main/IoViewModel.cs

@@ -177,6 +177,11 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
 
 
         switch (tools.RightClickMode)
         switch (tools.RightClickMode)
         {
         {
+            case RightClickMode.SecondaryColor when tools.ActiveTool.UsesColor:
+            case RightClickMode.Erase when tools.ActiveTool is ColorPickerToolViewModel:
+                Owner.ColorsSubViewModel.SwapColors(null);
+                hadSwapped = true;
+                return true;
             case RightClickMode.Erase when tools.ActiveTool.IsErasable:
             case RightClickMode.Erase when tools.ActiveTool.IsErasable:
             {
             {
                 var currentToolSize = tools.ActiveTool.Toolbar.Settings.FirstOrDefault(x => x.Name == "ToolSize");
                 var currentToolSize = tools.ActiveTool.Toolbar.Settings.FirstOrDefault(x => x.Name == "ToolSize");
@@ -198,10 +203,6 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
             }
             }
             case RightClickMode.SecondaryColor when tools.ActiveTool is BrightnessToolViewModel:
             case RightClickMode.SecondaryColor when tools.ActiveTool is BrightnessToolViewModel:
                 return true;
                 return true;
-            case RightClickMode.SecondaryColor when tools.ActiveTool.UsesColor:
-                Owner.ColorsSubViewModel.SwapColors(null);
-                hadSwapped = true;
-                return true;
             case RightClickMode.ContextMenu:
             case RightClickMode.ContextMenu:
             default:
             default:
                 return false;
                 return false;
@@ -246,6 +247,15 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
         switch (button)
         switch (button)
         {
         {
             case MouseButton.Middle:
             case MouseButton.Middle:
+                tools.RestorePreviousTool();
+                break;
+            case MouseButton.Right when hadSwapped && 
+                 (tools.RightClickMode == RightClickMode.SecondaryColor || 
+                  (tools.ActiveTool is ColorPickerToolViewModel && tools.RightClickMode == RightClickMode.Erase)
+                 ):
+
+                Owner.ColorsSubViewModel.SwapColors(null);
+                break;
             case MouseButton.Right when tools.RightClickMode == RightClickMode.Erase:
             case MouseButton.Right when tools.RightClickMode == RightClickMode.Erase:
                 tools.EnableSharedToolbar = hadSharedToolbar;
                 tools.EnableSharedToolbar = hadSharedToolbar;
                 if (previousEraseSize != null)
                 if (previousEraseSize != null)
@@ -254,9 +264,6 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
                 }
                 }
                 tools.RestorePreviousTool();
                 tools.RestorePreviousTool();
                 break;
                 break;
-            case MouseButton.Right when hadSwapped && tools.RightClickMode == RightClickMode.SecondaryColor:
-                Owner.ColorsSubViewModel.SwapColors(null);
-                break;
         }
         }
 
 
         hadSwapped = false;
         hadSwapped = false;

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

@@ -20,6 +20,8 @@ internal class EraserToolViewModel : ToolViewModel
     [Settings.Inherited]
     [Settings.Inherited]
     public int ToolSize => GetValue<int>();
     public int ToolSize => GetValue<int>();
 
 
+    public override bool IsErasable => true;
+
     public override string ToolNameLocalizationKey => "ERASER_TOOL";
     public override string ToolNameLocalizationKey => "ERASER_TOOL";
     public override BrushShape BrushShape => BrushShape.Circle;
     public override BrushShape BrushShape => BrushShape.Circle;
 
 

+ 11 - 0
src/PixiEditor/Views/MainWindow.xaml.cs

@@ -14,6 +14,7 @@ using PixiEditor.Models.IO;
 using PixiEditor.Models.UserPreferences;
 using PixiEditor.Models.UserPreferences;
 using PixiEditor.ViewModels.SubViewModels.Document;
 using PixiEditor.ViewModels.SubViewModels.Document;
 using PixiEditor.ViewModels.SubViewModels.Tools;
 using PixiEditor.ViewModels.SubViewModels.Tools;
+using PixiEditor.ViewModels.SubViewModels.Tools.Tools;
 
 
 namespace PixiEditor.Views;
 namespace PixiEditor.Views;
 
 
@@ -253,6 +254,16 @@ internal partial class MainWindow : Window
     private void Viewport_OnContextMenuOpening(object sender, ContextMenuEventArgs e)
     private void Viewport_OnContextMenuOpening(object sender, ContextMenuEventArgs e)
     {
     {
         var tools = DataContext.ToolsSubViewModel;
         var tools = DataContext.ToolsSubViewModel;
+
+        var superSpecialBrightnessTool = tools.RightClickMode == RightClickMode.SecondaryColor && tools.ActiveTool is BrightnessToolViewModel;
+        var superSpecialColorPicker = tools.RightClickMode == RightClickMode.Erase && tools.ActiveTool is ColorPickerToolViewModel;
+
+        if (superSpecialBrightnessTool || superSpecialColorPicker)
+        {
+            e.Handled = true;
+            return;
+        }
+
         var useContextMenu = DataContext.ToolsSubViewModel.RightClickMode == RightClickMode.ContextMenu;
         var useContextMenu = DataContext.ToolsSubViewModel.RightClickMode == RightClickMode.ContextMenu;
         var usesErase = tools.RightClickMode == RightClickMode.Erase && tools.ActiveTool.IsErasable;
         var usesErase = tools.RightClickMode == RightClickMode.Erase && tools.ActiveTool.IsErasable;
         var usesSecondaryColor = tools.RightClickMode == RightClickMode.SecondaryColor && tools.ActiveTool.UsesColor;
         var usesSecondaryColor = tools.RightClickMode == RightClickMode.SecondaryColor && tools.ActiveTool.UsesColor;