Browse Source

Undo Improvements

flabbet 3 years ago
parent
commit
f0ead4e0e1

+ 7 - 3
PixiEditor/Models/Tools/Tool.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.Windows;
 using System.Windows.Input;
 using PixiEditor.Helpers;
 using PixiEditor.Helpers.Extensions;
@@ -58,14 +59,13 @@ namespace PixiEditor.Models.Tools
 
         public virtual void OnMouseDown(MouseEventArgs e)
         {
-            Document doc = ViewModels.ViewModelMain.Current.BitmapManager.ActiveDocument;
-            _change = new StorageBasedChange(doc, new[] { doc.ActiveLayer }, true);
         }
 
         public virtual void AddUndoProcess(Document document)
         {
             var args = new object[] { _change.Document };
             document.UndoManager.AddUndoChange(_change.ToChange(UndoProcess, args));
+            _change = null;
         }
 
         private void UndoProcess(Layer[] layers, UndoLayer[] data, object[] args)
@@ -82,8 +82,8 @@ namespace PixiEditor.Models.Tools
                     {
                         document.SetMainActiveLayer(data[i].LayerIndex);
                     }
-                    layer.InvokeLayerBitmapChange();
                 }
+
             }
         }
 
@@ -105,6 +105,10 @@ namespace PixiEditor.Models.Tools
 
         public virtual void OnRecordingLeftMouseDown(MouseEventArgs e)
         {
+            if (e.LeftButton != MouseButtonState.Pressed) return;
+
+            Document doc = ViewModels.ViewModelMain.Current.BitmapManager.ActiveDocument;
+            _change = new StorageBasedChange(doc, new[] { doc.ActiveLayer }, true);
         }
 
         public virtual void OnStoppedRecordingMouseUp(MouseEventArgs e)

+ 2 - 1
PixiEditor/Models/Undo/StorageBasedChange.cs

@@ -138,6 +138,7 @@ namespace PixiEditor.Models.Undo
             {
                 Layer[] layers = LoadLayersFromDevice();
                 SaveLayersOnDevice();
+
                 undoRedoProcess(layers, StoredLayers, processParameters);
             };
 
@@ -225,7 +226,7 @@ namespace PixiEditor.Models.Undo
         /// </summary>
         private void GenerateUndoLayers()
         {
-            StoredLayers = new UndoLayer[layersToStore.Count()];
+            StoredLayers = new UndoLayer[layersToStore.Count];
             int i = 0;
             foreach (var layerGuid in layersToStore)
             {

+ 1 - 0
PixiEditor/ViewModels/SubViewModels/Main/UndoViewModel.cs

@@ -34,6 +34,7 @@ namespace PixiEditor.ViewModels.SubViewModels.Main
             if (activeDoc is null) return;
 
             selectedTool.AddUndoProcess(activeDoc);
+            selectedTool.AfterAddedUndo(activeDoc.UndoManager);
         }
 
         /// <summary>