From aa6f1278259cc25a8e951608ffb771a657e3b887 Mon Sep 17 00:00:00 2001 From: Jaex Date: Wed, 27 Dec 2023 10:06:42 +0300 Subject: [PATCH] Fixed undo/redo bug --- .../Shapes/ShapeManager.cs | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs index f609f8999..c44dc8d83 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs @@ -191,6 +191,9 @@ private set public bool IsCurrentHoverShapeValid => CurrentHoverShape != null && CurrentHoverShape.IsValidShape; public bool IsCurrentShapeTypeRegion => IsShapeTypeRegion(CurrentTool); + + public bool IsCurrentShapeTypeTool => IsShapeTypeTool(CurrentTool); + public int StartingStepNumber { get; set; } = 1; public bool IsCreating { get; set; } @@ -956,10 +959,12 @@ public void StartRegionSelection() if (shape != null && shape.IsSelectable) // Select shape { DeselectCurrentShape(); + if (!IsMoving) { history.CreateShapesMemento(); } + IsMoving = true; shape.OnMoving(); CurrentShape = shape; @@ -974,7 +979,12 @@ public void StartRegionSelection() { ClearTools(); DeselectCurrentShape(); - history.CreateShapesMemento(); + + if (!IsCurrentShapeTypeRegion && !IsCurrentShapeTypeTool) + { + history.CreateShapesMemento(); + } + shape = AddShape(); shape.OnCreating(); } @@ -1558,6 +1568,8 @@ public void RestoreState(ImageEditorMemento memento) effect.OnMoved(); } + ClearTools(); + DeselectCurrentShape(); OnImageModified(); UpdateMenu(); } @@ -1789,6 +1801,19 @@ private bool IsShapeTypeRegion(ShapeType shapeType) return false; } + private bool IsShapeTypeTool(ShapeType shapeType) + { + switch (shapeType) + { + case ShapeType.ToolSelect: + case ShapeType.ToolCrop: + case ShapeType.ToolCutOut: + return true; + } + + return false; + } + private void UpdateNodes() { BaseShape shape = CurrentShape;