Remember menu state option also gonna remember collapsed state of menu

This commit is contained in:
Jaex 2016-10-13 11:47:26 +03:00
parent f94ec6d6b9
commit fc1e464e50
3 changed files with 102 additions and 72 deletions

View file

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

View file

@ -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();

View file

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