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 @@
+
+
+