Browse Source

Restoring state works

flabbet 1 year ago
parent
commit
492d6e9f55

+ 1 - 1
src/PixiEditor.AvaloniaUI/ViewModels/Document/AnimationDataViewModel.cs

@@ -59,7 +59,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
     {
         if (!Document.UpdateableChangeActive)
         {
-            Internals.ActionAccumulator.AddFinishedActions(new CreateRasterKeyFrame_Action(targetLayerGuid, frame,
+            Internals.ActionAccumulator.AddFinishedActions(new CreateRasterKeyFrame_Action(targetLayerGuid, new Guid(), frame,
                 cloneFromExisting));
         }
     }

+ 1 - 0
src/PixiEditor.AvaloniaUI/ViewModels/Document/DocumentViewModel.Serialization.cs

@@ -128,6 +128,7 @@ internal partial class DocumentViewModel
             Width = result?.Size.X ?? 0, Height = result?.Size.Y ?? 0, OffsetX = tightBounds?.X ?? 0, OffsetY = tightBounds?.Y ?? 0,
             Enabled = layer.IsVisible, BlendMode = (BlendMode)(int)layer.BlendMode, ImageBytes = bytes,
             ClipToMemberBelow = layer.ClipToMemberBelow, Name = layer.Name,
+            Guid = layer.GuidValue,
             LockAlpha = layer is ITransparencyLockable { LockTransparency: true },
             Opacity = layer.Opacity, Mask = GetMask(layer.Mask, layer.MaskIsVisible)
         };

+ 9 - 1
src/PixiEditor.AvaloniaUI/ViewModels/Document/DocumentViewModel.cs

@@ -350,12 +350,20 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
             {
                 if (keyFrame is RasterKeyFrameBuilder rasterKeyFrameBuilder)
                 {
+                    if (rasterKeyFrameBuilder.Id == default)
+                    {
+                        rasterKeyFrameBuilder.Id = Guid.NewGuid();
+                    }
+                    
                     acc.AddActions(
                         new CreateRasterKeyFrame_Action(
                             rasterKeyFrameBuilder.LayerGuid,
+                            rasterKeyFrameBuilder.Id,
                             rasterKeyFrameBuilder.StartFrame,
                             false),
-                        new ActiveFrame_Action(rasterKeyFrameBuilder.StartFrame),
+                        new KeyFrameLength_Action(rasterKeyFrameBuilder.Id, rasterKeyFrameBuilder.StartFrame, rasterKeyFrameBuilder.Duration),
+                        new EndKeyFrameLength_Action(),
+                        new ActiveFrame_Action(rasterKeyFrameBuilder.StartFrame + rasterKeyFrameBuilder.Duration),
                         new EndActiveFrame_Action());
                     
                     PasteImage(rasterKeyFrameBuilder.LayerGuid, rasterKeyFrameBuilder.Surface, rasterKeyFrameBuilder.Surface.Surface.Size.X,

+ 7 - 12
src/PixiEditor.ChangeableDocument/Changes/Animation/CreateRasterKeyFrame_Change.cs

@@ -12,31 +12,26 @@ internal class CreateRasterKeyFrame_Change : Change
     private Guid createdKeyFrameId;
 
     [GenerateMakeChangeAction]
-    public CreateRasterKeyFrame_Change(Guid targetLayerGuid, int frame, bool cloneFromExisting = false)
+    public CreateRasterKeyFrame_Change(Guid targetLayerGuid, Guid newKeyFrameGuid, int frame,
+        bool cloneFromExisting = false)
     {
         _targetLayerGuid = targetLayerGuid;
         _frame = frame;
         _cloneFromExisting = cloneFromExisting;
+        createdKeyFrameId = newKeyFrameGuid;
     }
-    
+
     public override bool InitializeAndValidate(Document target)
     {
         return target.TryFindMember(_targetLayerGuid, out _layer);
     }
 
-    public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
+    public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply,
+        out bool ignoreInUndo)
     {
         var keyFrame =
             new RasterKeyFrame(_targetLayerGuid, _frame, target, _cloneFromExisting ? _layer.LayerImage : null);
-        if (firstApply)
-        {
-            createdKeyFrameId = keyFrame.Id;
-        }
-        else
-        {
-            keyFrame.Id = createdKeyFrameId;
-        }
-
+        keyFrame.Id = createdKeyFrameId;
         target.AnimationData.AddKeyFrame(keyFrame);
         ignoreInUndo = false;
         return new CreateRasterKeyFrame_ChangeInfo(_targetLayerGuid, _frame, createdKeyFrameId, _cloneFromExisting);