Pārlūkot izejas kodu

fixed clear area for folders

flabbet 7 mēneši atpakaļ
vecāks
revīzija
36a9d47fa3

+ 7 - 4
src/PixiEditor.ChangeableDocument/Changes/Drawing/ClearSelectedArea_Change.cs

@@ -1,25 +1,28 @@
 using Drawie.Backend.Core.Numerics;
+using Drawie.Backend.Core.Vector;
 using Drawie.Numerics;
 
 namespace PixiEditor.ChangeableDocument.Changes.Drawing;
 internal class ClearSelectedArea_Change : Change
 {
+    private VectorPath clearArea;
     private readonly Guid memberGuid;
     private readonly bool drawOnMask;
     private CommittedChunkStorage? savedChunks;
     private int frame;
 
     [GenerateMakeChangeAction]
-    public ClearSelectedArea_Change(Guid memberGuid, bool drawOnMask, int frame)
+    public ClearSelectedArea_Change(Guid memberGuid, VectorPath clearArea, bool drawOnMask, int frame)
     {
         this.memberGuid = memberGuid;
         this.drawOnMask = drawOnMask;
+        this.clearArea = clearArea;
         this.frame = frame;
     }
 
     public override bool InitializeAndValidate(Document target)
     {
-        return !target.Selection.SelectionPath.IsEmpty && DrawingChangeHelper.IsValidForDrawing(target, memberGuid, drawOnMask);
+        return clearArea is { IsEmpty: false } && DrawingChangeHelper.IsValidForDrawing(target, memberGuid, drawOnMask);
     }
 
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
@@ -29,10 +32,10 @@ internal class ClearSelectedArea_Change : Change
 
         var image = DrawingChangeHelper.GetTargetImageOrThrow(target, memberGuid, drawOnMask, frame);
 
-        RectD bounds = target.Selection.SelectionPath.Bounds;
+        RectD bounds = clearArea.Bounds;
         RectI intBounds = (RectI)bounds.Intersect(new RectD(0, 0, target.Size.X, target.Size.Y)).RoundOutwards();
 
-        image.EnqueueClearPath(target.Selection.SelectionPath, intBounds);
+        image.EnqueueClearPath(clearArea, intBounds);
         var affArea = image.FindAffectedArea();
         savedChunks = new(image, affArea.Chunks);
         image.CommitChanges();

+ 1 - 1
src/PixiEditor/Models/DocumentModels/Public/DocumentOperationsModule.cs

@@ -89,7 +89,7 @@ internal class DocumentOperationsModule : IDocumentOperations
         bool drawOnMask = member is not ILayerHandler layer || layer.ShouldDrawOnMask;
         if (drawOnMask && !member.HasMaskBindable)
             return;
-        Internals.ActionAccumulator.AddActions(new ClearSelectedArea_Action(member.Id, drawOnMask, frame));
+        Internals.ActionAccumulator.AddActions(new ClearSelectedArea_Action(member.Id, Internals.Tracker.Document.Selection.SelectionPath, drawOnMask, frame));
         if (clearSelection)
             Internals.ActionAccumulator.AddActions(new ClearSelection_Action());
         Internals.ActionAccumulator.AddFinishedActions();

+ 5 - 8
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/TransformSelectedExecutor.cs

@@ -296,13 +296,15 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
         VectorPath? original = document.SelectionPathBindable != null
             ? new VectorPath(document.SelectionPathBindable)
             : null;
+
+        VectorPath? clearArea = null;
         if (original != null)
         {
             var selection = document.SelectionPathBindable;
             var inverse = new VectorPath();
             inverse.AddRect(new RectD(new(0, 0), document.SizeBindable));
 
-            actions.Add(new SetSelection_Action(inverse.Op(selection, VectorPathOp.Difference)));
+            clearArea = inverse.Op(selection, VectorPathOp.Difference);
         }
 
         for (var i = 0; i < originalSelectedMembers.Count; i++)
@@ -315,7 +317,7 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
                 actions.Add(new DuplicateLayer_Action(member, newGuid));
                 if (document.SelectionPathBindable is { IsEmpty: false })
                 {
-                    actions.Add(new ClearSelectedArea_Action(newGuid, false,
+                    actions.Add(new ClearSelectedArea_Action(newGuid, clearArea, false,
                         document.AnimationHandler.ActiveFrameBindable));
                 }
             }
@@ -334,7 +336,7 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
                 {
                     if (document.SelectionPathBindable is { IsEmpty: false })
                     {
-                        actions.Add(new ClearSelectedArea_Action(newGuidsArray[i], false,
+                        actions.Add(new ClearSelectedArea_Action(newGuidsArray[j], clearArea, false,
                             document.AnimationHandler.ActiveFrameBindable));
                     }
                 }
@@ -345,11 +347,6 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
             newGuidsOfOriginal.Add(newGuid);
         }
 
-        if (original != null)
-        {
-            actions.Add(new SetSelection_Action(original));
-        }
-
         internals!.ActionAccumulator.AddFinishedActions(actions.ToArray());
 
         actions.Clear();