diff --git a/ShareX.ScreenCaptureLib/Helpers/ImageEditorHistory.cs b/ShareX.ScreenCaptureLib/Helpers/ImageEditorHistory.cs index 9e0883959..ea912d2c0 100644 --- a/ShareX.ScreenCaptureLib/Helpers/ImageEditorHistory.cs +++ b/ShareX.ScreenCaptureLib/Helpers/ImageEditorHistory.cs @@ -77,8 +77,11 @@ public void CreateCanvasMemento() public void CreateShapesMemento() { - ImageEditorMemento memento = GetMementoFromShapes(); - AddMemento(memento); + if (!shapeManager.IsCurrentShapeTypeRegion && shapeManager.CurrentTool != ShapeType.ToolCrop && shapeManager.CurrentTool != ShapeType.ToolCutOut) + { + ImageEditorMemento memento = GetMementoFromShapes(); + AddMemento(memento); + } } public void Undo() diff --git a/ShareX.ScreenCaptureLib/Properties/Resources.Designer.cs b/ShareX.ScreenCaptureLib/Properties/Resources.Designer.cs index e089cbf01..6bd0caf6e 100644 --- a/ShareX.ScreenCaptureLib/Properties/Resources.Designer.cs +++ b/ShareX.ScreenCaptureLib/Properties/Resources.Designer.cs @@ -90,6 +90,16 @@ internal class Resources { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_circle_315 { + get { + object obj = ResourceManager.GetObject("arrow_circle_315", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/ShareX.ScreenCaptureLib/Properties/Resources.resx b/ShareX.ScreenCaptureLib/Properties/Resources.resx index 845299c06..84007d1ef 100644 --- a/ShareX.ScreenCaptureLib/Properties/Resources.resx +++ b/ShareX.ScreenCaptureLib/Properties/Resources.resx @@ -826,4 +826,7 @@ Would you like to close image editor? Image URL + + ..\Resources\arrow-circle-315.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/ShareX.ScreenCaptureLib/Resources/arrow-circle-315.png b/ShareX.ScreenCaptureLib/Resources/arrow-circle-315.png new file mode 100644 index 000000000..94adf70a9 Binary files /dev/null and b/ShareX.ScreenCaptureLib/Resources/arrow-circle-315.png differ diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs index c44dc8d83..7300d8523 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs @@ -192,8 +192,6 @@ private set public bool IsCurrentShapeTypeRegion => IsShapeTypeRegion(CurrentTool); - public bool IsCurrentShapeTypeTool => IsShapeTypeTool(CurrentTool); - public int StartingStepNumber { get; set; } = 1; public bool IsCreating { get; set; } @@ -629,7 +627,7 @@ private void form_KeyDown(object sender, KeyEventArgs e) } break; case Keys.Shift | Keys.Delete: - DeleteAllShapes(); + DeleteAllShapes(true); break; } @@ -980,11 +978,6 @@ public void StartRegionSelection() ClearTools(); DeselectCurrentShape(); - if (!IsCurrentShapeTypeRegion && !IsCurrentShapeTypeTool) - { - history.CreateShapesMemento(); - } - shape = AddShape(); shape.OnCreating(); } @@ -1141,6 +1134,8 @@ private BaseShape AddShape() private void AddShape(BaseShape shape) { + history.CreateShapesMemento(); + Shapes.Add(shape); CurrentShape = shape; } @@ -1472,6 +1467,8 @@ public void DeleteShape(BaseShape shape) { if (shape != null) { + history.CreateShapesMemento(); + shape.Dispose(); Shapes.Remove(shape); DeselectShape(shape); @@ -1495,10 +1492,15 @@ private void DeleteIntersectShape() DeleteShape(GetIntersectShape()); } - private void DeleteAllShapes() + private void DeleteAllShapes(bool takeSnapshot = false) { if (Shapes.Count > 0) { + if (takeSnapshot) + { + history.CreateShapesMemento(); + } + foreach (BaseShape shape in Shapes) { shape.Dispose(); @@ -1674,6 +1676,7 @@ public void MoveAll(PointF offset) public void CollapseAllHorizontal(float x, float width) { float x2 = x + width; + if (width <= 0) return; List toDelete = new List(); @@ -1681,6 +1684,7 @@ public void CollapseAllHorizontal(float x, float width) foreach (BaseShape shape in Shapes) { RectangleF sr = shape.Rectangle; + if (sr.Left < x) { if (sr.Right <= x) @@ -1727,6 +1731,7 @@ public void CollapseAllHorizontal(float x, float width) public void CollapseAllVertical(float y, float height) { float y2 = y + height; + if (height <= 0) return; List toDelete = new List(); @@ -1734,6 +1739,7 @@ public void CollapseAllVertical(float y, float height) foreach (BaseShape shape in Shapes) { RectangleF sr = shape.Rectangle; + if (sr.Top < y) { if (sr.Bottom <= y) @@ -1801,19 +1807,6 @@ 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; @@ -1865,7 +1858,6 @@ private void DuplicateCurrrentShape(bool insertMousePosition) } shapeCopy.OnMoved(); - history.CreateShapesMemento(); AddShape(shapeCopy); SelectCurrentShape(); } @@ -1916,7 +1908,6 @@ private void PasteFromClipboard(bool insertMousePosition) shape.Rectangle = new RectangleF(pos.X, pos.Y, 1, 1); shape.Text = text.Trim(); shape.OnCreated(); - history.CreateShapesMemento(); AddShape(shape); SelectCurrentShape(); } @@ -2043,8 +2034,8 @@ public void NewImage() if (bmp != null) { Form.ImageFilePath = ""; - DeleteAllShapes(); history.CreateCanvasMemento(); + DeleteAllShapes(); UpdateMenu(); UpdateCanvas(bmp); } @@ -2070,8 +2061,8 @@ private void LoadImageFile(string filePath) if (bmp != null) { Form.ImageFilePath = filePath; - DeleteAllShapes(); history.CreateCanvasMemento(); + DeleteAllShapes(); UpdateMenu(); UpdateCanvas(bmp); } @@ -2154,7 +2145,6 @@ private void InsertImage(Image img) shape.Rectangle = new RectangleF(pos.X, pos.Y, 1, 1); shape.SetImage(img, centerImage); shape.OnCreated(); - history.CreateShapesMemento(); AddShape(shape); SelectCurrentShape(); } diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs index fa4adfdee..3849e5638 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs @@ -687,7 +687,7 @@ internal void CreateToolbar() tsddbEdit.DropDownItems.Add(tsmiUndo); tsmiRedo = new ToolStripMenuItem(Resources.ShapeManager_CreateToolbar_Redo); - tsmiRedo.Image = Resources.arrow_circle; + tsmiRedo.Image = Resources.arrow_circle_315; tsmiRedo.ShortcutKeyDisplayString = "Ctrl+Y"; tsmiRedo.Click += (sender, e) => history.Redo(); tsddbEdit.DropDownItems.Add(tsmiRedo); @@ -715,7 +715,7 @@ internal void CreateToolbar() tsmiDeleteAll = new ToolStripMenuItem(Resources.ShapeManager_CreateToolbar_DeleteAll); tsmiDeleteAll.Image = Resources.eraser; tsmiDeleteAll.ShortcutKeyDisplayString = "Shift+Del"; - tsmiDeleteAll.Click += (sender, e) => DeleteAllShapes(); + tsmiDeleteAll.Click += (sender, e) => DeleteAllShapes(true); tsddbEdit.DropDownItems.Add(tsmiDeleteAll); tsddbEdit.DropDownItems.Add(new ToolStripSeparator()); diff --git a/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj b/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj index 1ea995f49..f7530f800 100644 --- a/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj +++ b/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj @@ -1009,6 +1009,9 @@ + + +