mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 17:56:51 +13:00
Added AnnotationEnabled property to region form so in non region capture tasks right click won't open menu and instead close form
This commit is contained in:
parent
8491f318d8
commit
2eaf62b83d
5 changed files with 131 additions and 117 deletions
|
@ -38,6 +38,7 @@ namespace ShareX.ScreenCaptureLib
|
|||
public class RectangleRegionForm : SurfaceForm
|
||||
{
|
||||
public ShapeManager ShapeManager { get; private set; }
|
||||
public bool AnnotationEnabled { get; set; } = true;
|
||||
|
||||
#region Screen color picker
|
||||
|
||||
|
@ -276,7 +277,7 @@ protected override void Draw(Graphics g)
|
|||
}
|
||||
|
||||
// Draw right click menu tip
|
||||
if (Config.ShowMenuTip)
|
||||
if (AnnotationEnabled && Config.ShowMenuTip)
|
||||
{
|
||||
DrawMenuTip(g);
|
||||
}
|
||||
|
@ -707,5 +708,57 @@ protected override void Dispose(bool disposing)
|
|||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
public static bool SelectRegion(out Rectangle rect)
|
||||
{
|
||||
return SelectRegion(out rect, new SurfaceOptions());
|
||||
}
|
||||
|
||||
public static bool SelectRegion(out Rectangle rect, SurfaceOptions options)
|
||||
{
|
||||
using (RectangleRegionForm form = new RectangleRegionForm())
|
||||
{
|
||||
form.AnnotationEnabled = false;
|
||||
form.Config = options;
|
||||
form.Config.ShowTips = false;
|
||||
form.Config.QuickCrop = true;
|
||||
form.Config.DetectWindows = true;
|
||||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
||||
if (form.Result == SurfaceResult.Region)
|
||||
{
|
||||
if (form.ShapeManager.IsCurrentRegionValid)
|
||||
{
|
||||
rect = CaptureHelpers.ClientToScreen(form.ShapeManager.CurrentRectangle);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (form.Result == SurfaceResult.Fullscreen)
|
||||
{
|
||||
rect = CaptureHelpers.GetScreenBounds();
|
||||
return true;
|
||||
}
|
||||
else if (form.Result == SurfaceResult.Monitor)
|
||||
{
|
||||
Screen[] screens = Screen.AllScreens;
|
||||
|
||||
if (form.MonitorIndex < screens.Length)
|
||||
{
|
||||
Screen screen = screens[form.MonitorIndex];
|
||||
rect = screen.Bounds;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (form.Result == SurfaceResult.ActiveMonitor)
|
||||
{
|
||||
rect = CaptureHelpers.GetActiveScreenBounds();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
rect = Rectangle.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -160,7 +160,8 @@ private void SelectRectangle()
|
|||
Thread.Sleep(250);
|
||||
|
||||
Rectangle rect;
|
||||
if (SurfaceForm.SelectRegion(out rect))
|
||||
|
||||
if (RectangleRegionForm.SelectRegion(out rect))
|
||||
{
|
||||
selectedRectangle = rect;
|
||||
lblSelectedRectangle.Text = selectedRectangle.ToString();
|
||||
|
@ -186,21 +187,22 @@ private void btnCapture_Click(object sender, EventArgs e)
|
|||
|
||||
private SimpleWindowInfo GetWindowInfo()
|
||||
{
|
||||
using (RectangleRegionForm surface = new RectangleRegionForm())
|
||||
using (RectangleRegionForm form = new RectangleRegionForm())
|
||||
{
|
||||
surface.OneClickMode = true;
|
||||
surface.Config.DetectWindows = true;
|
||||
surface.Config.DetectControls = true;
|
||||
surface.Config.UseDimming = false;
|
||||
surface.Config.ShowInfo = true;
|
||||
surface.Config.ShowMagnifier = false;
|
||||
surface.Config.ShowTips = false;
|
||||
surface.Prepare();
|
||||
surface.ShowDialog();
|
||||
form.OneClickMode = true;
|
||||
form.AnnotationEnabled = false;
|
||||
form.Config.DetectWindows = true;
|
||||
form.Config.DetectControls = true;
|
||||
form.Config.UseDimming = false;
|
||||
form.Config.ShowInfo = true;
|
||||
form.Config.ShowMagnifier = false;
|
||||
form.Config.ShowTips = false;
|
||||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
||||
if (surface.Result == SurfaceResult.Region)
|
||||
if (form.Result == SurfaceResult.Region)
|
||||
{
|
||||
return surface.SelectedWindow;
|
||||
return form.SelectedWindow;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -494,56 +494,5 @@ protected override void Dispose(bool disposing)
|
|||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
public static bool SelectRegion(out Rectangle rect)
|
||||
{
|
||||
return SelectRegion(out rect, new SurfaceOptions());
|
||||
}
|
||||
|
||||
public static bool SelectRegion(out Rectangle rect, SurfaceOptions options)
|
||||
{
|
||||
using (RectangleRegionForm surface = new RectangleRegionForm())
|
||||
{
|
||||
surface.Config = options;
|
||||
surface.Config.ShowTips = false;
|
||||
surface.Config.QuickCrop = true;
|
||||
surface.Config.DetectWindows = true;
|
||||
surface.Prepare();
|
||||
surface.ShowDialog();
|
||||
|
||||
if (surface.Result == SurfaceResult.Region)
|
||||
{
|
||||
if (surface.ShapeManager.IsCurrentRegionValid)
|
||||
{
|
||||
rect = CaptureHelpers.ClientToScreen(surface.ShapeManager.CurrentRectangle);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (surface.Result == SurfaceResult.Fullscreen)
|
||||
{
|
||||
rect = CaptureHelpers.GetScreenBounds();
|
||||
return true;
|
||||
}
|
||||
else if (surface.Result == SurfaceResult.Monitor)
|
||||
{
|
||||
Screen[] screens = Screen.AllScreens;
|
||||
|
||||
if (surface.MonitorIndex < screens.Length)
|
||||
{
|
||||
Screen screen = screens[surface.MonitorIndex];
|
||||
rect = screen.Bounds;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (surface.Result == SurfaceResult.ActiveMonitor)
|
||||
{
|
||||
rect = CaptureHelpers.GetActiveScreenBounds();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
rect = Rectangle.Empty;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -166,24 +166,27 @@ public bool IsResizing
|
|||
public event Action<BaseShape> CurrentShapeChanged;
|
||||
public event Action<ShapeType> CurrentShapeTypeChanged;
|
||||
|
||||
private RectangleRegionForm surface;
|
||||
private RectangleRegionForm form;
|
||||
private SurfaceOptions config;
|
||||
private ContextMenuStrip cmsContextMenu;
|
||||
|
||||
public ShapeManager(RectangleRegionForm surface)
|
||||
public ShapeManager(RectangleRegionForm form)
|
||||
{
|
||||
this.surface = surface;
|
||||
config = surface.Config;
|
||||
this.form = form;
|
||||
config = form.Config;
|
||||
|
||||
ResizeManager = new ResizeManager(surface, this);
|
||||
ResizeManager = new ResizeManager(form, this);
|
||||
|
||||
surface.MouseDown += surface_MouseDown;
|
||||
surface.MouseUp += surface_MouseUp;
|
||||
surface.KeyDown += surface_KeyDown;
|
||||
surface.KeyUp += surface_KeyUp;
|
||||
surface.MouseWheel += surface_MouseWheel;
|
||||
form.MouseDown += surface_MouseDown;
|
||||
form.MouseUp += surface_MouseUp;
|
||||
form.KeyDown += surface_KeyDown;
|
||||
form.KeyUp += surface_KeyUp;
|
||||
form.MouseWheel += surface_MouseWheel;
|
||||
|
||||
CreateContextMenu();
|
||||
if (form.AnnotationEnabled)
|
||||
{
|
||||
CreateContextMenu();
|
||||
}
|
||||
|
||||
CurrentShape = null;
|
||||
//CurrentShapeType = config.CurrentShapeType;
|
||||
|
@ -204,11 +207,11 @@ private void surface_MouseWheel(object sender, MouseEventArgs e)
|
|||
|
||||
private void CreateContextMenu()
|
||||
{
|
||||
cmsContextMenu = new ContextMenuStrip(surface.components);
|
||||
cmsContextMenu = new ContextMenuStrip(form.components);
|
||||
|
||||
ToolStripMenuItem tsmiCancelCapture = new ToolStripMenuItem("Cancel capture");
|
||||
tsmiCancelCapture.Image = Resources.prohibition;
|
||||
tsmiCancelCapture.Click += (sender, e) => surface.Close(SurfaceResult.Close);
|
||||
tsmiCancelCapture.Click += (sender, e) => form.Close(SurfaceResult.Close);
|
||||
cmsContextMenu.Items.Add(tsmiCancelCapture);
|
||||
|
||||
ToolStripMenuItem tsmiCloseMenu = new ToolStripMenuItem("Close menu");
|
||||
|
@ -292,7 +295,7 @@ private void CreateContextMenu()
|
|||
ToolStripMenuItem tsmiBorderColor = new ToolStripMenuItem("Border color...");
|
||||
tsmiBorderColor.Click += (sender, e) =>
|
||||
{
|
||||
surface.Pause();
|
||||
form.Pause();
|
||||
|
||||
using (ColorPickerForm dialogColor = new ColorPickerForm(config.ShapeBorderColor))
|
||||
{
|
||||
|
@ -305,7 +308,7 @@ private void CreateContextMenu()
|
|||
}
|
||||
}
|
||||
|
||||
surface.Resume();
|
||||
form.Resume();
|
||||
};
|
||||
tsmiBorderColor.Image = ImageHelpers.CreateColorPickerIcon(config.ShapeBorderColor, new Rectangle(0, 0, 16, 16));
|
||||
cmsContextMenu.Items.Add(tsmiBorderColor);
|
||||
|
@ -325,7 +328,7 @@ private void CreateContextMenu()
|
|||
ToolStripMenuItem tsmiFillColor = new ToolStripMenuItem("Fill color...");
|
||||
tsmiFillColor.Click += (sender, e) =>
|
||||
{
|
||||
surface.Pause();
|
||||
form.Pause();
|
||||
|
||||
using (ColorPickerForm dialogColor = new ColorPickerForm(config.ShapeFillColor))
|
||||
{
|
||||
|
@ -338,7 +341,7 @@ private void CreateContextMenu()
|
|||
}
|
||||
}
|
||||
|
||||
surface.Resume();
|
||||
form.Resume();
|
||||
};
|
||||
tsmiFillColor.Image = ImageHelpers.CreateColorPickerIcon(config.ShapeFillColor, new Rectangle(0, 0, 16, 16));
|
||||
cmsContextMenu.Items.Add(tsmiFillColor);
|
||||
|
@ -383,7 +386,7 @@ private void CreateContextMenu()
|
|||
ToolStripMenuItem tsmiHighlightColor = new ToolStripMenuItem("Highlight color...");
|
||||
tsmiHighlightColor.Click += (sender, e) =>
|
||||
{
|
||||
surface.Pause();
|
||||
form.Pause();
|
||||
|
||||
using (ColorPickerForm dialogColor = new ColorPickerForm(config.ShapeHighlightColor))
|
||||
{
|
||||
|
@ -396,7 +399,7 @@ private void CreateContextMenu()
|
|||
}
|
||||
}
|
||||
|
||||
surface.Resume();
|
||||
form.Resume();
|
||||
};
|
||||
tsmiHighlightColor.Image = ImageHelpers.CreateColorPickerIcon(config.ShapeHighlightColor, new Rectangle(0, 0, 16, 16));
|
||||
cmsContextMenu.Items.Add(tsmiHighlightColor);
|
||||
|
@ -405,12 +408,12 @@ private void CreateContextMenu()
|
|||
|
||||
ToolStripMenuItem tsmiFullscreenCapture = new ToolStripMenuItem("Capture fullscreen");
|
||||
tsmiFullscreenCapture.Image = Resources.layer_fullscreen;
|
||||
tsmiFullscreenCapture.Click += (sender, e) => surface.Close(SurfaceResult.Fullscreen);
|
||||
tsmiFullscreenCapture.Click += (sender, e) => form.Close(SurfaceResult.Fullscreen);
|
||||
cmsContextMenu.Items.Add(tsmiFullscreenCapture);
|
||||
|
||||
ToolStripMenuItem tsmiActiveMonitorCapture = new ToolStripMenuItem("Capture active monitor");
|
||||
tsmiActiveMonitorCapture.Image = Resources.monitor;
|
||||
tsmiActiveMonitorCapture.Click += (sender, e) => surface.Close(SurfaceResult.ActiveMonitor);
|
||||
tsmiActiveMonitorCapture.Click += (sender, e) => form.Close(SurfaceResult.ActiveMonitor);
|
||||
cmsContextMenu.Items.Add(tsmiActiveMonitorCapture);
|
||||
|
||||
ToolStripMenuItem tsmiMonitorCapture = new ToolStripMenuItem("Capture monitor");
|
||||
|
@ -429,8 +432,8 @@ private void CreateContextMenu()
|
|||
int index = i;
|
||||
tsmi.Click += (sender, e) =>
|
||||
{
|
||||
surface.MonitorIndex = index;
|
||||
surface.Close(SurfaceResult.Monitor);
|
||||
form.MonitorIndex = index;
|
||||
form.Close(SurfaceResult.Monitor);
|
||||
};
|
||||
tsmiMonitorCapture.DropDownItems.Add(tsmi);
|
||||
}
|
||||
|
@ -591,10 +594,14 @@ private void surface_MouseUp(object sender, MouseEventArgs e)
|
|||
CancelRegionSelection();
|
||||
EndRegionSelection();
|
||||
}
|
||||
else if (form.AnnotationEnabled && cmsContextMenu != null)
|
||||
{
|
||||
cmsContextMenu.Show(form, e.Location.Add(-10, -10));
|
||||
config.ShowMenuTip = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmsContextMenu.Show(surface, e.Location.Add(-10, -10));
|
||||
config.ShowMenuTip = false;
|
||||
form.Close(SurfaceResult.Close);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -730,7 +737,7 @@ private Point SnapPosition(Point posOnClick, Point posCurrent)
|
|||
|
||||
Rectangle newRect = CaptureHelpers.CreateRectangle(posOnClick, newPosition);
|
||||
|
||||
if (surface.ScreenRectangle0Based.Contains(newRect))
|
||||
if (form.ScreenRectangle0Based.Contains(newRect))
|
||||
{
|
||||
return newPosition;
|
||||
}
|
||||
|
@ -757,7 +764,7 @@ private void CheckHover()
|
|||
if (window != null && !window.Rectangle.IsEmpty)
|
||||
{
|
||||
hoverArea = CaptureHelpers.ScreenToClient(window.Rectangle);
|
||||
CurrentHoverRectangle = Rectangle.Intersect(surface.ScreenRectangle0Based, hoverArea);
|
||||
CurrentHoverRectangle = Rectangle.Intersect(form.ScreenRectangle0Based, hoverArea);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -842,8 +849,8 @@ private void EndRegionSelection()
|
|||
}
|
||||
else if (config.QuickCrop && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
surface.UpdateRegionPath();
|
||||
surface.Close(SurfaceResult.Region);
|
||||
form.UpdateRegionPath();
|
||||
form.Close(SurfaceResult.Region);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -857,8 +864,8 @@ private void EndRegionSelection()
|
|||
|
||||
if (config.QuickCrop && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
surface.UpdateRegionPath();
|
||||
surface.Close(SurfaceResult.Region);
|
||||
form.UpdateRegionPath();
|
||||
form.Close(SurfaceResult.Region);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -313,27 +313,28 @@ private static void AddExternalProgramFromRegistry(TaskSettings taskSettings, st
|
|||
|
||||
public static bool SelectRegion(out Rectangle rect, TaskSettings taskSettings)
|
||||
{
|
||||
return SurfaceForm.SelectRegion(out rect, taskSettings.CaptureSettings.SurfaceOptions);
|
||||
return RectangleRegionForm.SelectRegion(out rect, taskSettings.CaptureSettings.SurfaceOptions);
|
||||
}
|
||||
|
||||
public static PointInfo SelectPointColor()
|
||||
{
|
||||
using (RectangleRegionForm surface = new RectangleRegionForm())
|
||||
using (RectangleRegionForm form = new RectangleRegionForm())
|
||||
{
|
||||
surface.ScreenColorPickerMode = true;
|
||||
surface.Config.DetectWindows = false;
|
||||
surface.Config.UseDimming = false;
|
||||
surface.Config.ShowInfo = true;
|
||||
surface.Config.ShowMagnifier = true;
|
||||
surface.Config.ShowTips = false;
|
||||
surface.Prepare();
|
||||
surface.ShowDialog();
|
||||
form.ScreenColorPickerMode = true;
|
||||
form.AnnotationEnabled = false;
|
||||
form.Config.DetectWindows = false;
|
||||
form.Config.UseDimming = false;
|
||||
form.Config.ShowInfo = true;
|
||||
form.Config.ShowMagnifier = true;
|
||||
form.Config.ShowTips = false;
|
||||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
||||
if (surface.Result == SurfaceResult.Region)
|
||||
if (form.Result == SurfaceResult.Region)
|
||||
{
|
||||
PointInfo pointInfo = new PointInfo();
|
||||
pointInfo.Position = surface.CurrentPosition;
|
||||
pointInfo.Color = surface.CurrentColor;
|
||||
pointInfo.Position = form.CurrentPosition;
|
||||
pointInfo.Color = form.CurrentColor;
|
||||
return pointInfo;
|
||||
}
|
||||
}
|
||||
|
@ -346,6 +347,7 @@ public static Image GetRegionImage()
|
|||
using (RectangleRegionForm form = new RectangleRegionForm())
|
||||
using (Image screenshot = Screenshot.CaptureFullscreen())
|
||||
{
|
||||
form.AnnotationEnabled = false;
|
||||
form.SurfaceImage = screenshot;
|
||||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
|
@ -556,15 +558,16 @@ public static void OpenScreenColorPicker(TaskSettings taskSettings = null)
|
|||
|
||||
public static void OpenRuler()
|
||||
{
|
||||
using (RectangleRegionForm surface = new RectangleRegionForm())
|
||||
using (RectangleRegionForm form = new RectangleRegionForm())
|
||||
{
|
||||
surface.RulerMode = true;
|
||||
surface.Config.ShowTips = false;
|
||||
surface.Config.QuickCrop = false;
|
||||
surface.Config.ShowInfo = true;
|
||||
surface.ShapeManager.MinimumSize = 3;
|
||||
surface.Prepare();
|
||||
surface.ShowDialog();
|
||||
form.RulerMode = true;
|
||||
form.AnnotationEnabled = false;
|
||||
form.Config.ShowTips = false;
|
||||
form.Config.QuickCrop = false;
|
||||
form.Config.ShowInfo = true;
|
||||
form.ShapeManager.MinimumSize = 3;
|
||||
form.Prepare();
|
||||
form.ShowDialog();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue