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;
|
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);
|
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
|
||||||
|
|
||||||
using (Graphics g = Graphics.FromImage(bmp))
|
using (Graphics g = Graphics.FromImage(bmp))
|
||||||
{
|
{
|
||||||
DrawColorPickerIcon(g, color, rect);
|
DrawColorPickerIcon(g, color, rect, holeSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
return bmp;
|
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)
|
if (color.A < 255)
|
||||||
{
|
{
|
||||||
|
@ -1290,6 +1290,16 @@ public static void DrawColorPickerIcon(Graphics g, Color color, Rectangle rect)
|
||||||
}
|
}
|
||||||
|
|
||||||
g.DrawRectangleProper(Pens.Black, 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)
|
public static void HighlightImage(Bitmap bmp)
|
||||||
|
|
|
@ -66,7 +66,8 @@ public class RegionCaptureOptions
|
||||||
public bool IsFixedSize = false;
|
public bool IsFixedSize = false;
|
||||||
public Size FixedSize = new Size(250, 250);
|
public Size FixedSize = new Size(250, 250);
|
||||||
public bool ShowFPS = false;
|
public bool ShowFPS = false;
|
||||||
public bool RememberMenuPosition = false;
|
public bool RememberMenuState = false;
|
||||||
|
public bool MenuCollapsed = false;
|
||||||
public Point MenuPosition = Point.Empty;
|
public Point MenuPosition = Point.Empty;
|
||||||
|
|
||||||
public AnnotationOptions AnnotationOptions = new AnnotationOptions();
|
public AnnotationOptions AnnotationOptions = new AnnotationOptions();
|
||||||
|
|
|
@ -598,11 +598,11 @@ private void CreateMenu()
|
||||||
tsmiShowFPS.Click += (sender, e) => Config.ShowFPS = tsmiShowFPS.Checked;
|
tsmiShowFPS.Click += (sender, e) => Config.ShowFPS = tsmiShowFPS.Checked;
|
||||||
tsddbOptions.DropDownItems.Add(tsmiShowFPS);
|
tsddbOptions.DropDownItems.Add(tsmiShowFPS);
|
||||||
|
|
||||||
ToolStripMenuItem tsmiRememberMenuPosition = new ToolStripMenuItem("Remember menu position");
|
ToolStripMenuItem tsmiRememberMenuState = new ToolStripMenuItem("Remember menu state");
|
||||||
tsmiRememberMenuPosition.Checked = Config.RememberMenuPosition;
|
tsmiRememberMenuState.Checked = Config.RememberMenuState;
|
||||||
tsmiRememberMenuPosition.CheckOnClick = true;
|
tsmiRememberMenuState.CheckOnClick = true;
|
||||||
tsmiRememberMenuPosition.Click += (sender, e) => Config.RememberMenuPosition = tsmiRememberMenuPosition.Checked;
|
tsmiRememberMenuState.Click += (sender, e) => Config.RememberMenuState = tsmiRememberMenuState.Checked;
|
||||||
tsddbOptions.DropDownItems.Add(tsmiRememberMenuPosition);
|
tsddbOptions.DropDownItems.Add(tsmiRememberMenuState);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Options
|
#endregion Options
|
||||||
|
@ -653,7 +653,7 @@ private void CreateMenu()
|
||||||
|
|
||||||
CurrentShapeChanged += shape => UpdateMenu();
|
CurrentShapeChanged += shape => UpdateMenu();
|
||||||
|
|
||||||
ConfigureMenuPosition();
|
ConfigureMenuState();
|
||||||
|
|
||||||
form.Activate();
|
form.Activate();
|
||||||
}
|
}
|
||||||
|
@ -667,6 +667,68 @@ private void MenuForm_KeyUp(object sender, KeyEventArgs e)
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MenuForm_LocationChanged(object sender, EventArgs 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 rectMenu = menuForm.Bounds;
|
||||||
Rectangle rectScreen = CaptureHelpers.GetScreenBounds();
|
Rectangle rectScreen = CaptureHelpers.GetScreenBounds();
|
||||||
|
@ -701,77 +763,22 @@ private void MenuForm_LocationChanged(object sender, EventArgs e)
|
||||||
menuForm.Location = pos;
|
menuForm.Location = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Config.RememberMenuPosition)
|
if (Config.RememberMenuState)
|
||||||
{
|
{
|
||||||
Config.MenuPosition = pos;
|
Config.MenuPosition = pos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TsMain_MouseLeave(object sender, EventArgs e)
|
private void SetMenuCollapsed(bool isCollapsed)
|
||||||
{
|
{
|
||||||
MenuTextAnimation.Stop();
|
if (IsMenuCollapsed == isCollapsed)
|
||||||
}
|
|
||||||
|
|
||||||
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();
|
return;
|
||||||
NativeMethods.DefWindowProc(menuForm.Handle, (uint)WindowsMessages.SYSCOMMAND, (UIntPtr)NativeConstants.MOUSE_MOVE, IntPtr.Zero);
|
|
||||||
}
|
}
|
||||||
else if (e.Button == MouseButtons.Right)
|
|
||||||
{
|
|
||||||
SwapMenuState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ConfigureMenuPosition()
|
IsMenuCollapsed = isCollapsed;
|
||||||
{
|
|
||||||
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)
|
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>())
|
foreach (ToolStripItem tsi in tsMain.Items.OfType<ToolStripItem>())
|
||||||
{
|
{
|
||||||
|
@ -782,8 +789,20 @@ private void SwapMenuState()
|
||||||
|
|
||||||
tsi.Visible = false;
|
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();
|
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;
|
int borderSize;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue