Browse Source

Fixed self snapping

Krzysztof Krysiński 3 months ago
parent
commit
98d65978d5

+ 8 - 1
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/SimpleShapeToolExecutor.cs

@@ -73,7 +73,11 @@ internal abstract class SimpleShapeToolExecutor : UpdateableChangeExecutor,
             ActiveMode = ShapeToolMode.Preview;
         }
 
-        restoreSnapping = DisableSelfSnapping(memberId, document);
+        if (controller.LeftMousePressed)
+        {
+            restoreSnapping?.Dispose();
+            restoreSnapping = DisableSelfSnapping(memberId, document);
+        }
 
         return ExecutionState.Success;
     }
@@ -127,6 +131,9 @@ internal abstract class SimpleShapeToolExecutor : UpdateableChangeExecutor,
         {
             ActiveMode = ShapeToolMode.Drawing;
         }
+
+        restoreSnapping?.Dispose();
+        restoreSnapping = DisableSelfSnapping(memberId, document);
     }
 
     public override void OnPrecisePositionChange(VecD pos)

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

@@ -135,7 +135,7 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>, IToolsHandler
                 var foundToolSet = toolsets.FirstOrDefault(x => x.Name == toolSetConfig.Name);
                 if (foundToolSet is not null)
                 {
-                   AllToolSets.Add(foundToolSet);
+                    AllToolSets.Add(foundToolSet);
                 }
             }
 
@@ -424,6 +424,7 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>, IToolsHandler
         {
             if (ActiveTool.LayerTypeToCreateOnEmptyUse == null) return;
 
+            using var changeBlock = Owner.DocumentManagerSubViewModel.ActiveDocument.Operations.StartChangeBlock();
             Guid? createdLayer = Owner.LayersSubViewModel.NewLayer(
                 ActiveTool.LayerTypeToCreateOnEmptyUse,
                 ActionSource.Automated,
@@ -433,21 +434,10 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>, IToolsHandler
                 Owner.DocumentManagerSubViewModel.ActiveDocument.Operations.SetSelectedMember(createdLayer.Value);
             }
 
-            waitForChange = true;
+            changeBlock.ExecuteQueuedActions();
         }
 
-        if (waitForChange)
-        {
-            Owner.DocumentManagerSubViewModel.ActiveDocument.Operations
-                .InvokeCustomAction(() =>
-                {
-                    ActiveTool.UseTool(canvasPos);
-                });
-        }
-        else
-        {
-            ActiveTool.UseTool(canvasPos);
-        }
+        ActiveTool.UseTool(canvasPos);
     }
 
     public void ConvertedKeyDownInlet(FilteredKeyEventArgs args)