Browse Source

Fixed order of copied layers and added selectionless copying

flabbet 10 months ago
parent
commit
4ab99ca2fb

+ 10 - 0
src/PixiEditor/Models/Controllers/ClipboardController.cs

@@ -84,6 +84,16 @@ internal static class ClipboardController
             
             (surfaceToCopy, copyArea) = surface.AsT2;
         }
+        else if (document.SelectedStructureMember != null)
+        {
+            RectI bounds = new RectI(VecI.Zero, document.SizeBindable);
+            
+            var surface = document.TryExtractAreaFromSelected(bounds);
+            if (surface.IsT0 || surface.IsT1)
+                return;
+            
+            (surfaceToCopy, copyArea) = surface.AsT2;
+        }
 
         if (surfaceToCopy == null)
         {

+ 4 - 15
src/PixiEditor/ViewModels/Document/DocumentViewModel.cs

@@ -566,7 +566,6 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
         RectI bounds)
     {
         var selectedLayers = ExtractSelectedLayers();
-        selectedLayers.Reverse();
         if (selectedLayers.Count == 0)
             return new Error();
         if (bounds.IsZeroOrNegativeArea)
@@ -850,22 +849,12 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
     {
         var result = new List<Guid>();
         List<Guid> selectedMembers = GetSelectedMembers();
-        foreach (var member in selectedMembers)
+        var allLayers = StructureHelper.GetAllLayers();
+        foreach (var member in allLayers)
         {
-            var foundMember = StructureHelper.Find(member);
-            if (foundMember != null)
+            if (selectedMembers.Contains(member.Id))
             {
-                if (foundMember is ILayerHandler layer && selectedMembers.Contains(foundMember.Id) &&
-                    !result.Contains(layer.Id))
-                {
-                    result.Add(layer.Id);
-                }
-                else if (foundMember is IFolderHandler folder && selectedMembers.Contains(foundMember.Id))
-                {
-                    if (includeFoldersWithMask && folder.HasMaskBindable && !result.Contains(folder.Id))
-                        result.Add(folder.Id);
-                    ExtractSelectedLayers(folder, result, includeFoldersWithMask);
-                }
+                result.Add(member.Id);
             }
         }
 

+ 2 - 1
src/PixiEditor/ViewModels/SubViewModels/ClipboardViewModel.cs

@@ -207,7 +207,8 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
     {
         return Owner.DocumentManagerSubViewModel.ActiveDocument != null &&
                (Owner.SelectionSubViewModel.SelectionIsNotEmpty() ||
-                Owner.DocumentManagerSubViewModel.ActiveDocument.TransformViewModel.TransformActive);
+                Owner.DocumentManagerSubViewModel.ActiveDocument.TransformViewModel.TransformActive
+                || Owner.DocumentManagerSubViewModel.ActiveDocument.SelectedStructureMember != null);
     }
 
     [Evaluator.Icon("PixiEditor.Clipboard.PasteColorIcon")]