mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 09:47:22 +13:00
Remember menu state option also gonna remember collapsed state of menu
This commit is contained in:
parent
f94ec6d6b9
commit
fc1e464e50
3 changed files with 102 additions and 72 deletions
|
@ -1262,19 +1262,19 @@ public static Image CombineImages(IEnumerable<Image> 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)
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
if (IsMenuCollapsed == isCollapsed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
private void TslDrag_MouseEnter(object sender, EventArgs e)
|
||||
{
|
||||
menuForm.Cursor = Cursors.SizeAll;
|
||||
}
|
||||
IsMenuCollapsed = isCollapsed;
|
||||
|
||||
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)
|
||||
{
|
||||
SwapMenuState();
|
||||
}
|
||||
}
|
||||
|
||||
private void ConfigureMenuPosition()
|
||||
{
|
||||
Rectangle rectScreen = CaptureHelpers.GetScreenBounds();
|
||||
|
||||
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<ToolStripItem>())
|
||||
{
|
||||
tsi.Visible = true;
|
||||
}
|
||||
|
||||
UpdateMenu();
|
||||
|
||||
IsMenuCollapsed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (ToolStripItem tsi in tsMain.Items.OfType<ToolStripItem>())
|
||||
{
|
||||
|
@ -782,8 +789,20 @@ private void SwapMenuState()
|
|||
|
||||
tsi.Visible = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (ToolStripItem tsi in tsMain.Items.OfType<ToolStripItem>())
|
||||
{
|
||||
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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue