Browse Source

Fixed some structure member moving bugs

flabbet 10 months ago
parent
commit
132d88f969

+ 13 - 6
src/PixiEditor/Models/DocumentModels/DocumentStructureHelper.cs

@@ -84,7 +84,7 @@ internal class DocumentStructureHelper
                 parent = doc.NodeGraphHandler.OutputNode;
                 parent = doc.NodeGraphHandler.OutputNode;
 
 
             Type nodeType = type == StructureMemberType.Layer ? typeof(ImageLayerNode) : typeof(FolderNode);
             Type nodeType = type == StructureMemberType.Layer ? typeof(ImageLayerNode) : typeof(FolderNode);
-            
+
             internals.ActionAccumulator.AddActions(new CreateStructureMember_Action(parent.Id, guid, nodeType));
             internals.ActionAccumulator.AddActions(new CreateStructureMember_Action(parent.Id, guid, nodeType));
             name ??= GetUniqueName(
             name ??= GetUniqueName(
                 type == StructureMemberType.Layer
                 type == StructureMemberType.Layer
@@ -103,14 +103,16 @@ internal class DocumentStructureHelper
     {
     {
         Guid guid = Guid.NewGuid();
         Guid guid = Guid.NewGuid();
         var selectedMember = doc.SelectedStructureMember;
         var selectedMember = doc.SelectedStructureMember;
-        
+
         //put member above the layer
         //put member above the layer
-        INodeHandler parent = selectedMember != null ? doc.StructureHelper.GetFirstForwardNode(selectedMember)
-                : doc.NodeGraphHandler.OutputNode;
+        INodeHandler parent = selectedMember != null
+            ? doc.StructureHelper.GetFirstForwardNode(selectedMember)
+            : doc.NodeGraphHandler.OutputNode;
         if (parent is null)
         if (parent is null)
             parent = doc.NodeGraphHandler.OutputNode;
             parent = doc.NodeGraphHandler.OutputNode;
 
 
-        internals.ActionAccumulator.AddActions(source, new CreateStructureMember_Action(parent.Id, guid, structureMemberType));
+        internals.ActionAccumulator.AddActions(source,
+            new CreateStructureMember_Action(parent.Id, guid, structureMemberType));
         name ??= GetUniqueName(
         name ??= GetUniqueName(
             structureMemberType.IsAssignableTo(typeof(LayerNode))
             structureMemberType.IsAssignableTo(typeof(LayerNode))
                 ? new LocalizedString("NEW_LAYER")
                 ? new LocalizedString("NEW_LAYER")
@@ -134,9 +136,14 @@ internal class DocumentStructureHelper
     {
     {
         var referenceMember = doc.StructureHelper.FindNode<INodeHandler>(referenceMemberId);
         var referenceMember = doc.StructureHelper.FindNode<INodeHandler>(referenceMemberId);
         var memberToMoveInto = !above ? referenceMember : doc.StructureHelper.GetFirstForwardNode(referenceMember);
         var memberToMoveInto = !above ? referenceMember : doc.StructureHelper.GetFirstForwardNode(referenceMember);
+        if (memberToMoveInto.Id == memberToMove)
+        {
+            memberToMoveInto = doc.StructureHelper.GetFirstForwardNode(memberToMoveInto);
+        }
+
         internals.ActionAccumulator.AddFinishedActions(
         internals.ActionAccumulator.AddFinishedActions(
             new MoveStructureMember_Action(memberToMove, memberToMoveInto.Id,
             new MoveStructureMember_Action(memberToMove, memberToMoveInto.Id,
-                above && memberToMoveInto is IFolderHandler));
+                above && memberToMoveInto is IFolderHandler folder && folder.Children.Contains(referenceMember)));
     }
     }
 
 
     public void TryMoveStructureMember(Guid memberToMove, Guid memberToMoveIntoOrNextTo,
     public void TryMoveStructureMember(Guid memberToMove, Guid memberToMoveIntoOrNextTo,

+ 1 - 1
src/PixiEditor/ViewModels/Document/StructureTree.cs

@@ -28,7 +28,7 @@ internal class StructureTree
                 if (lastRoot != value)
                 if (lastRoot != value)
                 {
                 {
                     lastRoot = value;
                     lastRoot = value;
-                    relativeFolderIndex = lastRoot.Count - 1;
+                    relativeFolderIndex = lastRoot.Count;
                 }
                 }
             }
             }