From d9b606e6c0cf65be8ef96afcc2e0110055359041 Mon Sep 17 00:00:00 2001 From: Jaex Date: Tue, 3 May 2016 16:28:15 +0300 Subject: [PATCH] Added shape menu to region capture window which is openable with middle mouse button --- ShareX.HelpersLib/Extensions/Extensions.cs | 2 +- ShareX.ScreenCaptureLib/Enums.cs | 7 ++++ .../Forms/RectangleRegion.cs | 2 +- .../RegionHelpers/AreaManager.cs | 41 +++++++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/ShareX.HelpersLib/Extensions/Extensions.cs b/ShareX.HelpersLib/Extensions/Extensions.cs index 9bfec987f..71b5e0151 100644 --- a/ShareX.HelpersLib/Extensions/Extensions.cs +++ b/ShareX.HelpersLib/Extensions/Extensions.cs @@ -281,7 +281,7 @@ public static void RadioCheck(this ToolStripMenuItem tsmi) { ToolStrip parent = tsmi.GetCurrentParent(); - foreach (ToolStripMenuItem tsmiParent in parent.Items) + foreach (ToolStripMenuItem tsmiParent in parent.Items.OfType()) { if (tsmiParent != tsmi) { diff --git a/ShareX.ScreenCaptureLib/Enums.cs b/ShareX.ScreenCaptureLib/Enums.cs index a632c6d42..d70cc51da 100644 --- a/ShareX.ScreenCaptureLib/Enums.cs +++ b/ShareX.ScreenCaptureLib/Enums.cs @@ -140,12 +140,19 @@ public enum FFmpegPaletteUseDither public enum ShapeType { + [Description("Region: Rectangle")] RegionRectangle, + [Description("Region: Rounded rectangle")] RegionRoundedRectangle, + [Description("Region: Ellipse")] RegionEllipse, + [Description("Region: Triangle")] RegionTriangle, + [Description("Region: Diamond")] RegionDiamond, + [Description("Drawing: Rectangle")] DrawingRectangle, + [Description("Drawing: Rounded rectangle")] DrawingRoundedRectangle } diff --git a/ShareX.ScreenCaptureLib/Forms/RectangleRegion.cs b/ShareX.ScreenCaptureLib/Forms/RectangleRegion.cs index a19f0a8d0..14069131f 100644 --- a/ShareX.ScreenCaptureLib/Forms/RectangleRegion.cs +++ b/ShareX.ScreenCaptureLib/Forms/RectangleRegion.cs @@ -729,7 +729,7 @@ public void UpdateRegionPath() public override Image GetResultImage() { - if (SurfaceImage != null) + if (SurfaceImage != null && AreaManager.DrawingShapes.Length > 0) { using (Graphics g = Graphics.FromImage(SurfaceImage)) { diff --git a/ShareX.ScreenCaptureLib/RegionHelpers/AreaManager.cs b/ShareX.ScreenCaptureLib/RegionHelpers/AreaManager.cs index 9cd6783d9..b3457cbca 100644 --- a/ShareX.ScreenCaptureLib/RegionHelpers/AreaManager.cs +++ b/ShareX.ScreenCaptureLib/RegionHelpers/AreaManager.cs @@ -139,17 +139,54 @@ public bool IsResizing public int MinimumSize { get; set; } = 3; private RectangleRegion surface; + private ContextMenuStrip cmsShapeMenu; public AreaManager(RectangleRegion surface) { this.surface = surface; + CurrentShapeType = surface.Config.CurrentShapeType; + ResizeManager = new ResizeManager(surface, this); surface.MouseDown += surface_MouseDown; surface.MouseUp += surface_MouseUp; surface.KeyDown += surface_KeyDown; surface.KeyUp += surface_KeyUp; + + CreateShapeMenu(); + } + + private void CreateShapeMenu() + { + cmsShapeMenu = new ContextMenuStrip(); + + foreach (ShapeType shapeType in Helpers.GetEnums()) + { + ToolStripMenuItem tsmiShapeType = new ToolStripMenuItem(shapeType.GetLocalizedDescription()); + tsmiShapeType.Checked = shapeType == CurrentShapeType; + tsmiShapeType.Click += (sender, e) => + { + tsmiShapeType.RadioCheck(); + ChangeCurrentShapeType(shapeType); + }; + cmsShapeMenu.Items.Add(tsmiShapeType); + } + + cmsShapeMenu.Items.Add(new ToolStripSeparator()); + + ToolStripMenuItem tsmiChangeBorderColor = new ToolStripMenuItem("Change border color..."); + cmsShapeMenu.Items.Add(tsmiChangeBorderColor); + ToolStripMenuItem tsmiChangeBorderSize = new ToolStripMenuItem("Change border size..."); + cmsShapeMenu.Items.Add(tsmiChangeBorderSize); + ToolStripMenuItem tsmiChangeFillColor = new ToolStripMenuItem("Change fill color..."); + cmsShapeMenu.Items.Add(tsmiChangeFillColor); + + cmsShapeMenu.Items.Add(new ToolStripSeparator()); + + ToolStripMenuItem tsmiCloseMenu = new ToolStripMenuItem("Close"); + tsmiCloseMenu.Click += (sender, e) => cmsShapeMenu.Close(); + cmsShapeMenu.Items.Add(tsmiCloseMenu); } private void surface_KeyDown(object sender, KeyEventArgs e) @@ -434,6 +471,10 @@ private void surface_MouseUp(object sender, MouseEventArgs e) EndRegionSelection(); } } + else if (e.Button == MouseButtons.Middle) + { + cmsShapeMenu.Show(surface, e.Location); + } } private void RegionSelection(Point location)