Browse Source

Improved default undo method

flabbet 3 years ago
parent
commit
9cdfce651e
1 changed files with 14 additions and 3 deletions
  1. 14 3
      PixiEditor/Models/Tools/BitmapOperationTool.cs

+ 14 - 3
PixiEditor/Models/Tools/BitmapOperationTool.cs

@@ -21,10 +21,9 @@ namespace PixiEditor.Models.Tools
 
 
         public override void BeforeUse()
         public override void BeforeUse()
         {
         {
-            if (UseDefaultUndoMethod)
+            if (UseDefaultUndoMethod && !RequiresPreviewLayer)
             {
             {
-                Document doc = ViewModels.ViewModelMain.Current.BitmapManager.ActiveDocument;
-                _change = new StorageBasedChange(doc, new[] { doc.ActiveLayer }, true);
+                InitializeStorageBasedChange();
             }
             }
         }
         }
 
 
@@ -36,12 +35,24 @@ namespace PixiEditor.Models.Tools
         {
         {
             if (!UseDefaultUndoMethod)
             if (!UseDefaultUndoMethod)
                 return;
                 return;
+
+            if (RequiresPreviewLayer)
+            {
+                InitializeStorageBasedChange();
+            }
+
             var document = ViewModels.ViewModelMain.Current.BitmapManager.ActiveDocument;
             var document = ViewModels.ViewModelMain.Current.BitmapManager.ActiveDocument;
             var args = new object[] { _change.Document };
             var args = new object[] { _change.Document };
             document.UndoManager.AddUndoChange(_change.ToChange(UndoStorageBasedChange, args));
             document.UndoManager.AddUndoChange(_change.ToChange(UndoStorageBasedChange, args));
             _change = null;
             _change = null;
         }
         }
 
 
+        private void InitializeStorageBasedChange()
+        {
+            Document doc = ViewModels.ViewModelMain.Current.BitmapManager.ActiveDocument;
+            _change = new StorageBasedChange(doc, new[] {doc.ActiveLayer}, true);
+        }
+
         private void UndoStorageBasedChange(Layer[] layers, UndoLayer[] data, object[] args)
         private void UndoStorageBasedChange(Layer[] layers, UndoLayer[] data, object[] args)
         {
         {
             Document document = (Document)args[0];
             Document document = (Document)args[0];