소스 검색

some bug fixes

flabbet 7 달 전
부모
커밋
b148618be9

+ 18 - 34
src/PixiEditor.ChangeableDocument/Changes/Drawing/PreviewTransformSelected_UpdateableChange.cs

@@ -20,7 +20,6 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
     private List<MemberTransformationData> memberData;
 
     private VectorPath? originalPath;
-    private RectD originalSelectionBounds;
     private VecD selectionAwareSize;
     private VecD tightBoundsSize;
     private RectD cornersToSelectionOffset;
@@ -38,7 +37,6 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
     public PreviewTransformSelected_UpdateableChange(
         ShapeCorners masterCorners,
         Dictionary<Guid, ShapeCorners> memberCorners,
-        bool transformMask,
         int frame)
     {
         memberData = new();
@@ -48,7 +46,6 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
         }
 
         this.masterCorners = masterCorners;
-        this.drawOnMask = transformMask;
         this.frame = frame;
     }
 
@@ -65,7 +62,6 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
         {
             originalPath = new VectorPath(target.Selection.SelectionPath) { FillType = PathFillType.EvenOdd };
             tightBoundsWithSelection = originalPath.TightBounds;
-            originalSelectionBounds = tightBoundsWithSelection;
             selectionAwareSize = tightBoundsWithSelection.Size;
             isTransformingSelection = true;
 
@@ -115,14 +111,14 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
             }
             else if (layer is ITransformableObject transformable)
             {
-                SetTransformableMember(layer, member, transformable, tightBounds);
+                SetTransformableMember(member, transformable, tightBounds);
             }
         }
 
         return true;
     }
 
-    private void SetTransformableMember(StructureNode layer, MemberTransformationData member,
+    private void SetTransformableMember(MemberTransformationData member,
         ITransformableObject transformable, RectD tightBounds)
     {
         member.OriginalBounds = tightBounds;
@@ -244,9 +240,19 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
             }
         }
         
+        List<IChangeInfo> infos = new();
+        
+        if (isTransformingSelection)
+        {
+            VectorPath? newPath = originalPath == null ? null : new VectorPath(originalPath); 
+            target.Selection.SelectionPath = newPath;
+            infos.Add(new Selection_ChangeInfo(newPath));
+        }
+        
         hasEnqueudImages = false;
         ignoreInUndo = true;
-        return new None();
+        
+        return infos;
     }
 
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> ApplyTemporarily(Document target)
@@ -264,7 +270,7 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
                         DrawImage(member, targetImage), drawOnMask)
                     .AsT1);
             }
-            else if (member.IsTransformable)
+            /*else if (member.IsTransformable)
             {
                 member.TransformableObject.TransformationMatrix = member.LocalMatrix;
 
@@ -277,14 +283,14 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
 
                 lastAffectedArea = tmp;
                 infos.Add(new TransformObject_ChangeInfo(member.MemberId, translationAffectedArea));
-            }
+            }*/
         }
 
-        if (isTransformingSelection)
+        /*if (isTransformingSelection)
         {
             infos.Add(SelectionChangeHelper.DoSelectionTransform(target, originalPath!, originalSelectionBounds,
                 masterCorners, cornersToSelectionOffset, originalCornersSize));
-        }
+        }*/
 
         return infos;
     }
@@ -305,29 +311,7 @@ internal class PreviewTransformSelected_UpdateableChange : InterruptableUpdateab
             member.Dispose();
         }
     }
-
-    private AffectedArea GetTranslationAffectedArea()
-    {
-        RectI oldBounds = (RectI)masterCorners.AABBBounds.RoundOutwards();
-
-        HashSet<VecI> chunks = new();
-        VecI topLeftChunk = new VecI((int)oldBounds.Left / ChunkyImage.FullChunkSize,
-            (int)oldBounds.Top / ChunkyImage.FullChunkSize);
-        VecI bottomRightChunk = new VecI((int)oldBounds.Right / ChunkyImage.FullChunkSize,
-            (int)oldBounds.Bottom / ChunkyImage.FullChunkSize);
-
-        for (int x = topLeftChunk.X; x <= bottomRightChunk.X; x++)
-        {
-            for (int y = topLeftChunk.Y; y <= bottomRightChunk.Y; y++)
-            {
-                chunks.Add(new VecI(x, y));
-            }
-        }
-
-        var final = new AffectedArea(chunks);
-        return final;
-    }
-
+    
     private AffectedArea DrawImage(MemberTransformationData data, ChunkyImage memberImage)
     {
         var prevAffArea = memberImage.FindAffectedArea();

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changes/Structure/DuplicateFolder_Change.cs

@@ -124,7 +124,7 @@ internal class DuplicateFolder_Change : Change
 
             Node? node = targetNode.Clone();
             
-            if(childGuidsToUse is not null && counter < childGuidsToUse.Length)
+            if(node is not FolderNode && childGuidsToUse is not null && counter < childGuidsToUse.Length)
             {
                 node.Id = childGuidsToUse[counter];
                 counter++;

+ 29 - 15
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/TransformSelectedExecutor.cs

@@ -255,13 +255,15 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
         {
             if (!duplicateOnStop)
             {
-                cornersOnStartDuplicate = corners;
+                cornersOnStartDuplicate = lastCorners;
                 duplicateOnStop = true;
                 internals.ActionAccumulator.AddActions(new EndTransformSelected_Action());
+
+                internals.ActionAccumulator.AddActions(new PreviewTransformSelected_Action(lastCorners, memberCorners,
+                    document!.AnimationHandler.ActiveFrameBindable));
             }
 
             internals.ActionAccumulator.AddActions(new PreviewTransformSelected_Action(corners, memberCorners,
-                false,
                 document!.AnimationHandler.ActiveFrameBindable));
             return;
         }
@@ -289,6 +291,8 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
 
         internals.ActionAccumulator.StartChangeBlock();
 
+        actions.Add(new EndPreviewTransformSelected_Action());
+
         VectorPath? original = document.SelectionPathBindable != null
             ? new VectorPath(document.SelectionPathBindable)
             : null;
@@ -326,6 +330,15 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
 
                 actions.Add(new DuplicateFolder_Action(member, newGuid, newGuidsArray.ToImmutableList()));
 
+                for (int j = 0; j < childCount; j++)
+                {
+                    if (document.SelectionPathBindable is { IsEmpty: false })
+                    {
+                        actions.Add(new ClearSelectedArea_Action(newGuidsArray[i], false,
+                            document.AnimationHandler.ActiveFrameBindable));
+                    }
+                }
+
                 newLayerGuids.AddRange(newGuidsArray);
             }
 
@@ -341,18 +354,6 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
 
         actions.Clear();
 
-        actions.Add(new ClearSoftSelectedMembers_PassthroughAction());
-        foreach (var newGuid in newGuidsOfOriginal)
-        {
-            actions.Add(new AddSoftSelectedMember_PassthroughAction(newGuid));
-        }
-        
-        actions.Add(new SetSelectedMember_PassthroughAction(newGuidsOfOriginal.Last()));
-
-        internals!.ActionAccumulator.AddFinishedActions(actions.ToArray());
-
-        actions.Clear();
-
         Dictionary<Guid, ShapeCorners> newMemberCorners = new();
         for (var i = 0; i < memberCorners.Count; i++)
         {
@@ -362,12 +363,25 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
 
         actions.Add(new TransformSelected_Action(cornersOnStartDuplicate, false, newMemberCorners,
             false, document!.AnimationHandler.ActiveFrameBindable));
-        actions.Add(new TransformSelected_Action(lastCorners, false, memberCorners, false,
+        actions.Add(new TransformSelected_Action(lastCorners, false, newMemberCorners, false,
             document!.AnimationHandler.ActiveFrameBindable));
         actions.Add(new EndTransformSelected_Action());
 
         internals!.ActionAccumulator.AddFinishedActions(actions.ToArray());
 
+        actions.Clear();
+
+        actions.Add(new ClearSoftSelectedMembers_PassthroughAction());
+        foreach (var newGuid in newGuidsOfOriginal)
+        {
+            actions.Add(new AddSoftSelectedMember_PassthroughAction(newGuid));
+        }
+
+        actions.Add(new SetSelectedMember_PassthroughAction(newGuidsOfOriginal.Last()));
+
+        internals!.ActionAccumulator.AddFinishedActions(actions.ToArray());
+
+
         internals.ActionAccumulator.EndChangeBlock();
 
         tool!.DuplicateOnMove = false;