Browse Source

Merge branch 'master' into linux

Krzysztof Krysiński 6 months ago
parent
commit
1021e57924

+ 5 - 5
src/PixiEditor/Models/DocumentModels/ActionAccumulator.cs

@@ -82,7 +82,7 @@ internal class ActionAccumulator
         TryExecuteAccumulatedActions();
     }
 
-    internal async Task TryExecuteAccumulatedActions()
+    internal void TryExecuteAccumulatedActions()
     {
         if (executing || queuedActions.Count == 0)
             return;
@@ -109,7 +109,7 @@ internal class ActionAccumulator
                 }
                 else
                 {
-                    changes = await internals.Tracker.ProcessActions(toExecute);
+                    changes = internals.Tracker.ProcessActionsSync(toExecute);
                 }
 
                 List<IChangeInfo> optimizedChanges = ChangeInfoListOptimizer.Optimize(changes);
@@ -137,11 +137,11 @@ internal class ActionAccumulator
                     canvasUpdater.UpdateGatheredChunksSync(affectedAreas,
                         undoBoundaryPassed || viewportRefreshRequest);
                 }
-                else
+                /*else
                 {
                     await canvasUpdater.UpdateGatheredChunks(affectedAreas,
                         undoBoundaryPassed || viewportRefreshRequest);
-                }
+                }*/
 
                 previewUpdater.UpdatePreviews(undoBoundaryPassed || changeFrameRequest || viewportRefreshRequest,
                     affectedAreas.ImagePreviewAreas.Keys,
@@ -164,7 +164,7 @@ internal class ActionAccumulator
 #if DEBUG
             Console.WriteLine(e);
 #endif
-            await CrashHelper.SendExceptionInfoAsync(e);
+            CrashHelper.SendExceptionInfoAsync(e);
             throw;
         }
 

+ 2 - 2
src/PixiEditor/Models/DocumentModels/Public/ChangeBlock.cs

@@ -10,9 +10,9 @@ public class ChangeBlock : IDisposable
         Accumulator.StartChangeBlock();
     }
     
-    public async Task ExecuteQueuedActions()
+    public void ExecuteQueuedActions()
     {
-        await Accumulator.TryExecuteAccumulatedActions();
+        Accumulator.TryExecuteAccumulatedActions();
     }
     
     public void Dispose()

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

@@ -19,7 +19,7 @@ using PixiEditor.ViewModels.Tools.Tools;
 namespace PixiEditor.ViewModels.Document;
 
 #nullable enable
-internal class ReferenceLayerViewModel : ObservableObject, IReferenceLayerHandler
+internal class ReferenceLayerViewModel : PixiObservableObject, IReferenceLayerHandler
 {
     private readonly DocumentViewModel doc;
     private readonly DocumentInternalParts internals;

+ 13 - 11
src/PixiEditor/ViewModels/SubViewModels/ClipboardViewModel.cs

@@ -202,7 +202,7 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
             if (newIds.Count == 0)
                 return;
 
-            await block.ExecuteQueuedActions();
+            block.ExecuteQueuedActions();
 
             ConnectRelatedNodes(doc, nodeMapping);
 
@@ -421,7 +421,7 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
 
     [Evaluator.CanExecute("PixiEditor.Clipboard.CanCopyNodes",
         nameof(Owner.DocumentManagerSubViewModel),
-        nameof(Owner.DocumentManagerSubViewModel.ActiveDocument), 
+        nameof(Owner.DocumentManagerSubViewModel.ActiveDocument),
         nameof(Owner.DocumentManagerSubViewModel.ActiveDocument.NodeGraph))]
     public bool CanCopyNodes()
     {
@@ -430,9 +430,10 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
     }
 
 
-    [Evaluator.CanExecute("PixiEditor.Clipboard.CanPasteNodes", 
+    [Evaluator.CanExecute("PixiEditor.Clipboard.CanPasteNodes",
         nameof(Owner.DocumentManagerSubViewModel),
-        nameof(Owner.DocumentManagerSubViewModel.ActiveDocument), nameof(Owner.DocumentManagerSubViewModel.ActiveDocument.NodeGraph))]
+        nameof(Owner.DocumentManagerSubViewModel.ActiveDocument),
+        nameof(Owner.DocumentManagerSubViewModel.ActiveDocument.NodeGraph))]
     public bool CanPasteNodes()
     {
         if (!Owner.DocumentIsNotNull(null)) return false;
@@ -443,7 +444,7 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
 
     [Evaluator.CanExecute("PixiEditor.Clipboard.CanPasteCels",
         nameof(Owner.DocumentManagerSubViewModel),
-        nameof(Owner.DocumentManagerSubViewModel.ActiveDocument), 
+        nameof(Owner.DocumentManagerSubViewModel.ActiveDocument),
         nameof(Owner.DocumentManagerSubViewModel.ActiveDocument.AnimationDataViewModel))]
     public bool CanPasteCels()
     {
@@ -575,21 +576,22 @@ internal class ClipboardViewModel : SubViewModel<ViewModelMain>
     {
         if (clipboardTasks.TryGetValue(key, out var t))
         {
+            if (t.IsFaulted)
+            {
+                clipboardTasks.Remove(key, out _);
+            }
+
             return;
         }
 
-        var newTask = Task.Run(
+        var newTask = Dispatcher.UIThread.InvokeAsync(
             async () =>
             {
                 T result = await task();
                 if (!EqualityComparer<T>.Default.Equals(result, value))
                 {
                     updateAction(result);
-                    
-                    Dispatcher.UIThread.Invoke(() =>
-                    {
-                        CommandController.CanExecuteChanged("PixiEditor.Clipboard");
-                    });
+                    CommandController.CanExecuteChanged("PixiEditor.Clipboard");
                 }
 
                 clipboardTasks.Remove(key, out _);

+ 4 - 7
src/PixiEditor/ViewModels/SubViewModels/ColorsViewModel.cs

@@ -52,7 +52,7 @@ internal class ColorsViewModel : SubViewModel<ViewModelMain>, IColorsHandler
         (LocalPalettesFetcher)PaletteProvider.DataSources.FirstOrDefault(x => x is LocalPalettesFetcher)!;
 
     public bool ColorsTempSwapped { get; private set; }
-    
+
     private Color primaryColor = Colors.Black;
     private Color secondaryColor = Colors.White;
     private ColorState primaryColorState;
@@ -170,14 +170,11 @@ internal class ColorsViewModel : SubViewModel<ViewModelMain>, IColorsHandler
     }
 
     [Commands_Command.Basic("PixiEditor.Colors.OpenPaletteBrowser", "OPEN_PALETTE_BROWSER", "OPEN_PALETTE_BROWSER",
-        CanExecute = "PixiEditor.HasDocument",
         Icon = PixiPerfectIcons.Database, MenuItemPath = "VIEW/OPEN_PALETTE_BROWSER", MenuItemOrder = 3,
         AnalyticsTrack = true)]
     public void OpenPalettesBrowser()
     {
-        var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;
-        if (doc is not null)
-            PalettesBrowser.Open();
+        PalettesBrowser.Open();
     }
 
     private async Task ImportLospecPalette()
@@ -374,9 +371,9 @@ internal class ColorsViewModel : SubViewModel<ViewModelMain>, IColorsHandler
         }
         else
         {
-            ColorsTempSwapped = false;    
+            ColorsTempSwapped = false;
         }
-        
+
         (PrimaryColor, SecondaryColor) = (SecondaryColor, PrimaryColor);
     }
 

+ 12 - 5
src/PixiEditor/ViewModels/SubViewModels/LayersViewModel.cs

@@ -201,21 +201,24 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         member.Document.Operations.DuplicateMember(member.Id);
     }
 
-    [Evaluator.CanExecute("PixiEditor.Layer.SelectedMemberIsLayer")]
+    [Evaluator.CanExecute("PixiEditor.Layer.SelectedMemberIsLayer", 
+        nameof(DocumentManagerViewModel.ActiveDocument), nameof(DocumentViewModel.SelectedStructureMember))]
     public bool SelectedMemberIsLayer(object property)
     {
         var member = Owner.DocumentManagerSubViewModel.ActiveDocument?.SelectedStructureMember;
         return member is ILayerHandler;
     }
 
-    [Evaluator.CanExecute("PixiEditor.Layer.SelectedLayerIsRasterizable")]
+    [Evaluator.CanExecute("PixiEditor.Layer.SelectedLayerIsRasterizable",
+        nameof(DocumentManagerViewModel.ActiveDocument), nameof(DocumentViewModel.SelectedStructureMember))]
     public bool SelectedLayerIsRasterizable(object property)
     {
         var member = Owner.DocumentManagerSubViewModel.ActiveDocument?.SelectedStructureMember;
         return member is ILayerHandler && member is not IRasterLayerHandler;
     }
     
-    [Evaluator.CanExecute("PixiEditor.Layer.SelectedMemberIsVectorLayer")]
+    [Evaluator.CanExecute("PixiEditor.Layer.SelectedMemberIsVectorLayer",
+        nameof(DocumentManagerViewModel.ActiveDocument), nameof(DocumentViewModel.SelectedStructureMember))]
     public bool SelectedMemberIsVectorLayer(object property)
     {
         var member = Owner.DocumentManagerSubViewModel.ActiveDocument?.SelectedStructureMember;
@@ -338,10 +341,14 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         member.IsVisibleBindable = !member.IsVisibleBindable;
     }
 
-    [Evaluator.CanExecute("PixiEditor.Layer.HasMemberAbove")]
+    [Evaluator.CanExecute("PixiEditor.Layer.HasMemberAbove", 
+        nameof(DocumentManagerViewModel.ActiveDocument), 
+        nameof(DocumentViewModel.SelectedStructureMember), nameof(DocumentViewModel.AllChangesSaved))]
     public bool HasMemberAbove(object property) => HasSelectedMember(true);
 
-    [Evaluator.CanExecute("PixiEditor.Layer.HasMemberBelow")]
+    [Evaluator.CanExecute("PixiEditor.Layer.HasMemberBelow",
+    nameof(DocumentManagerViewModel.ActiveDocument), 
+    nameof(DocumentViewModel.SelectedStructureMember), nameof(DocumentViewModel.AllChangesSaved))]
     public bool HasMemberBelow(object property) => HasSelectedMember(false);
 
     [Command.Basic("PixiEditor.Layer.MoveSelectedMemberUpwards", "MOVE_MEMBER_UP", "MOVE_MEMBER_UP_DESCRIPTIVE",

+ 1 - 0
src/PixiEditor/Views/Windows/HelloTherePopup.axaml.cs

@@ -143,6 +143,7 @@ internal partial class HelloTherePopup : PixiEditorPopup
         Closing += (_, _) => { IsClosing = true; };
 
         Activated += RefreshClipboardImg;
+        Loaded += HelloTherePopup_OnLoaded;
 
         InitializeComponent();