Browse Source

Adjusted normalized time

Krzysztof Krysiński 2 months ago
parent
commit
5dc8d879ea

+ 1 - 1
src/PixiEditor/Models/Handlers/IAnimationHandler.cs

@@ -23,7 +23,7 @@ internal interface IAnimationHandler : IDisposable
     public void RemoveSelectedKeyFrame(Guid keyFrameId);
     public void RemoveSelectedKeyFrame(Guid keyFrameId);
     public void ClearSelectedKeyFrames();
     public void ClearSelectedKeyFrames();
     public void SetOnionSkinning(bool enabled);
     public void SetOnionSkinning(bool enabled);
-    public int FirstFrame { get; }
+    public int FirstVisibleFrame { get; }
     public int LastFrame { get; }
     public int LastFrame { get; }
     public void SetOnionFrames(int frames, double opacity);
     public void SetOnionFrames(int frames, double opacity);
     public void SetPlayingState(bool play);
     public void SetPlayingState(bool play);

+ 1 - 1
src/PixiEditor/Models/Rendering/SceneRenderer.cs

@@ -261,7 +261,7 @@ internal class SceneRenderer : IDisposable
         for (int i = 1; i <= animationData.OnionFrames; i++)
         for (int i = 1; i <= animationData.OnionFrames; i++)
         {
         {
             int frame = DocumentViewModel.AnimationHandler.ActiveFrameTime.Frame - i;
             int frame = DocumentViewModel.AnimationHandler.ActiveFrameTime.Frame - i;
-            if (frame < DocumentViewModel.AnimationHandler.FirstFrame)
+            if (frame < DocumentViewModel.AnimationHandler.FirstVisibleFrame)
             {
             {
                 break;
                 break;
             }
             }

+ 6 - 6
src/PixiEditor/ViewModels/Document/AnimationDataViewModel.cs

@@ -110,15 +110,15 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
         }
         }
     }
     }
 
 
-    public int FirstFrame => cachedFirstFrame ??= keyFrames.Count > 0 ? keyFrames.Min(x => x.StartFrameBindable) : 1;
+    public int FirstVisibleFrame => cachedFirstFrame ??= keyFrames.Count > 0 ? keyFrames.Min(x => x.StartFrameBindable) : 1;
 
 
     public int LastFrame => cachedLastFrame ??= keyFrames.Count > 0
     public int LastFrame => cachedLastFrame ??= keyFrames.Count > 0
         ? keyFrames.Max(x => x.StartFrameBindable + x.DurationBindable)
         ? keyFrames.Max(x => x.StartFrameBindable + x.DurationBindable)
         : DefaultEndFrame;
         : DefaultEndFrame;
 
 
-    public int FramesCount => LastFrame - FirstFrame;
+    public int FramesCount => LastFrame - 1;
 
 
-    private double ActiveNormalizedTime => (double)(ActiveFrameBindable - FirstFrame) / FramesCount;
+    private double ActiveNormalizedTime => (double)(ActiveFrameBindable - 1) / (FramesCount - 1);
 
 
     private int DefaultEndFrame => FrameRateBindable; // 1 second
     private int DefaultEndFrame => FrameRateBindable; // 1 second
 
 
@@ -239,7 +239,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
             keyFrame.SetDuration(newDuration);
             keyFrame.SetDuration(newDuration);
             keyFrames.NotifyCollectionChanged();
             keyFrames.NotifyCollectionChanged();
 
 
-            OnPropertyChanged(nameof(FirstFrame));
+            OnPropertyChanged(nameof(FirstVisibleFrame));
             OnPropertyChanged(nameof(LastFrame));
             OnPropertyChanged(nameof(LastFrame));
             OnPropertyChanged(nameof(FramesCount));
             OnPropertyChanged(nameof(FramesCount));
         }
         }
@@ -282,7 +282,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
         cachedFirstFrame = null;
         cachedFirstFrame = null;
         cachedLastFrame = null;
         cachedLastFrame = null;
 
 
-        OnPropertyChanged(nameof(FirstFrame));
+        OnPropertyChanged(nameof(FirstVisibleFrame));
         OnPropertyChanged(nameof(LastFrame));
         OnPropertyChanged(nameof(LastFrame));
         OnPropertyChanged(nameof(FramesCount));
         OnPropertyChanged(nameof(FramesCount));
     }
     }
@@ -312,7 +312,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
         cachedFirstFrame = null;
         cachedFirstFrame = null;
         cachedLastFrame = null;
         cachedLastFrame = null;
 
 
-        OnPropertyChanged(nameof(FirstFrame));
+        OnPropertyChanged(nameof(FirstVisibleFrame));
         OnPropertyChanged(nameof(LastFrame));
         OnPropertyChanged(nameof(LastFrame));
         OnPropertyChanged(nameof(FramesCount));
         OnPropertyChanged(nameof(FramesCount));
     }
     }

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

@@ -1202,7 +1202,7 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
 
 
         int framesCount = lastFrame;
         int framesCount = lastFrame;
 
 
-        Image[] images = new Image[framesCount];
+        Image[] images = new Image[framesCount - firstFrame];
 
 
         // TODO: Multi-threading
         // TODO: Multi-threading
         for (int i = firstFrame; i < lastFrame; i++)
         for (int i = firstFrame; i < lastFrame; i++)