From fc1e464e509e1b696a32dd201f007ee52a72bbff Mon Sep 17 00:00:00 2001 From: Jaex Date: Thu, 13 Oct 2016 11:47:26 +0300 Subject: [PATCH] Remember menu state option also gonna remember collapsed state of menu --- ShareX.HelpersLib/Helpers/ImageHelpers.cs | 16 +- .../RegionCaptureOptions.cs | 3 +- .../Shapes/ShapeManagerMenu.cs | 155 ++++++++++-------- 3 files changed, 102 insertions(+), 72 deletions(-) diff --git a/ShareX.HelpersLib/Helpers/ImageHelpers.cs b/ShareX.HelpersLib/Helpers/ImageHelpers.cs index d4143dc93..2f93b75d9 100644 --- a/ShareX.HelpersLib/Helpers/ImageHelpers.cs +++ b/ShareX.HelpersLib/Helpers/ImageHelpers.cs @@ -1262,19 +1262,19 @@ public static Image CombineImages(IEnumerable images, Orientation orienta return bmp; } - public static Image CreateColorPickerIcon(Color color, Rectangle rect) + public static Image CreateColorPickerIcon(Color color, Rectangle rect, int holeSize = 0) { Bitmap bmp = new Bitmap(rect.Width, rect.Height); using (Graphics g = Graphics.FromImage(bmp)) { - DrawColorPickerIcon(g, color, rect); + DrawColorPickerIcon(g, color, rect, holeSize); } return bmp; } - public static void DrawColorPickerIcon(Graphics g, Color color, Rectangle rect) + public static void DrawColorPickerIcon(Graphics g, Color color, Rectangle rect, int holeSize = 0) { if (color.A < 255) { @@ -1290,6 +1290,16 @@ public static void DrawColorPickerIcon(Graphics g, Color color, Rectangle rect) } g.DrawRectangleProper(Pens.Black, rect); + + if (holeSize > 0) + { + g.CompositingMode = CompositingMode.SourceCopy; + + Rectangle holeRect = new Rectangle(rect.Width / 2 - holeSize / 2, rect.Height / 2 - holeSize / 2, holeSize, holeSize); + + g.FillRectangle(Brushes.Transparent, holeRect); + g.DrawRectangleProper(Pens.Black, holeRect); + } } public static void HighlightImage(Bitmap bmp) diff --git a/ShareX.ScreenCaptureLib/RegionCaptureOptions.cs b/ShareX.ScreenCaptureLib/RegionCaptureOptions.cs index f924ef292..8b69efa0e 100644 --- a/ShareX.ScreenCaptureLib/RegionCaptureOptions.cs +++ b/ShareX.ScreenCaptureLib/RegionCaptureOptions.cs @@ -66,7 +66,8 @@ public class RegionCaptureOptions public bool IsFixedSize = false; public Size FixedSize = new Size(250, 250); public bool ShowFPS = false; - public bool RememberMenuPosition = false; + public bool RememberMenuState = false; + public bool MenuCollapsed = false; public Point MenuPosition = Point.Empty; public AnnotationOptions AnnotationOptions = new AnnotationOptions(); diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs index c1e028efc..f9b32b3f4 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManagerMenu.cs @@ -598,11 +598,11 @@ private void CreateMenu() tsmiShowFPS.Click += (sender, e) => Config.ShowFPS = tsmiShowFPS.Checked; tsddbOptions.DropDownItems.Add(tsmiShowFPS); - ToolStripMenuItem tsmiRememberMenuPosition = new ToolStripMenuItem("Remember menu position"); - tsmiRememberMenuPosition.Checked = Config.RememberMenuPosition; - tsmiRememberMenuPosition.CheckOnClick = true; - tsmiRememberMenuPosition.Click += (sender, e) => Config.RememberMenuPosition = tsmiRememberMenuPosition.Checked; - tsddbOptions.DropDownItems.Add(tsmiRememberMenuPosition); + ToolStripMenuItem tsmiRememberMenuState = new ToolStripMenuItem("Remember menu state"); + tsmiRememberMenuState.Checked = Config.RememberMenuState; + tsmiRememberMenuState.CheckOnClick = true; + tsmiRememberMenuState.Click += (sender, e) => Config.RememberMenuState = tsmiRememberMenuState.Checked; + tsddbOptions.DropDownItems.Add(tsmiRememberMenuState); } #endregion Options @@ -653,7 +653,7 @@ private void CreateMenu() CurrentShapeChanged += shape => UpdateMenu(); - ConfigureMenuPosition(); + ConfigureMenuState(); form.Activate(); } @@ -667,6 +667,68 @@ private void MenuForm_KeyUp(object sender, KeyEventArgs e) } private void MenuForm_LocationChanged(object sender, EventArgs e) + { + CheckMenuPosition(); + } + + private void TsMain_MouseLeave(object sender, EventArgs e) + { + MenuTextAnimation.Stop(); + } + + private void TslDrag_MouseEnter(object sender, EventArgs e) + { + menuForm.Cursor = Cursors.SizeAll; + } + + private void TslDrag_MouseLeave(object sender, EventArgs e) + { + menuForm.Cursor = Cursors.Default; + } + + private void TslDrag_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + NativeMethods.ReleaseCapture(); + NativeMethods.DefWindowProc(menuForm.Handle, (uint)WindowsMessages.SYSCOMMAND, (UIntPtr)NativeConstants.MOUSE_MOVE, IntPtr.Zero); + } + else if (e.Button == MouseButtons.Right) + { + SetMenuCollapsed(!IsMenuCollapsed); + CheckMenuPosition(); + } + } + + private void ConfigureMenuState() + { + if (Config.RememberMenuState) + { + SetMenuCollapsed(Config.MenuCollapsed); + } + + Rectangle rectScreen = CaptureHelpers.GetScreenBounds(); + + if (Config.RememberMenuState && rectScreen.Contains(Config.MenuPosition)) + { + menuForm.Location = Config.MenuPosition; + } + else + { + Rectangle rectActiveScreen = CaptureHelpers.GetActiveScreenBounds(); + + if (tsMain.Width < rectActiveScreen.Width) + { + menuForm.Location = new Point(rectActiveScreen.X + rectActiveScreen.Width / 2 - tsMain.Width / 2, rectActiveScreen.Y + 20); + } + else + { + menuForm.Location = rectActiveScreen.Location; + } + } + } + + private void CheckMenuPosition() { Rectangle rectMenu = menuForm.Bounds; Rectangle rectScreen = CaptureHelpers.GetScreenBounds(); @@ -701,77 +763,22 @@ private void MenuForm_LocationChanged(object sender, EventArgs e) menuForm.Location = pos; } - if (Config.RememberMenuPosition) + if (Config.RememberMenuState) { Config.MenuPosition = pos; } } - private void TsMain_MouseLeave(object sender, EventArgs e) + private void SetMenuCollapsed(bool isCollapsed) { - MenuTextAnimation.Stop(); - } - - private void TslDrag_MouseEnter(object sender, EventArgs e) - { - menuForm.Cursor = Cursors.SizeAll; - } - - private void TslDrag_MouseLeave(object sender, EventArgs e) - { - menuForm.Cursor = Cursors.Default; - } - - private void TslDrag_MouseDown(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) + if (IsMenuCollapsed == isCollapsed) { - NativeMethods.ReleaseCapture(); - NativeMethods.DefWindowProc(menuForm.Handle, (uint)WindowsMessages.SYSCOMMAND, (UIntPtr)NativeConstants.MOUSE_MOVE, IntPtr.Zero); + return; } - else if (e.Button == MouseButtons.Right) - { - SwapMenuState(); - } - } - private void ConfigureMenuPosition() - { - Rectangle rectScreen = CaptureHelpers.GetScreenBounds(); + IsMenuCollapsed = isCollapsed; - if (Config.RememberMenuPosition && rectScreen.Contains(Config.MenuPosition)) - { - menuForm.Location = Config.MenuPosition; - } - else - { - Rectangle rectActiveScreen = CaptureHelpers.GetActiveScreenBounds(); - - if (tsMain.Width < rectActiveScreen.Width) - { - menuForm.Location = new Point(rectActiveScreen.X + rectActiveScreen.Width / 2 - tsMain.Width / 2, rectActiveScreen.Y + 20); - } - else - { - menuForm.Location = rectActiveScreen.Location; - } - } - } - - private void SwapMenuState() - { if (IsMenuCollapsed) - { - foreach (ToolStripItem tsi in tsMain.Items.OfType()) - { - tsi.Visible = true; - } - - UpdateMenu(); - - IsMenuCollapsed = false; - } - else { foreach (ToolStripItem tsi in tsMain.Items.OfType()) { @@ -782,8 +789,20 @@ private void SwapMenuState() tsi.Visible = false; } + } + else + { + foreach (ToolStripItem tsi in tsMain.Items.OfType()) + { + tsi.Visible = true; + } - IsMenuCollapsed = true; + UpdateMenu(); + } + + if (Config.RememberMenuState) + { + Config.MenuCollapsed = IsMenuCollapsed; } } @@ -818,7 +837,7 @@ private void UpdateMenu() } if (tsbBorderColor.Image != null) tsbBorderColor.Image.Dispose(); - tsbBorderColor.Image = ImageHelpers.CreateColorPickerIcon(borderColor, new Rectangle(0, 0, 16, 16)); + tsbBorderColor.Image = ImageHelpers.CreateColorPickerIcon(borderColor, new Rectangle(0, 0, 16, 16), 8); int borderSize;