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:
Jaex 2016-05-14 10:03:16 +03:00
parent 8491f318d8
commit 2eaf62b83d
5 changed files with 131 additions and 117 deletions

View file

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

View file

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

View file

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

View file

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

View file

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