Browse Source

Merge pull request #940 from PixiEditor/fixes/14.05.2025

Fixed undo delete layer keyframes related crash
Krzysztof Krysiński 3 months ago
parent
commit
6d898d9847

+ 3 - 3
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/Node.cs

@@ -487,12 +487,12 @@ public abstract class Node : IReadOnlyNode, IDisposable
 
     public abstract Node CreateCopy();
 
-    public Node Clone()
+    public Node Clone(bool preserveGuids = false)
     {
         var clone = CreateCopy();
 
         clone.DisplayName = DisplayName;
-        clone.Id = Guid.NewGuid();
+        clone.Id = preserveGuids ? Id : Guid.NewGuid();
         clone.Position = Position;
 
         for (var i = 0; i < clone.inputs.Count; i++)
@@ -513,7 +513,7 @@ public abstract class Node : IReadOnlyNode, IDisposable
 
         foreach (var keyFrame in keyFrames)
         {
-            Guid newGuid = Guid.NewGuid();
+            Guid newGuid = preserveGuids ? keyFrame.KeyFrameGuid : Guid.NewGuid();
             KeyFrameData newKeyFrame = new KeyFrameData(newGuid, keyFrame.StartFrame, keyFrame.Duration,
                 keyFrame.AffectedElement)
             {

+ 2 - 4
src/PixiEditor.ChangeableDocument/Changes/Structure/DeleteStructureMember_Change.cs

@@ -31,8 +31,7 @@ internal class DeleteStructureMember_Change : Change
 
         originalConnections = NodeOperations.CreateConnectionsData(member);
 
-        savedCopy = (StructureNode)member.Clone();
-        savedCopy.Id = memberGuid;
+        savedCopy = (StructureNode)member.Clone(true);
 
         savedKeyFrameGroup = DeleteNode_Change.CloneGroupKeyFrame(document, memberGuid);
 
@@ -78,8 +77,7 @@ internal class DeleteStructureMember_Change : Change
 
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document doc)
     {
-        var copy = (StructureNode)savedCopy!.Clone();
-        copy.Id = memberGuid;
+        var copy = (StructureNode)savedCopy!.Clone(true);
 
         doc.NodeGraph.AddNode(copy);