Browse Source

Fix move tool undo crash

Equbuxu 3 years ago
parent
commit
40c444dac5

+ 2 - 12
PixiEditor/Models/Tools/BitmapOperationTool.cs

@@ -1,11 +1,9 @@
-using System;
-using PixiEditor.Models.DataHolders;
+using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.Undo;
 using PixiEditor.Models.Undo;
 using SkiaSharp;
 using SkiaSharp;
 using System.Collections.Generic;
 using System.Collections.Generic;
-using PixiEditor.Models.Tools.ToolSettings.Settings;
 
 
 namespace PixiEditor.Models.Tools
 namespace PixiEditor.Models.Tools
 {
 {
@@ -47,7 +45,7 @@ namespace PixiEditor.Models.Tools
 
 
             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(StorageBasedChange.BasicUndoProcess, args));
             _change = null;
             _change = null;
         }
         }
 
 
@@ -75,13 +73,5 @@ namespace PixiEditor.Models.Tools
 
 
             _change = new StorageBasedChange(doc, new[] { doc.ActiveLayer });
             _change = new StorageBasedChange(doc, new[] { doc.ActiveLayer });
         }
         }
-
-        private void UndoStorageBasedChange(Layer[] layers, UndoLayer[] data, object[] args)
-        {
-            Document document = (Document)args[0];
-            var ls = document.LayerStructure.CloneGroups();
-            StorageBasedChange.BasicUndoProcess(layers, data, args);
-            document.BuildLayerStructureProcess(new object[] { ls });
-        }
     }
     }
 }
 }

+ 1 - 20
PixiEditor/Models/Tools/Tools/MoveTool.cs

@@ -183,7 +183,7 @@ namespace PixiEditor.Models.Tools.Tools
         private void SaveUndo(Document document)
         private void SaveUndo(Document document)
         {
         {
             var args = new object[] { change.Document };
             var args = new object[] { change.Document };
-            document.UndoManager.AddUndoChange(change.ToChange(UndoProcess, args));
+            document.UndoManager.AddUndoChange(change.ToChange(StorageBasedChange.BasicUndoProcess, args));
             if (moveStartSelectedPoints != null)
             if (moveStartSelectedPoints != null)
             {
             {
                 SelectionHelpers.AddSelectionUndoStep(document, moveStartSelectedPoints, SelectionType.New);
                 SelectionHelpers.AddSelectionUndoStep(document, moveStartSelectedPoints, SelectionType.New);
@@ -192,24 +192,5 @@ namespace PixiEditor.Models.Tools.Tools
             }
             }
             change = null;
             change = null;
         }
         }
-
-        private void UndoProcess(Layer[] layers, UndoLayer[] data, object[] args)
-        {
-            if (args.Length > 0 && args[0] is Document document)
-            {
-                for (int i = 0; i < layers.Length; i++)
-                {
-                    Layer layer = layers[i];
-                    document.Layers.RemoveAt(data[i].LayerIndex);
-
-                    document.Layers.Insert(data[i].LayerIndex, layer);
-                    if (data[i].IsActive)
-                    {
-                        document.SetMainActiveLayer(data[i].LayerIndex);
-                    }
-                }
-
-            }
-        }
     }
     }
 }
 }

+ 3 - 0
PixiEditor/Models/Undo/StorageBasedChange.cs

@@ -273,6 +273,8 @@ namespace PixiEditor.Models.Undo
         {
         {
             if (args.Length > 0 && args[0] is Document document)
             if (args.Length > 0 && args[0] is Document document)
             {
             {
+                var ls = document.LayerStructure.CloneGroups();
+
                 for (int i = 0; i < layers.Length; i++)
                 for (int i = 0; i < layers.Length; i++)
                 {
                 {
                     Layer layer = layers[i];
                     Layer layer = layers[i];
@@ -286,6 +288,7 @@ namespace PixiEditor.Models.Undo
                     }
                     }
                 }
                 }
 
 
+                document.BuildLayerStructureProcess(new object[] { ls });
             }
             }
         }
         }
     }
     }