Browse Source

Fixed transform selected executor offset

flabbet 7 months ago
parent
commit
fe5b0dc619

+ 17 - 11
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/TransformSelectedExecutor.cs

@@ -27,6 +27,7 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
     private List<Guid> selectedMembers = new();
 
     private ShapeCorners lastCorners = new();
+    private bool movedOnce;
 
     public TransformSelectedExecutor(bool toolLinked)
     {
@@ -70,7 +71,7 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
             {
                 allRaster = false;
             }
-            
+
             if (member is IRasterLayerHandler)
             {
                 anyRaster = true;
@@ -117,13 +118,10 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
         lastCorners = masterCorners;
         document.TransformHandler.ShowTransform(mode, true, masterCorners,
             Type == ExecutorType.Regular || tool.KeepOriginalImage);
-        
-        document.TransformHandler.CanAlignToPixels = anyRaster;
 
-        /*internals!.ActionAccumulator.AddActions(
-            new TransformSelected_Action(masterCorners, tool.KeepOriginalImage, memberCorners, false,
-                document.AnimationHandler.ActiveFrameBindable));*/
+        document.TransformHandler.CanAlignToPixels = anyRaster;
 
+        movedOnce = false;
         isInProgress = true;
         return ExecutionState.Success;
     }
@@ -139,7 +137,7 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
         var nonSelected = topMostWithinClick.Where(x => x != document.SelectedStructureMember
                                                         && !document.SoftSelectedStructureMembers.Contains(x))
             .ToArray();
-        
+
         bool isHoldingShift = args.KeyModifiers.HasFlag(KeyModifiers.Shift);
 
         if (nonSelected.Any())
@@ -177,10 +175,10 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
                 Guid? nextMain = document.SoftSelectedStructureMembers.FirstOrDefault().Id;
                 List<Guid> softSelected = document.SoftSelectedStructureMembers
                     .Select(x => x.Id).Where(x => x != nextMain.Value).ToList();
-                    
+
                 document.Operations.ClearSoftSelectedMembers();
                 document.Operations.SetSelectedMember(nextMain.Value);
-                    
+
                 foreach (var guid in softSelected)
                 {
                     document.Operations.AddSoftSelectedMember(guid);
@@ -190,9 +188,9 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
             {
                 List<Guid> softSelected = document.SoftSelectedStructureMembers
                     .Select(x => x.Id).Where(x => x != topMost.Id).ToList();
-                    
+
                 document.Operations.ClearSoftSelectedMembers();
-                    
+
                 foreach (var guid in softSelected)
                 {
                     document.Operations.AddSoftSelectedMember(guid);
@@ -243,6 +241,14 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
         if (!isInProgress)
             return;
 
+        if (!movedOnce)
+        {
+            internals!.ActionAccumulator.AddActions(
+                new TransformSelected_Action(lastCorners, tool.KeepOriginalImage, memberCorners, false,
+                    document.AnimationHandler.ActiveFrameBindable));
+            movedOnce = true;
+        }
+
         internals!.ActionAccumulator.AddActions(
             new TransformSelected_Action(corners, tool!.KeepOriginalImage, memberCorners, false,
                 document!.AnimationHandler.ActiveFrameBindable));