Browse Source

Move all layers in Move tool and executor changes

Krzysztof Krysiński 2 years ago
parent
commit
e1eb448c2e
19 changed files with 153 additions and 33 deletions
  1. 37 10
      src/PixiEditor/Models/DocumentModels/ChangeExecutionController.cs
  2. 30 0
      src/PixiEditor/Models/DocumentModels/Public/DocumentStructureModule.cs
  3. 15 4
      src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/ShiftLayerExecutor.cs
  4. 16 4
      src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/TransformSelectedAreaExecutor.cs
  5. 1 0
      src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/UpdateableChangeExecutor.cs
  6. 6 0
      src/PixiEditor/Models/Enums/ExecutorType.cs
  7. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Main/IoViewModel.cs
  8. 4 4
      src/PixiEditor/ViewModels/SubViewModels/Main/ToolsViewModel.cs
  9. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/ToolViewModel.cs
  10. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/BrightnessToolViewModel.cs
  11. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/ColorPickerToolViewModel.cs
  12. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/EllipseToolViewModel.cs
  13. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/FloodFillToolViewModel.cs
  14. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/LassoToolViewModel.cs
  15. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/LineToolViewModel.cs
  16. 33 0
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/MoveToolViewModel.cs
  17. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/RectangleToolViewModel.cs
  18. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/SelectToolViewModel.cs
  19. 1 1
      src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/ZoomToolViewModel.cs

+ 37 - 10
src/PixiEditor/Models/DocumentModels/ChangeExecutionController.cs

@@ -27,6 +27,8 @@ internal class ChangeExecutionController
     private VecD lastPrecisePos;
     private VecD lastPrecisePos;
 
 
     private UpdateableChangeExecutor? currentSession = null;
     private UpdateableChangeExecutor? currentSession = null;
+    
+    private UpdateableChangeExecutor? _queuedExecutor = null;
 
 
     public ChangeExecutionController(DocumentViewModel document, DocumentInternalParts internals)
     public ChangeExecutionController(DocumentViewModel document, DocumentInternalParts internals)
     {
     {
@@ -44,32 +46,51 @@ internal class ChangeExecutionController
     public bool TryStartExecutor<T>(bool force = false)
     public bool TryStartExecutor<T>(bool force = false)
         where T : UpdateableChangeExecutor, new()
         where T : UpdateableChangeExecutor, new()
     {
     {
-        if (currentSession is not null && !force)
+        if (CanStartExecutor(force))
             return false;
             return false;
         if (force)
         if (force)
             currentSession?.ForceStop();
             currentSession?.ForceStop();
+        
         T executor = new T();
         T executor = new T();
-        executor.Initialize(document, internals, this, EndExecutor);
-        if (executor.Start() == ExecutionState.Success)
-        {
-            currentSession = executor;
-            return true;
-        }
-        return false;
+        return TryStartExecutorInternal(executor);
     }
     }
 
 
     public bool TryStartExecutor(UpdateableChangeExecutor brandNewExecutor, bool force = false)
     public bool TryStartExecutor(UpdateableChangeExecutor brandNewExecutor, bool force = false)
     {
     {
-        if (currentSession is not null && !force)
+        if (CanStartExecutor(force))
             return false;
             return false;
         if (force)
         if (force)
             currentSession?.ForceStop();
             currentSession?.ForceStop();
-        brandNewExecutor.Initialize(document, internals, this, EndExecutor);
+        
+        return TryStartExecutorInternal(brandNewExecutor);
+    }
+
+    private bool CanStartExecutor(bool force)
+    {
+        return (currentSession is not null || _queuedExecutor is not null) && !force;
+    }
+
+    private bool TryStartExecutorInternal(UpdateableChangeExecutor executor)
+    {
+        executor.Initialize(document, internals, this, EndExecutor);
+
+        if (executor.StartMode == ExecutorStartMode.OnMouseLeftButtonDown)
+        {
+            _queuedExecutor = executor;
+            return true;
+        }
+
+        return StartExecutor(executor);
+    }
+    
+    private bool StartExecutor(UpdateableChangeExecutor brandNewExecutor)
+    {
         if (brandNewExecutor.Start() == ExecutionState.Success)
         if (brandNewExecutor.Start() == ExecutionState.Success)
         {
         {
             currentSession = brandNewExecutor;
             currentSession = brandNewExecutor;
             return true;
             return true;
         }
         }
+
         return false;
         return false;
     }
     }
 
 
@@ -78,6 +99,7 @@ internal class ChangeExecutionController
         if (executor != currentSession)
         if (executor != currentSession)
             throw new InvalidOperationException();
             throw new InvalidOperationException();
         currentSession = null;
         currentSession = null;
+        _queuedExecutor = null;
     }
     }
 
 
     public bool TryStopActiveExecutor()
     public bool TryStopActiveExecutor()
@@ -153,6 +175,11 @@ internal class ChangeExecutionController
         //update internal state
         //update internal state
         LeftMouseState = MouseButtonState.Pressed;
         LeftMouseState = MouseButtonState.Pressed;
 
 
+        if (_queuedExecutor != null && currentSession == null)
+        {
+            StartExecutor(_queuedExecutor);
+        }
+        
         //call session event
         //call session event
         currentSession?.OnLeftMouseButtonDown(canvasPos);
         currentSession?.OnLeftMouseButtonDown(canvasPos);
     }
     }

+ 30 - 0
src/PixiEditor/Models/DocumentModels/Public/DocumentStructureModule.cs

@@ -68,6 +68,36 @@ internal class DocumentStructureModule
             list.Add(doc.StructureRoot);
             list.Add(doc.StructureRoot);
         return list;
         return list;
     }
     }
+    
+    /// <summary>
+    ///     Returns all layers in the document.
+    /// </summary>
+    /// <returns>List of LayerViewModels. Empty if no layers found.</returns>
+    public List<LayerViewModel> GetAllLayers()
+    {
+        List<LayerViewModel> layers = new List<LayerViewModel>();
+        foreach (StructureMemberViewModel? member in doc.StructureRoot.Children)
+        {
+            if (member is LayerViewModel layer)
+                layers.Add(layer);
+            else if (member is FolderViewModel folder)
+                layers.AddRange(GetAllLayers(folder, layers));
+        }
+        
+        return layers;
+    }
+    
+    private List<LayerViewModel> GetAllLayers(FolderViewModel folder, List<LayerViewModel> layers)
+    {
+        foreach (StructureMemberViewModel? member in folder.Children)
+        {
+            if (member is LayerViewModel layer)
+                layers.Add(layer);
+            else if (member is FolderViewModel innerFolder)
+                layers.AddRange(GetAllLayers(innerFolder, layers));
+        }
+        return layers;
+    }
 
 
     private bool FillPath(FolderViewModel folder, Guid guid, List<StructureMemberViewModel> toFill)
     private bool FillPath(FolderViewModel folder, Guid guid, List<StructureMemberViewModel> toFill)
     {
     {

+ 15 - 4
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/ShiftLayerExecutor.cs

@@ -13,17 +13,28 @@ internal class ShiftLayerExecutor : UpdateableChangeExecutor
     private VecI startPos;
     private VecI startPos;
     private MoveToolViewModel? tool;
     private MoveToolViewModel? tool;
 
 
+    public override ExecutorStartMode StartMode => ExecutorStartMode.OnMouseLeftButtonDown;
+
     public override ExecutionState Start()
     public override ExecutionState Start()
     {
     {
         ViewModelMain? vm = ViewModelMain.Current;
         ViewModelMain? vm = ViewModelMain.Current;
         StructureMemberViewModel? member = document!.SelectedStructureMember;
         StructureMemberViewModel? member = document!.SelectedStructureMember;
-        if(member != null)
-            _affectedMemberGuids.Add(member.GuidValue);
-        _affectedMemberGuids.AddRange(document!.SoftSelectedStructureMembers.Select(x => x.GuidValue));
+        
         tool = ViewModelMain.Current?.ToolsSubViewModel.GetTool<MoveToolViewModel>();
         tool = ViewModelMain.Current?.ToolsSubViewModel.GetTool<MoveToolViewModel>();
         if (vm is null || tool is null)
         if (vm is null || tool is null)
             return ExecutionState.Error;
             return ExecutionState.Error;
-        
+
+        if (tool.MoveAllLayers)
+        {
+            _affectedMemberGuids.AddRange(document.StructureHelper.GetAllLayers().Select(x => x.GuidValue));
+        }
+        else
+        {
+            if (member != null)
+                _affectedMemberGuids.Add(member.GuidValue);
+            _affectedMemberGuids.AddRange(document!.SoftSelectedStructureMembers.Select(x => x.GuidValue));
+        }
+
         RemoveDrawOnMaskLayers(_affectedMemberGuids);
         RemoveDrawOnMaskLayers(_affectedMemberGuids);
         
         
         startPos = controller!.LastPixelPosition;
         startPos = controller!.LastPixelPosition;

+ 16 - 4
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/TransformSelectedAreaExecutor.cs

@@ -11,7 +11,6 @@ internal class TransformSelectedAreaExecutor : UpdateableChangeExecutor
 {
 {
     private Guid[]? membersToTransform;
     private Guid[]? membersToTransform;
     private MoveToolViewModel? tool;
     private MoveToolViewModel? tool;
-
     public override ExecutorType Type { get; }
     public override ExecutorType Type { get; }
 
 
     public TransformSelectedAreaExecutor(bool toolLinked)
     public TransformSelectedAreaExecutor(bool toolLinked)
@@ -25,10 +24,13 @@ internal class TransformSelectedAreaExecutor : UpdateableChangeExecutor
         if (tool is null || document!.SelectedStructureMember is null || document!.SelectionPathBindable.IsEmpty)
         if (tool is null || document!.SelectedStructureMember is null || document!.SelectionPathBindable.IsEmpty)
             return ExecutionState.Error;
             return ExecutionState.Error;
 
 
-        var members = document.SoftSelectedStructureMembers
+        tool.TransformingSelectedArea = true;
+        List<StructureMemberViewModel> members = new();
+        
+        members = document.SoftSelectedStructureMembers
             .Append(document.SelectedStructureMember)
             .Append(document.SelectedStructureMember)
-            .Where(static m => m is LayerViewModel);
-
+            .Where(static m => m is LayerViewModel).ToList();
+        
         if (!members.Any())
         if (!members.Any())
             return ExecutionState.Error;
             return ExecutionState.Error;
 
 
@@ -54,6 +56,11 @@ internal class TransformSelectedAreaExecutor : UpdateableChangeExecutor
 
 
     public override void OnTransformApplied()
     public override void OnTransformApplied()
     {
     {
+        if (tool is not null)
+        {
+            tool.TransformingSelectedArea = false;
+        }
+        
         internals!.ActionAccumulator.AddActions(new EndTransformSelectedArea_Action());
         internals!.ActionAccumulator.AddActions(new EndTransformSelectedArea_Action());
         internals!.ActionAccumulator.AddFinishedActions();
         internals!.ActionAccumulator.AddFinishedActions();
         document!.TransformViewModel.HideTransform();
         document!.TransformViewModel.HideTransform();
@@ -67,6 +74,11 @@ internal class TransformSelectedAreaExecutor : UpdateableChangeExecutor
 
 
     public override void ForceStop()
     public override void ForceStop()
     {
     {
+        if (tool is not null)
+        {
+            tool.TransformingSelectedArea = false;
+        }
+        
         internals!.ActionAccumulator.AddActions(new EndTransformSelectedArea_Action());
         internals!.ActionAccumulator.AddActions(new EndTransformSelectedArea_Action());
         internals!.ActionAccumulator.AddFinishedActions();
         internals!.ActionAccumulator.AddFinishedActions();
         document!.TransformViewModel.HideTransform();
         document!.TransformViewModel.HideTransform();

+ 1 - 0
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/UpdateableChangeExecutor.cs

@@ -17,6 +17,7 @@ internal abstract class UpdateableChangeExecutor
 
 
     protected Action<UpdateableChangeExecutor>? onEnded;
     protected Action<UpdateableChangeExecutor>? onEnded;
     public virtual ExecutorType Type => ExecutorType.Regular;
     public virtual ExecutorType Type => ExecutorType.Regular;
+    public virtual ExecutorStartMode StartMode => ExecutorStartMode.OnSelectTool;
 
 
     public void Initialize(DocumentViewModel document, DocumentInternalParts internals, ChangeExecutionController controller, Action<UpdateableChangeExecutor> onEnded)
     public void Initialize(DocumentViewModel document, DocumentInternalParts internals, ChangeExecutionController controller, Action<UpdateableChangeExecutor> onEnded)
     {
     {

+ 6 - 0
src/PixiEditor/Models/Enums/ExecutorType.cs

@@ -5,3 +5,9 @@ internal enum ExecutorType
     Regular,
     Regular,
     ToolLinked,
     ToolLinked,
 }
 }
+
+internal enum ExecutorStartMode
+{
+    OnSelectTool,
+    OnMouseLeftButtonDown,
+}

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

@@ -157,8 +157,8 @@ internal class IoViewModel : SubViewModel<ViewModelMain>
             if (activeDocument == null)
             if (activeDocument == null)
                 return;
                 return;
 
 
-            activeDocument.EventInlet.OnCanvasLeftMouseButtonDown(args.PositionOnCanvas);
             Owner.ToolsSubViewModel.LeftMouseButtonDownInlet(args.PositionOnCanvas);
             Owner.ToolsSubViewModel.LeftMouseButtonDownInlet(args.PositionOnCanvas);
+            activeDocument.EventInlet.OnCanvasLeftMouseButtonDown(args.PositionOnCanvas);
         }
         }
     }
     }
 
 

+ 4 - 4
src/PixiEditor/ViewModels/SubViewModels/Main/ToolsViewModel.cs

@@ -130,9 +130,9 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>
             SelectedToolChanged?.Invoke(this, new SelectedToolEventArgs(LastActionTool, ActiveTool));
             SelectedToolChanged?.Invoke(this, new SelectedToolEventArgs(LastActionTool, ActiveTool));
 
 
         //update old tool
         //update old tool
-        LastActionTool?.UpdateActionDisplay(false, false, false);
+        LastActionTool?.ModiferKeyChanged(false, false, false);
         //update new tool
         //update new tool
-        ActiveTool.UpdateActionDisplay(ctrlIsDown, shiftIsDown, altIsDown);
+        ActiveTool.ModiferKeyChanged(ctrlIsDown, shiftIsDown, altIsDown);
         ActiveTool.OnSelected();
         ActiveTool.OnSelected();
 
 
         tool.IsActive = true;
         tool.IsActive = true;
@@ -225,11 +225,11 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>
 
 
     public void ConvertedKeyDownInlet(FilteredKeyEventArgs args)
     public void ConvertedKeyDownInlet(FilteredKeyEventArgs args)
     {
     {
-        ActiveTool?.UpdateActionDisplay(args.IsCtrlDown, args.IsShiftDown, args.IsAltDown);
+        ActiveTool?.ModiferKeyChanged(args.IsCtrlDown, args.IsShiftDown, args.IsAltDown);
     }
     }
 
 
     public void ConvertedKeyUpInlet(FilteredKeyEventArgs args)
     public void ConvertedKeyUpInlet(FilteredKeyEventArgs args)
     {
     {
-        ActiveTool?.UpdateActionDisplay(args.IsCtrlDown, args.IsShiftDown, args.IsAltDown);
+        ActiveTool?.ModiferKeyChanged(args.IsCtrlDown, args.IsShiftDown, args.IsAltDown);
     }
     }
 }
 }

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

@@ -53,7 +53,7 @@ internal abstract class ToolViewModel : NotifyableObject
 
 
     public Toolbar Toolbar { get; set; } = new EmptyToolbar();
     public Toolbar Toolbar { get; set; } = new EmptyToolbar();
 
 
-    public virtual void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown) { }
+    public virtual void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown) { }
     public virtual void OnLeftMouseButtonDown(VecD pos) { }
     public virtual void OnLeftMouseButtonDown(VecD pos) { }
     public virtual void OnSelected() 
     public virtual void OnSelected() 
     {
     {

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

@@ -35,7 +35,7 @@ internal class BrightnessToolViewModel : ToolViewModel
     
     
     public bool Darken { get; private set; } = false;
     public bool Darken { get; private set; } = false;
 
 
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (!ctrlIsDown)
         if (!ctrlIsDown)
         {
         {

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

@@ -47,7 +47,7 @@ internal class ColorPickerToolViewModel : ToolViewModel
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseColorPickerTool();
         ViewModelMain.Current?.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseColorPickerTool();
     }
     }
 
 
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (ctrlIsDown)
         if (ctrlIsDown)
         {
         {

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

@@ -18,7 +18,7 @@ internal class EllipseToolViewModel : ShapeTool
     public override string Tooltip => $"Draws an ellipse on canvas ({Shortcut}). Hold Shift to draw a circle.";
     public override string Tooltip => $"Draws an ellipse on canvas ({Shortcut}). Hold Shift to draw a circle.";
     public bool DrawCircle { get; private set; }
     public bool DrawCircle { get; private set; }
 
 
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (shiftIsDown)
         if (shiftIsDown)
         {
         {

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

@@ -22,7 +22,7 @@ internal class FloodFillToolViewModel : ToolViewModel
         ActionDisplay = defaultActionDisplay;
         ActionDisplay = defaultActionDisplay;
     }
     }
 
 
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (ctrlIsDown)
         if (ctrlIsDown)
         {
         {

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

@@ -21,7 +21,7 @@ internal class LassoToolViewModel : ToolViewModel
     private SelectionMode modifierKeySelectionMode = SelectionMode.New;
     private SelectionMode modifierKeySelectionMode = SelectionMode.New;
     public SelectionMode ResultingSelectionMode => modifierKeySelectionMode != SelectionMode.New ? modifierKeySelectionMode : SelectMode;
     public SelectionMode ResultingSelectionMode => modifierKeySelectionMode != SelectionMode.New ? modifierKeySelectionMode : SelectMode;
 
 
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (shiftIsDown)
         if (shiftIsDown)
         {
         {

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

@@ -24,7 +24,7 @@ internal class LineToolViewModel : ShapeTool
 
 
     public bool Snap { get; private set; }
     public bool Snap { get; private set; }
 
 
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (shiftIsDown)
         if (shiftIsDown)
         {
         {

+ 33 - 0
src/PixiEditor/ViewModels/SubViewModels/Tools/Tools/MoveToolViewModel.cs

@@ -11,6 +11,10 @@ namespace PixiEditor.ViewModels.SubViewModels.Tools.Tools;
 internal class MoveToolViewModel : ToolViewModel
 internal class MoveToolViewModel : ToolViewModel
 {
 {
     private string defaultActionDisplay = "Hold mouse to move selected pixels. Hold Ctrl to move all layers.";
     private string defaultActionDisplay = "Hold mouse to move selected pixels. Hold Ctrl to move all layers.";
+    private string transformingActionDisplay = "Click and hold mouse to move pixels in selected layers.";
+    private bool transformingSelectedArea = false;
+
+    public bool MoveAllLayers { get; set; }
 
 
     public MoveToolViewModel()
     public MoveToolViewModel()
     {
     {
@@ -27,11 +31,40 @@ internal class MoveToolViewModel : ToolViewModel
     public override BrushShape BrushShape => BrushShape.Hidden;
     public override BrushShape BrushShape => BrushShape.Hidden;
     public override bool HideHighlight => true;
     public override bool HideHighlight => true;
 
 
+    public bool TransformingSelectedArea
+    {
+        get => transformingSelectedArea;
+        set
+        {
+            transformingSelectedArea = value;
+            ActionDisplay = value ? transformingActionDisplay : defaultActionDisplay;
+        }
+    }
+
     public override void OnLeftMouseButtonDown(VecD pos)
     public override void OnLeftMouseButtonDown(VecD pos)
     {
     {
         ViewModelMain.Current.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseShiftLayerTool();
         ViewModelMain.Current.DocumentManagerSubViewModel.ActiveDocument?.Tools.UseShiftLayerTool();
     }
     }
 
 
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    {
+        if (TransformingSelectedArea)
+        {
+            return;
+        }
+        
+        if (ctrlIsDown)
+        {
+            ActionDisplay = "Hold mouse to move all layers.";
+            MoveAllLayers = true;
+        }
+        else
+        {
+            ActionDisplay = defaultActionDisplay;
+            MoveAllLayers = false;
+        }
+    }
+
     public override void OnSelected()
     public override void OnSelected()
     {
     {
         ViewModelMain.Current.DocumentManagerSubViewModel.ActiveDocument?.Operations.TransformSelectedArea(true);
         ViewModelMain.Current.DocumentManagerSubViewModel.ActiveDocument?.Operations.TransformSelectedArea(true);

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

@@ -18,7 +18,7 @@ internal class RectangleToolViewModel : ShapeTool
 
 
     public bool Filled { get; set; } = false;
     public bool Filled { get; set; } = false;
     public bool DrawSquare { get; private set; } = false;
     public bool DrawSquare { get; private set; } = false;
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (shiftIsDown)
         if (shiftIsDown)
         {
         {

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

@@ -24,7 +24,7 @@ internal class SelectToolViewModel : ToolViewModel
     private SelectionMode modifierKeySelectionMode = SelectionMode.New;
     private SelectionMode modifierKeySelectionMode = SelectionMode.New;
     public SelectionMode ResultingSelectionMode => modifierKeySelectionMode != SelectionMode.New ? modifierKeySelectionMode : SelectMode;
     public SelectionMode ResultingSelectionMode => modifierKeySelectionMode != SelectionMode.New ? modifierKeySelectionMode : SelectMode;
 
 
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (shiftIsDown)
         if (shiftIsDown)
         {
         {

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

@@ -27,7 +27,7 @@ internal class ZoomToolViewModel : ToolViewModel
 
 
     public override string Tooltip => $"Zooms viewport ({Shortcut}). Click to zoom in, hold alt and click to zoom out.";
     public override string Tooltip => $"Zooms viewport ({Shortcut}). Click to zoom in, hold alt and click to zoom out.";
 
 
-    public override void UpdateActionDisplay(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
+    public override void ModiferKeyChanged(bool ctrlIsDown, bool shiftIsDown, bool altIsDown)
     {
     {
         if (ctrlIsDown)
         if (ctrlIsDown)
         {
         {