Browse Source

Fixed abandomed frames and one frame too much export

flabbet 8 tháng trước cách đây
mục cha
commit
6c528e1c35

+ 18 - 0
src/PixiEditor.ChangeableDocument/Changes/Animation/CreateRasterKeyFrame_Change.cs

@@ -27,6 +27,18 @@ internal class CreateRasterKeyFrame_Change : Change
 
     public override bool InitializeAndValidate(Document target)
     {
+        var targetLayer = target.FindMember(_targetLayerGuid);
+        
+        if (targetLayer is null)
+        {
+            return false;
+        }
+        
+        if(_frame == -1 && targetLayer.KeyFrames.All(x => x.KeyFrameGuid != createdKeyFrameId))
+        {
+            return false;
+        }
+        
         return _frame != 0 && target.TryFindMember(_targetLayerGuid, out _layer);
     }
 
@@ -51,6 +63,11 @@ internal class CreateRasterKeyFrame_Change : Change
 
         if (existingData is null)
         {
+            if (_frame == -1)
+            {
+                ignoreInUndo = true;
+                return new None();
+            }
             targetNode.AddFrame(createdKeyFrameId,
                 new KeyFrameData(createdKeyFrameId, _frame, 1, ImageLayerNode.ImageLayerKey) { Data = img, });
         }
@@ -81,6 +98,7 @@ internal class CreateRasterKeyFrame_Change : Change
     public override OneOf<None, IChangeInfo, List<IChangeInfo>> Revert(Document target)
     {
         target.AnimationData.RemoveKeyFrame(createdKeyFrameId);
+        target.FindMemberOrThrow<ImageLayerNode>(_targetLayerGuid).RemoveKeyFrame(createdKeyFrameId);
         return new DeleteKeyFrame_ChangeInfo(createdKeyFrameId);
     }
 }

+ 1 - 0
src/PixiEditor.ChangeableDocument/Changes/Animation/DeleteKeyFrame_Change.cs

@@ -42,6 +42,7 @@ internal class DeleteKeyFrame_Change : Change
         out bool ignoreInUndo)
     {
         target.AnimationData.RemoveKeyFrame(_keyFrameId);
+        target.FindNode<Node>(clonedKeyFrame.NodeId).RemoveKeyFrame(_keyFrameId);
         ignoreInUndo = false;
         return new DeleteKeyFrame_ChangeInfo(_keyFrameId);
     }

+ 3 - 2
src/PixiEditor/ViewModels/Document/DocumentViewModel.cs

@@ -883,8 +883,9 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
             return [];
 
         int firstFrame = AnimationDataViewModel.FirstFrame;
-        int framesCount = AnimationDataViewModel.FramesCount;
-        int lastFrame = firstFrame + framesCount;
+        int lastFrame = AnimationDataViewModel.LastFrame;
+        
+        int framesCount = lastFrame - firstFrame;
 
         Image[] images = new Image[framesCount];
 

+ 1 - 1
src/PixiEditor/Views/Animations/Timeline.cs

@@ -166,7 +166,7 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
         set { SetValue(FpsProperty, value); }
     }
 
-    public int EndFrame => KeyFrames?.FrameCount > 0 ? KeyFrames.FrameCount : DefaultEndFrame;
+    public int EndFrame => KeyFrames?.FrameCount > 0 ? KeyFrames.FrameCount - 1 : DefaultEndFrame;
 
     public ICommand DraggedKeyFrameCommand { get; }
     public ICommand ReleasedKeyFrameCommand { get; }