Browse Source

Some missing translations and rename key frames -> cels wip

flabbet 8 months ago
parent
commit
44ea1eeff8

+ 9 - 1
src/PixiEditor/Data/Localization/Languages/en.json

@@ -770,5 +770,13 @@
   "PATH_TOOL_ACTION_DISPLAY": "Click to add a point.",
   "PATH_TOOL_ACTION_DISPLAY_CTRL": "Click on existing point and drag to make it a curve.", 
   "PATH_TOOL_ACTION_DISPLAY_ALT": "Click on a control point and move to adjust only one side of the curve.",
-  "DEFAULT_PATH_LAYER_NAME": "Path"
+  "DEFAULT_PATH_LAYER_NAME": "Path",
+  "DELETE_NODES": "Delete nodes",
+  "DELETE_NODES_DESCRIPTIVE": "Delete selected nodes",
+  "DELETE_CELS": "Delete cels",
+  "DELETE_CELS_DESCRIPTIVE": "Delete selected cels",
+  "COPY_COLOR_TO_CLIPBOARD": "Copy color to clipboard",
+  "VIEWPORT_ROTATION": "Viewport rotation",
+  "NEXT_TOOL_SET": "Next tool set",
+  "PREVIOUS_TOOL_SET": "Previous tool set"
 }

+ 1 - 1
src/PixiEditor/Models/DocumentModels/DocumentUpdater.cs

@@ -465,7 +465,7 @@ internal class DocumentUpdater
 
     private void ProcessCreateRasterKeyFrame(CreateRasterKeyFrame_ChangeInfo info)
     {
-        var vm = new RasterKeyFrameViewModel(info.TargetLayerGuid, info.Frame, 1,
+        var vm = new IRasterCelViewModel(info.TargetLayerGuid, info.Frame, 1,
             info.KeyFrameId,
             (DocumentViewModel)doc, helper);
         

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

@@ -4,7 +4,7 @@ namespace PixiEditor.Models.Handlers;
 
 internal interface IAnimationHandler
 {
-    public IReadOnlyCollection<IKeyFrameHandler> KeyFrames { get; }
+    public IReadOnlyCollection<ICelHandler> KeyFrames { get; }
     public int ActiveFrameBindable { get; set; }
     public KeyFrameTime ActiveFrameTime { get; }
     public bool OnionSkinningEnabledBindable { get; set; }
@@ -16,8 +16,8 @@ internal interface IAnimationHandler
     public void SetActiveFrame(int newFrame);
     public void SetFrameLength(Guid keyFrameId, int newStartFrame, int newDuration);
     public void SetKeyFrameVisibility(Guid infoKeyFrameId, bool infoIsVisible);
-    public bool FindKeyFrame<T>(Guid guid, out T keyFrameHandler) where T : IKeyFrameHandler;
-    internal void AddKeyFrame(IKeyFrameHandler keyFrame);
+    public bool FindKeyFrame<T>(Guid guid, out T keyFrameHandler) where T : ICelHandler;
+    internal void AddKeyFrame(ICelHandler iCel);
     internal void RemoveKeyFrame(Guid keyFrameId);
     public void AddSelectedKeyFrame(Guid keyFrameId);
     public void RemoveSelectedKeyFrame(Guid keyFrameId);

+ 9 - 0
src/PixiEditor/Models/Handlers/ICelGroupHandler.cs

@@ -0,0 +1,9 @@
+using System.Collections.ObjectModel;
+using ChunkyImageLib;
+
+namespace PixiEditor.Models.Handlers;
+
+internal interface ICelGroupHandler : ICelHandler
+{
+    public ObservableCollection<ICelHandler> Children { get; }
+}

+ 1 - 1
src/PixiEditor/Models/Handlers/IKeyFrameHandler.cs → src/PixiEditor/Models/Handlers/ICelHandler.cs

@@ -4,7 +4,7 @@ using PixiEditor.Models.Rendering;
 
 namespace PixiEditor.Models.Handlers;
 
-internal interface IKeyFrameHandler
+internal interface ICelHandler
 {
     public PreviewPainter? PreviewPainter { get; set; }
     public int StartFrameBindable { get; }

+ 0 - 9
src/PixiEditor/Models/Handlers/IKeyFrameGroupHandler.cs

@@ -1,9 +0,0 @@
-using System.Collections.ObjectModel;
-using ChunkyImageLib;
-
-namespace PixiEditor.Models.Handlers;
-
-internal interface IKeyFrameGroupHandler : IKeyFrameHandler
-{
-    public ObservableCollection<IKeyFrameHandler> Children { get; }
-}

+ 6 - 0
src/PixiEditor/Models/Handlers/IRasterCelHandler.cs

@@ -0,0 +1,6 @@
+namespace PixiEditor.Models.Handlers;
+
+internal interface IRasterCelHandler : ICelHandler
+{
+
+}

+ 0 - 6
src/PixiEditor/Models/Handlers/IRasterKeyFrameHandler.cs

@@ -1,6 +0,0 @@
-namespace PixiEditor.Models.Handlers;
-
-internal interface IRasterKeyFrameHandler : IKeyFrameHandler
-{
-
-}

+ 9 - 9
src/PixiEditor/Models/Rendering/MemberPreviewUpdater.cs

@@ -111,7 +111,7 @@ internal class MemberPreviewUpdater
     {
         foreach (var keyFrame in doc.AnimationHandler.KeyFrames)
         {
-            if (keyFrame is IKeyFrameGroupHandler groupHandler)
+            if (keyFrame is ICelGroupHandler groupHandler)
             {
                 foreach (var childFrame in groupHandler.Children)
                 {
@@ -132,22 +132,22 @@ internal class MemberPreviewUpdater
         }
     }
     
-    private bool IsInFrame(IKeyFrameHandler keyFrame)
+    private bool IsInFrame(ICelHandler iCel)
     {
-        return keyFrame.StartFrameBindable <= doc.AnimationHandler.ActiveFrameBindable &&
-               keyFrame.StartFrameBindable + keyFrame.DurationBindable >= doc.AnimationHandler.ActiveFrameBindable;
+        return iCel.StartFrameBindable <= doc.AnimationHandler.ActiveFrameBindable &&
+               iCel.StartFrameBindable + iCel.DurationBindable >= doc.AnimationHandler.ActiveFrameBindable;
     }
 
-    private void RenderFramePreview(IKeyFrameHandler keyFrame)
+    private void RenderFramePreview(ICelHandler iCel)
     {
-        if (internals.Tracker.Document.AnimationData.TryFindKeyFrame(keyFrame.Id, out KeyFrame _))
+        if (internals.Tracker.Document.AnimationData.TryFindKeyFrame(iCel.Id, out KeyFrame _))
         {
-            keyFrame.PreviewPainter ??= new PreviewPainter(AnimationKeyFramePreviewRenderer, keyFrame.Id.ToString());
-            keyFrame.PreviewPainter.Repaint();
+            iCel.PreviewPainter ??= new PreviewPainter(AnimationKeyFramePreviewRenderer, iCel.Id.ToString());
+            iCel.PreviewPainter.Repaint();
         }
     }
     
-    private void RenderGroupPreview(IKeyFrameGroupHandler groupHandler)
+    private void RenderGroupPreview(ICelGroupHandler groupHandler)
     {
         var group = internals.Tracker.Document.AnimationData.KeyFrames.FirstOrDefault(x => x.Id == groupHandler.Id);
         if (group != null)

+ 3 - 3
src/PixiEditor/Styles/Templates/Timeline.axaml

@@ -205,7 +205,7 @@
                                 <ItemsControl
                                     ItemsSource="{Binding KeyFrames, RelativeSource={RelativeSource TemplatedParent}}">
                                     <ItemsControl.DataTemplates>
-                                        <DataTemplate DataType="document:KeyFrameGroupViewModel">
+                                        <DataTemplate DataType="document:CelGroupViewModel">
                                             <animations:TimelineGroupHeader Height="70"
                                                                             Item="{Binding}" />
                                         </DataTemplate>
@@ -234,7 +234,7 @@
                                 <ItemsControl ClipToBounds="False" Name="PART_KeyFramesHost"
                                               ItemsSource="{Binding KeyFrames, RelativeSource={RelativeSource TemplatedParent}}">
                                     <ItemsControl.DataTemplates>
-                                        <DataTemplate DataType="document:KeyFrameGroupViewModel">
+                                        <DataTemplate DataType="document:CelGroupViewModel">
                                             <ItemsControl ClipToBounds="False"
                                                           BorderThickness="0, 0, 0, 1"
                                                           BorderBrush="{DynamicResource ThemeBorderMidBrush}"
@@ -256,7 +256,7 @@
                                                 </ItemsControl.ItemsPanel>
                                             </ItemsControl>
                                         </DataTemplate>
-                                        <DataTemplate DataType="document:RasterKeyFrameViewModel">
+                                        <DataTemplate DataType="document:IRasterCelViewModel">
                                             <animations:KeyFrame
                                                 Scale="{Binding Scale, RelativeSource={RelativeSource FindAncestor, AncestorType=animations:Timeline}}"
                                                 IsEnabled="{Binding IsVisible}"

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

@@ -20,12 +20,12 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
     
     public DocumentViewModel Document { get; }
     protected DocumentInternalParts Internals { get; }
-    public IReadOnlyCollection<IKeyFrameHandler> KeyFrames => keyFrames;
+    public IReadOnlyCollection<ICelHandler> KeyFrames => keyFrames;
 
-    public IReadOnlyCollection<IKeyFrameHandler> AllKeyFrames => allKeyFrames;
+    public IReadOnlyCollection<ICelHandler> AllCels => allCels;
 
     private KeyFrameCollection keyFrames = new KeyFrameCollection();
-    private List<IKeyFrameHandler> allKeyFrames = new List<IKeyFrameHandler>();
+    private List<ICelHandler> allCels = new List<ICelHandler>();
     private bool onionSkinningEnabled;
     private bool isPlayingBindable;
 
@@ -135,7 +135,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
         }
     }
 
-    public void DeleteKeyFrames(List<Guid> keyFrameIds)
+    public void DeleteCels(List<Guid> keyFrameIds)
     {
         if (!Document.BlockingUpdateableChangeActive)
         {
@@ -213,7 +213,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
 
     public void SetFrameLength(Guid keyFrameId, int newStartFrame, int newDuration)
     {
-        if (TryFindKeyFrame(keyFrameId, out KeyFrameViewModel keyFrame))
+        if (TryFindCels(keyFrameId, out CelViewModel keyFrame))
         {
             keyFrame.SetStartFrame(newStartFrame);
             keyFrame.SetDuration(newDuration);
@@ -223,34 +223,34 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
 
     public void SetKeyFrameVisibility(Guid keyFrameId, bool isVisible)
     {
-        if (TryFindKeyFrame(keyFrameId, out KeyFrameViewModel keyFrame))
+        if (TryFindCels(keyFrameId, out CelViewModel keyFrame))
         {
             keyFrame.SetVisibility(isVisible);
             keyFrames.NotifyCollectionChanged();
         }
     }
 
-    public void AddKeyFrame(IKeyFrameHandler keyFrame)
+    public void AddKeyFrame(ICelHandler iCel)
     {
-        Guid id = keyFrame.LayerGuid;
-        if (TryFindKeyFrame(id, out KeyFrameGroupViewModel foundGroup))
+        Guid id = iCel.LayerGuid;
+        if (TryFindCels(id, out CelGroupViewModel foundGroup))
         {
-            foundGroup.Children.Add((KeyFrameViewModel)keyFrame);
+            foundGroup.Children.Add((CelViewModel)iCel);
         }
         else
         {
             var group =
-                new KeyFrameGroupViewModel(keyFrame.StartFrameBindable, keyFrame.DurationBindable, id, id, Document,
+                new CelGroupViewModel(iCel.StartFrameBindable, iCel.DurationBindable, id, id, Document,
                     Internals);
-            group.Children.Add((KeyFrameViewModel)keyFrame);
+            group.Children.Add((CelViewModel)iCel);
             keyFrames.Add(group);
         }
 
-        keyFrames.NotifyCollectionChanged(NotifyCollectionChangedAction.Add, (KeyFrameViewModel)keyFrame);
+        keyFrames.NotifyCollectionChanged(NotifyCollectionChangedAction.Add, (CelViewModel)iCel);
 
-        if (!allKeyFrames.Contains(keyFrame))
+        if (!allCels.Contains(iCel))
         {
-            allKeyFrames.Add(keyFrame);
+            allCels.Add(iCel);
         }
         
         SortByLayers();
@@ -258,16 +258,16 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
 
     public void RemoveKeyFrame(Guid keyFrameId)
     {
-        TryFindKeyFrame<KeyFrameViewModel>(keyFrameId, out _, (frame, parent) =>
+        TryFindCels<CelViewModel>(keyFrameId, out _, (frame, parent) =>
         {
-            if (frame is not KeyFrameGroupViewModel group)
+            if (frame is not CelGroupViewModel group)
             {
                 parent.Children.Remove(frame);
-                keyFrames.NotifyCollectionChanged(NotifyCollectionChangedAction.Remove, (KeyFrameViewModel)frame);
+                keyFrames.NotifyCollectionChanged(NotifyCollectionChangedAction.Remove, (CelViewModel)frame);
 
                 if (parent.Children.Count == 0)
                 {
-                    keyFrames.Remove(parent as KeyFrameGroupViewModel);
+                    keyFrames.Remove(parent as CelGroupViewModel);
                 }
             }
             else
@@ -276,12 +276,12 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
             }
         });
 
-        allKeyFrames.RemoveAll(x => x.Id == keyFrameId);
+        allCels.RemoveAll(x => x.Id == keyFrameId);
     }
 
     public void AddSelectedKeyFrame(Guid keyFrameId)
     {
-        if (TryFindKeyFrame(keyFrameId, out KeyFrameViewModel keyFrame))
+        if (TryFindCels(keyFrameId, out CelViewModel keyFrame))
         {
             keyFrame.IsSelected = true;
         }
@@ -289,7 +289,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
 
     public void RemoveSelectedKeyFrame(Guid keyFrameId)
     {
-        if (TryFindKeyFrame(keyFrameId, out KeyFrameViewModel keyFrame))
+        if (TryFindCels(keyFrameId, out CelViewModel keyFrame))
         {
             keyFrame.IsSelected = false;
         }
@@ -297,7 +297,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
 
     public void ClearSelectedKeyFrames()
     {
-        var selectedFrames = keyFrames.SelectChildrenBy<KeyFrameViewModel>(x => x.IsSelected);
+        var selectedFrames = keyFrames.SelectChildrenBy<CelViewModel>(x => x.IsSelected);
         foreach (var frame in selectedFrames)
         {
             frame.IsSelected = false;
@@ -306,36 +306,36 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
 
     public void RemoveKeyFrames(List<Guid> keyFrameIds)
     {
-        List<KeyFrameViewModel> framesToRemove = new List<KeyFrameViewModel>();
+        List<CelViewModel> framesToRemove = new List<CelViewModel>();
         foreach (var keyFrame in keyFrameIds)
         {
-            TryFindKeyFrame<KeyFrameViewModel>(keyFrame, out _, (frame, parent) =>
+            TryFindCels<CelViewModel>(keyFrame, out _, (frame, parent) =>
             {
                 parent.Children.Remove(frame);
-                framesToRemove.Add((KeyFrameViewModel)frame);
+                framesToRemove.Add((CelViewModel)frame);
             });
 
-            allKeyFrames.RemoveAll(x => x.Id == keyFrame);
+            allCels.RemoveAll(x => x.Id == keyFrame);
         }
 
         keyFrames.NotifyCollectionChanged(NotifyCollectionChangedAction.Remove, framesToRemove);
     }
 
-    public bool FindKeyFrame<T>(Guid guid, out T keyFrameHandler) where T : IKeyFrameHandler
+    public bool FindKeyFrame<T>(Guid guid, out T keyFrameHandler) where T : ICelHandler
     {
-        return TryFindKeyFrame<T>(keyFrames, null, guid, out keyFrameHandler, null);
+        return TryFindCels<T>(keyFrames, null, guid, out keyFrameHandler, null);
     }
 
     // TODO: Use the same structure functions as layers
-    public bool TryFindKeyFrame<T>(Guid id, out T? foundKeyFrame,
-        Action<IKeyFrameHandler, IKeyFrameGroupHandler?> onFound = null) where T : IKeyFrameHandler
+    public bool TryFindCels<T>(Guid id, out T? foundKeyFrame,
+        Action<ICelHandler, ICelGroupHandler?> onFound = null) where T : ICelHandler
     {
-        return TryFindKeyFrame(keyFrames, null, id, out foundKeyFrame, onFound);
+        return TryFindCels(keyFrames, null, id, out foundKeyFrame, onFound);
     }
 
-    private bool TryFindKeyFrame<T>(IReadOnlyCollection<IKeyFrameHandler> root, IKeyFrameGroupHandler parent, Guid id,
+    private bool TryFindCels<T>(IReadOnlyCollection<ICelHandler> root, ICelGroupHandler parent, Guid id,
         out T? result,
-        Action<IKeyFrameHandler, IKeyFrameGroupHandler?> onFound) where T : IKeyFrameHandler
+        Action<ICelHandler, ICelGroupHandler?> onFound) where T : ICelHandler
     {
         for (var i = 0; i < root.Count; i++)
         {
@@ -347,9 +347,9 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
                 return true;
             }
 
-            if (frame is IKeyFrameGroupHandler { Children.Count: > 0 } group)
+            if (frame is ICelGroupHandler { Children.Count: > 0 } group)
             {
-                bool found = TryFindKeyFrame(group.Children, group, id, out result, onFound);
+                bool found = TryFindCels(group.Children, group, id, out result, onFound);
                 if (found)
                 {
                     return true;
@@ -365,10 +365,10 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
     {
         var allLayers = Document.StructureHelper.GetAllLayers();
         var unsortedKeyFrames = keyFrames.ToList();
-        var layerKeyFrames = new List<KeyFrameGroupViewModel>();
+        var layerKeyFrames = new List<CelGroupViewModel>();
         foreach (var layer in allLayers)
         {
-            var group = unsortedKeyFrames.FirstOrDefault(x => x is KeyFrameGroupViewModel group && group.LayerGuid == layer.Id) as KeyFrameGroupViewModel; 
+            var group = unsortedKeyFrames.FirstOrDefault(x => x is CelGroupViewModel group && group.LayerGuid == layer.Id) as CelGroupViewModel; 
             if(group != null)
             {
                 layerKeyFrames.Insert(0, group);
@@ -377,7 +377,7 @@ internal class AnimationDataViewModel : ObservableObject, IAnimationHandler
 
         foreach (var remaining in unsortedKeyFrames)
         {
-            if (remaining is KeyFrameGroupViewModel group && !layerKeyFrames.Contains(group))
+            if (remaining is CelGroupViewModel group && !layerKeyFrames.Contains(group))
             {
                 layerKeyFrames.Add(group);
             }

+ 6 - 6
src/PixiEditor/ViewModels/Document/KeyFrameGroupViewModel.cs → src/PixiEditor/ViewModels/Document/CelGroupViewModel.cs

@@ -6,9 +6,9 @@ using PixiEditor.Models.Handlers;
 
 namespace PixiEditor.ViewModels.Document;
 
-internal class KeyFrameGroupViewModel : KeyFrameViewModel, IKeyFrameGroupHandler
+internal class CelGroupViewModel : CelViewModel, ICelGroupHandler
 {
-    public ObservableCollection<IKeyFrameHandler> Children { get; } = new ObservableCollection<IKeyFrameHandler>();
+    public ObservableCollection<ICelHandler> Children { get; } = new ObservableCollection<ICelHandler>();
 
     public override int StartFrameBindable => Children.Count > 0 ? Children.Min(x => x.StartFrameBindable) : 0;
     public override int DurationBindable => Children.Count > 0 ? Children.Max(x => x.StartFrameBindable + x.DurationBindable) - StartFrameBindable : 0;
@@ -23,7 +23,7 @@ internal class KeyFrameGroupViewModel : KeyFrameViewModel, IKeyFrameGroupHandler
             SetProperty(ref _isCollapsed, value);
             foreach (var child in Children)
             {
-                if (child is KeyFrameViewModel keyFrame)
+                if (child is CelViewModel keyFrame)
                 {
                     keyFrame.IsCollapsed = value;
                 }
@@ -37,7 +37,7 @@ internal class KeyFrameGroupViewModel : KeyFrameViewModel, IKeyFrameGroupHandler
     {
         foreach (var child in Children)
         {
-            if(child is KeyFrameViewModel keyFrame)
+            if(child is CelViewModel keyFrame)
             {
                 keyFrame.SetVisibility(isVisible);
             }
@@ -46,7 +46,7 @@ internal class KeyFrameGroupViewModel : KeyFrameViewModel, IKeyFrameGroupHandler
         base.SetVisibility(isVisible);
     }
 
-    public KeyFrameGroupViewModel(int startFrame, int duration, Guid layerGuid, Guid id, DocumentViewModel doc, DocumentInternalParts internalParts) 
+    public CelGroupViewModel(int startFrame, int duration, Guid layerGuid, Guid id, DocumentViewModel doc, DocumentInternalParts internalParts) 
         : base(startFrame, duration, layerGuid, id, doc, internalParts)
     {
         Children.CollectionChanged += ChildrenOnCollectionChanged;
@@ -68,7 +68,7 @@ internal class KeyFrameGroupViewModel : KeyFrameViewModel, IKeyFrameGroupHandler
         {
             foreach (var item in e.NewItems)
             {
-                if (item is KeyFrameViewModel keyFrame)
+                if (item is CelViewModel keyFrame)
                 {
                     keyFrame.IsCollapsed = IsCollapsed;
                     keyFrame.SetVisibility(IsVisible);

+ 3 - 3
src/PixiEditor/ViewModels/Document/KeyFrameViewModel.cs → src/PixiEditor/ViewModels/Document/CelViewModel.cs

@@ -8,7 +8,7 @@ using PixiEditor.Models.Rendering;
 
 namespace PixiEditor.ViewModels.Document;
 
-internal abstract class KeyFrameViewModel : ObservableObject, IKeyFrameHandler
+internal abstract class CelViewModel : ObservableObject, ICelHandler
 {
     private PreviewPainter? previewPainter;
     private int startFrameBindable;
@@ -26,7 +26,7 @@ internal abstract class KeyFrameViewModel : ObservableObject, IKeyFrameHandler
     public DocumentViewModel Document { get; }
     protected DocumentInternalParts Internals { get; }
 
-    IDocument IKeyFrameHandler.Document => Document;
+    IDocument ICelHandler.Document => Document;
 
     public PreviewPainter? PreviewPainter
     {
@@ -93,7 +93,7 @@ internal abstract class KeyFrameViewModel : ObservableObject, IKeyFrameHandler
         set => SetProperty(ref isSelected, value);
     }
 
-    protected KeyFrameViewModel(int startFrame, int duration, Guid layerGuid, Guid id,
+    protected CelViewModel(int startFrame, int duration, Guid layerGuid, Guid id,
         DocumentViewModel document, DocumentInternalParts internalParts)
     {
         startFrameBindable = startFrame;

+ 14 - 0
src/PixiEditor/ViewModels/Document/IRasterCelViewModel.cs

@@ -0,0 +1,14 @@
+using PixiEditor.Models.DocumentModels;
+using PixiEditor.Models.Handlers;
+
+namespace PixiEditor.ViewModels.Document;
+
+internal class IRasterCelViewModel : CelViewModel, IRasterCelHandler
+{
+    public IRasterCelViewModel(Guid targetLayerGuid, int startFrame, int duration, Guid id, DocumentViewModel doc, DocumentInternalParts internalParts) 
+        : base(startFrame, duration, targetLayerGuid, id, doc, internalParts)
+    {
+        
+    }
+
+}

+ 8 - 8
src/PixiEditor/ViewModels/Document/KeyFrameCollection.cs

@@ -6,14 +6,14 @@ using PixiEditor.Views.Animations;
 
 namespace PixiEditor.ViewModels.Document;
 
-internal class KeyFrameCollection : ObservableCollection<KeyFrameGroupViewModel>
+internal class KeyFrameCollection : ObservableCollection<CelGroupViewModel>
 {
     public KeyFrameCollection()
     {
         
     }
 
-    public KeyFrameCollection(IEnumerable<KeyFrameGroupViewModel> source)
+    public KeyFrameCollection(IEnumerable<CelGroupViewModel> source)
     {
         foreach (var handler in source)
         {
@@ -21,28 +21,28 @@ internal class KeyFrameCollection : ObservableCollection<KeyFrameGroupViewModel>
         }
     }
 
-    public event Action<KeyFrameViewModel> KeyFrameAdded; 
-    public event Action<KeyFrameViewModel> KeyFrameRemoved; 
+    public event Action<CelViewModel> KeyFrameAdded; 
+    public event Action<CelViewModel> KeyFrameRemoved; 
     
     public void NotifyCollectionChanged()
     {
         OnPropertyChanged(new PropertyChangedEventArgs(nameof(FrameCount)));
     }
 
-    public void NotifyCollectionChanged(NotifyCollectionChangedAction action, KeyFrameViewModel keyFrame)
+    public void NotifyCollectionChanged(NotifyCollectionChangedAction action, CelViewModel cel)
     {
         NotifyCollectionChanged();
         if (action == NotifyCollectionChangedAction.Add)
         {
-            KeyFrameAdded?.Invoke(keyFrame);
+            KeyFrameAdded?.Invoke(cel);
         }
         else if (action == NotifyCollectionChangedAction.Remove)
         {
-            KeyFrameRemoved?.Invoke(keyFrame);
+            KeyFrameRemoved?.Invoke(cel);
         }
     }
     
-    public void NotifyCollectionChanged(NotifyCollectionChangedAction action, List<KeyFrameViewModel> fames)
+    public void NotifyCollectionChanged(NotifyCollectionChangedAction action, List<CelViewModel> fames)
     {
         foreach (var frame in fames)
         {

+ 0 - 14
src/PixiEditor/ViewModels/Document/RasterKeyFrameViewModel.cs

@@ -1,14 +0,0 @@
-using PixiEditor.Models.DocumentModels;
-using PixiEditor.Models.Handlers;
-
-namespace PixiEditor.ViewModels.Document;
-
-internal class RasterKeyFrameViewModel : KeyFrameViewModel, IRasterKeyFrameHandler
-{
-    public RasterKeyFrameViewModel(Guid targetLayerGuid, int startFrame, int duration, Guid id, DocumentViewModel doc, DocumentInternalParts internalParts) 
-        : base(startFrame, duration, targetLayerGuid, id, doc, internalParts)
-    {
-        
-    }
-
-}

+ 11 - 11
src/PixiEditor/ViewModels/SubViewModels/AnimationsViewModel.cs

@@ -75,7 +75,7 @@ internal class AnimationsViewModel : SubViewModel<ViewModelMain>
             "Raster",
             activeDocument.AnimationDataViewModel.FrameRateBindable,
             activeDocument.AnimationDataViewModel.FramesCount,
-            activeDocument.AnimationDataViewModel.AllKeyFrames.Count);
+            activeDocument.AnimationDataViewModel.AllCels.Count);
     }
 
     [Command.Basic("PixiEditor.Animation.ToggleOnionSkinning", "TOGGLE_ONION_SKINNING",
@@ -89,28 +89,28 @@ internal class AnimationsViewModel : SubViewModel<ViewModelMain>
         Owner.DocumentManagerSubViewModel.ActiveDocument?.AnimationDataViewModel.ToggleOnionSkinning(value);
     }
 
-    [Command.Basic("PixiEditor.Animation.DeleteKeyFrames", "DELETE_KEY_FRAMES", "DELETE_KEY_FRAMES_DESCRIPTIVE",
+    [Command.Basic("PixiEditor.Animation.DeleteCels", "DELETE_CELS", "DELETE_CELS_DESCRIPTIVE",
         ShortcutContext = typeof(TimelineDockViewModel), Key = Key.Delete, AnalyticsTrack = true)]
-    public void DeleteKeyFrames()
+    public void DeleteCels()
     {
         var activeDocument = Owner.DocumentManagerSubViewModel.ActiveDocument;
-        var selected = activeDocument.AnimationDataViewModel.AllKeyFrames.Where(x => x.IsSelected).ToArray();
+        var selected = activeDocument.AnimationDataViewModel.AllCels.Where(x => x.IsSelected).ToArray();
 
         if (activeDocument is null || selected.Length == 0)
             return;
 
-        List<Guid> keyFrameIds = selected.Select(x => x.Id).ToList();
+        List<Guid> celIds = selected.Select(x => x.Id).ToList();
 
-        for (int i = 0; i < keyFrameIds.Count; i++)
+        for (int i = 0; i < celIds.Count; i++)
         {
-            if (!activeDocument.AnimationDataViewModel.TryFindKeyFrame<KeyFrameViewModel>(keyFrameIds[i], out _))
+            if (!activeDocument.AnimationDataViewModel.TryFindCels<CelViewModel>(celIds[i], out _))
             {
-                keyFrameIds.RemoveAt(i);
+                celIds.RemoveAt(i);
                 i--;
             }
         }
 
-        activeDocument.AnimationDataViewModel.DeleteKeyFrames(keyFrameIds);
+        activeDocument.AnimationDataViewModel.DeleteCels(celIds);
     }
 
     [Command.Internal("PixiEditor.Animation.ChangeKeyFramesStartPos")]
@@ -135,8 +135,8 @@ internal class AnimationsViewModel : SubViewModel<ViewModelMain>
     private static int GetActiveFrame(DocumentViewModel activeDocument, Guid targetLayer)
     {
         int active = activeDocument.AnimationDataViewModel.ActiveFrameBindable;
-        if (activeDocument.AnimationDataViewModel.TryFindKeyFrame<KeyFrameGroupViewModel>(targetLayer,
-                out KeyFrameGroupViewModel groupViewModel))
+        if (activeDocument.AnimationDataViewModel.TryFindCels<CelGroupViewModel>(targetLayer,
+                out CelGroupViewModel groupViewModel))
         {
             if (active == groupViewModel.StartFrameBindable + groupViewModel.DurationBindable - 1)
             {

+ 3 - 3
src/PixiEditor/Views/Animations/KeyFrame.cs

@@ -17,7 +17,7 @@ namespace PixiEditor.Views.Animations;
 [PseudoClasses(":selected")]
 internal class KeyFrame : TemplatedControl
 {
-    public static readonly StyledProperty<KeyFrameViewModel> ItemProperty = AvaloniaProperty.Register<KeyFrame, KeyFrameViewModel>(
+    public static readonly StyledProperty<CelViewModel> ItemProperty = AvaloniaProperty.Register<KeyFrame, CelViewModel>(
         nameof(Item));
 
     public static readonly StyledProperty<double> ScaleProperty = AvaloniaProperty.Register<KeyFrame, double>(nameof(Scale), 100);
@@ -49,7 +49,7 @@ internal class KeyFrame : TemplatedControl
         set => SetValue(IsSelectedProperty, value);
     }
 
-    public KeyFrameViewModel Item
+    public CelViewModel Item
     {
         get => GetValue(ItemProperty);
         set => SetValue(ItemProperty, value);
@@ -85,7 +85,7 @@ internal class KeyFrame : TemplatedControl
         _resizePanelLeft.PointerCaptureLost += UpdateKeyFrame;
         _resizePanelRight.PointerCaptureLost += UpdateKeyFrame;
 
-        if (Item is not KeyFrameGroupViewModel)
+        if (Item is not CelGroupViewModel)
         {
             MultiBinding marginBinding = new MultiBinding
             {

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

@@ -173,8 +173,8 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
     public ICommand ClearSelectedKeyFramesCommand { get; }
     public ICommand PressedKeyFrameCommand { get; }
 
-    public IReadOnlyCollection<KeyFrameViewModel> SelectedKeyFrames => KeyFrames != null
-        ? KeyFrames.SelectChildrenBy<KeyFrameViewModel>(x => x.IsSelected).ToList()
+    public IReadOnlyCollection<CelViewModel> SelectedKeyFrames => KeyFrames != null
+        ? KeyFrames.SelectChildrenBy<CelViewModel>(x => x.IsSelected).ToList()
         : [];
 
     private ToggleButton? _playToggle;
@@ -190,7 +190,7 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
     private Vector clickPos;
     
     private bool shouldClearNextSelection = true;
-    private KeyFrameViewModel clickedKeyFrame;
+    private CelViewModel clickedCel;
     private bool dragged;
     private int dragStartFrame;
 
@@ -210,12 +210,12 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
             new DispatcherTimer(DispatcherPriority.Render) { Interval = TimeSpan.FromMilliseconds(1000f / Fps) };
         _playTimer.Tick += PlayTimerOnTick;
         PressedKeyFrameCommand = new RelayCommand<PointerPressedEventArgs>(KeyFramePressed);
-        ClearSelectedKeyFramesCommand = new RelayCommand<KeyFrameViewModel>(ClearSelectedKeyFrames);
+        ClearSelectedKeyFramesCommand = new RelayCommand<CelViewModel>(ClearSelectedKeyFrames);
         DraggedKeyFrameCommand = new RelayCommand<PointerEventArgs>(KeyFramesDragged);
-        ReleasedKeyFrameCommand = new RelayCommand<KeyFrameViewModel>(KeyFramesReleased);
+        ReleasedKeyFrameCommand = new RelayCommand<CelViewModel>(KeyFramesReleased);
     }
     
-    public void SelectKeyFrame(KeyFrameViewModel? keyFrame, bool clearSelection = true)
+    public void SelectKeyFrame(CelViewModel? keyFrame, bool clearSelection = true)
     {
         if (clearSelection)
         {
@@ -245,7 +245,7 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
         {
             ChangeKeyFramesLengthCommand.Execute((SelectedKeyFrames.Select(x => x.Id).ToArray(), 0, true));
         }
-        clickedKeyFrame = null;
+        clickedCel = null;
     }
 
     protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
@@ -280,7 +280,7 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
         _keyFramesHost = e.NameScope.Find<ItemsControl>("PART_KeyFramesHost");
     }
     
-    private void KeyFramesReleased(KeyFrameViewModel? e)
+    private void KeyFramesReleased(CelViewModel? e)
     {
         if (!dragged)
         {
@@ -293,21 +293,21 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
         }
 
         dragged = false;
-        clickedKeyFrame = null;
+        clickedCel = null;
     }
 
     private void KeyFramesDragged(PointerEventArgs? e)
     {
-        if (clickedKeyFrame == null) return;
+        if (clickedCel == null) return;
 
         int frameUnderMouse = MousePosToFrame(e);
         int delta = frameUnderMouse - dragStartFrame;
 
         if (delta != 0)
         {
-            if (!clickedKeyFrame.IsSelected)
+            if (!clickedCel.IsSelected)
             {
-                SelectKeyFrame(clickedKeyFrame);
+                SelectKeyFrame(clickedCel);
             }
 
             dragged = true;
@@ -318,7 +318,7 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
         }
     }
 
-    private void ClearSelectedKeyFrames(KeyFrameViewModel? keyFrame)
+    private void ClearSelectedKeyFrames(CelViewModel? keyFrame)
     {
         ClearSelectedKeyFrames();
     }
@@ -335,7 +335,7 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
         }
 
         e.Pointer.Capture(target);
-        clickedKeyFrame = target.Item;
+        clickedCel = target.Item;
         dragStartFrame = MousePosToFrame(e);
         e.Handled = true;
     }
@@ -608,19 +608,19 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
         }
     }
 
-    private void KeyFrames_KeyFrameAdded(KeyFrameViewModel keyFrame)
+    private void KeyFrames_KeyFrameAdded(CelViewModel cel)
     {
-        keyFrame.PropertyChanged += KeyFrameOnPropertyChanged;
+        cel.PropertyChanged += KeyFrameOnPropertyChanged;
         PropertyChanged(this, new PropertyChangedEventArgs(nameof(SelectedKeyFrames)));
         PropertyChanged(this, new PropertyChangedEventArgs(nameof(EndFrame)));
     }
 
-    private void KeyFrames_KeyFrameRemoved(KeyFrameViewModel keyFrame)
+    private void KeyFrames_KeyFrameRemoved(CelViewModel cel)
     {
-        if (SelectedKeyFrames.Contains(keyFrame))
+        if (SelectedKeyFrames.Contains(cel))
         {
-            keyFrame.Document.AnimationDataViewModel.RemoveSelectedKeyFrame(keyFrame.Id);
-            keyFrame.PropertyChanged -= KeyFrameOnPropertyChanged;
+            cel.Document.AnimationDataViewModel.RemoveSelectedKeyFrame(cel.Id);
+            cel.PropertyChanged -= KeyFrameOnPropertyChanged;
         }
         
         PropertyChanged(this, new PropertyChangedEventArgs(nameof(SelectedKeyFrames)));
@@ -642,13 +642,13 @@ internal class Timeline : TemplatedControl, INotifyPropertyChanged
     
     private void KeyFrameOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
     {
-        if (sender is KeyFrameViewModel keyFrame)
+        if (sender is CelViewModel keyFrame)
         {
-            if (e.PropertyName == nameof(KeyFrameViewModel.IsSelected))
+            if (e.PropertyName == nameof(CelViewModel.IsSelected))
             {
                 PropertyChanged(this, new PropertyChangedEventArgs(nameof(SelectedKeyFrames)));
             }
-            else if (e.PropertyName == nameof(KeyFrameViewModel.StartFrameBindable) || e.PropertyName == nameof(KeyFrameViewModel.DurationBindable))
+            else if (e.PropertyName == nameof(CelViewModel.StartFrameBindable) || e.PropertyName == nameof(CelViewModel.DurationBindable))
             {
                 PropertyChanged(this, new PropertyChangedEventArgs(nameof(EndFrame)));
             }

+ 2 - 2
src/PixiEditor/Views/Animations/TimelineGroupHeader.cs

@@ -12,10 +12,10 @@ namespace PixiEditor.Views.Animations;
 [PseudoClasses(":collapsed")]
 internal class TimelineGroupHeader : TemplatedControl
 {
-    public static readonly StyledProperty<KeyFrameGroupViewModel> ItemProperty = AvaloniaProperty.Register<TimelineGroupHeader, KeyFrameGroupViewModel>(
+    public static readonly StyledProperty<CelGroupViewModel> ItemProperty = AvaloniaProperty.Register<TimelineGroupHeader, CelGroupViewModel>(
         nameof(Item));
 
-    public KeyFrameGroupViewModel Item
+    public CelGroupViewModel Item
     {
         get => GetValue(ItemProperty);
         set => SetValue(ItemProperty, value);

+ 1 - 1
src/PixiEditor/Views/Dock/TimelineDockView.axaml

@@ -23,6 +23,6 @@
         OnionOpacity="{Binding DocumentManagerSubViewModel.ActiveDocument.AnimationDataViewModel.OnionOpacityBindable, Mode=TwoWay}"
         IsPlaying="{Binding DocumentManagerSubViewModel.ActiveDocument.AnimationDataViewModel.IsPlayingBindable, Mode=TwoWay}"
         DuplicateKeyFrameCommand="{xaml:Command PixiEditor.Animation.DuplicateRasterKeyFrame}"
-        DeleteKeyFrameCommand="{xaml:Command PixiEditor.Animation.DeleteKeyFrames, UseProvided=True}"
+        DeleteKeyFrameCommand="{xaml:Command PixiEditor.Animation.DeleteCels, UseProvided=True}"
         ChangeKeyFramesLengthCommand="{xaml:Command PixiEditor.Animation.ChangeKeyFramesStartPos, UseProvided=True}"/>
 </UserControl>

+ 1 - 1
src/PixiEditor/Views/Main/ViewportControls/Viewport.axaml

@@ -49,7 +49,6 @@
             </EventTriggerBehavior>-->
         </Interaction.Behaviors>
         <overlays:TogglableFlyout Margin="5" Icon="{DynamicResource icon-tool}"
-                                  ui:Translator.TooltipKey="VIEWPORT_SETTINGS"
                                   ZIndex="2" HorizontalAlignment="Right" VerticalAlignment="Top">
             <overlays:TogglableFlyout.Child>
                 <Border Padding="5"
@@ -64,6 +63,7 @@
                                     BorderThickness="{DynamicResource ThemeBorderThickness}"
                                     CornerRadius="{DynamicResource ControlCornerRadius}"
                                     Background="{DynamicResource ThemeControlHighBrush}"
+                                    ui:Translator.TooltipKey="VIEWPORT_ROTATION"
                                     VerticalAlignment="Center">
                                 <TextBlock TextAlignment="Center"
                                            VerticalAlignment="Center"