Browse Source

Merging order fix

flabbet 8 months ago
parent
commit
57293536b5

+ 17 - 1
src/PixiEditor.ChangeableDocument/Changes/Drawing/CombineStructureMembersOnto_Change.cs

@@ -87,7 +87,9 @@ internal class CombineStructureMembersOnto_Change : Change
         var chunksToCombine = new HashSet<VecI>();
         List<IChangeInfo> changes = new();
 
-        foreach (var guid in layersToCombine)
+        var ordererd = OrderLayers(layersToCombine, target);
+
+        foreach (var guid in ordererd)
         {
             var layer = target.FindMemberOrThrow<LayerNode>(guid);
 
@@ -150,6 +152,20 @@ internal class CombineStructureMembersOnto_Change : Change
         changes.Add(new LayerImageArea_ChangeInfo(targetLayerGuid, affArea));
         return changes;
     }
+    
+    private HashSet<Guid> OrderLayers(HashSet<Guid> layersToCombine, Document document)
+    {
+        HashSet<Guid> ordered = new();
+        document.NodeGraph.TryTraverse(node =>
+        {
+            if (node is LayerNode layer && layersToCombine.Contains(layer.Id))
+            {
+                ordered.Add(layer.Id);
+            }
+        });
+
+        return ordered.Reverse().ToHashSet();
+    }
 
     private void AddMissingKeyFrame(LayerNode targetLayer, int frame, LayerNode layer, List<IChangeInfo> changes,
         Document target)