EndRegionSelection improvements to fix hover issues

This commit is contained in:
Jaex 2016-05-23 01:42:52 +03:00
parent eb8a9e5a90
commit 5271a82b3f
2 changed files with 48 additions and 68 deletions

View file

@ -581,7 +581,7 @@ private void DrawCrosshair(Graphics g)
private void DrawMagnifier(Graphics g)
{
Point mousePos = InputManager.MousePosition0Based;
Rectangle currentScreenRect0Based = CaptureHelpers.ScreenToClient(Screen.FromPoint(InputManager.MousePosition).Bounds);
Rectangle currentScreenRect0Based = CaptureHelpers.GetActiveScreenBounds0Based();
int offsetX = 10, offsetY = 10, infoTextOffset = 0, infoTextPadding = 3;
Rectangle infoTextRect = Rectangle.Empty;
string infoText = string.Empty;

View file

@ -115,7 +115,7 @@ public BaseShape[] ValidRegions
{
get
{
return Regions.Where(x => IsAreaValid(x.Rectangle)).ToArray();
return Regions.Where(x => IsShapeAreaValid(x.Rectangle)).ToArray();
}
}
@ -123,7 +123,7 @@ public bool IsCurrentRegionValid
{
get
{
return IsAreaValid(CurrentRectangle);
return IsShapeAreaValid(CurrentRectangle);
}
}
@ -236,7 +236,7 @@ private void CreateContextMenu()
tsmiDeleteSelected = new ToolStripMenuItem("Delete selected object");
tsmiDeleteSelected.Image = Resources.layer__minus;
tsmiDeleteSelected.Click += (sender, e) => DeleteSelectedShape();
tsmiDeleteSelected.Click += (sender, e) => DeleteCurrentShape();
cmsContextMenu.Items.Add(tsmiDeleteSelected);
tsmiDeleteAll = new ToolStripMenuItem("Delete all objects");
@ -730,7 +730,7 @@ private void form_MouseUp(object sender, MouseEventArgs e)
{
if (IsCreating)
{
DeleteSelectedShape();
DeleteCurrentShape();
EndRegionSelection();
}
else if (form.Mode == RectangleRegionMode.Annotation && cmsContextMenu != null)
@ -738,7 +738,7 @@ private void form_MouseUp(object sender, MouseEventArgs e)
cmsContextMenu.Show(form, e.Location.Add(-10, -10));
Config.ShowMenuTip = false;
}
else if (IsAreaIntersect())
else if (IsShapeIntersect())
{
DeleteIntersectShape();
}
@ -812,7 +812,7 @@ private void form_KeyDown(object sender, KeyEventArgs e)
DeselectShape();
}
if (CurrentShape == null || CurrentShape != AreaIntersect())
if (CurrentShape == null || CurrentShape != GetShapeIntersect())
{
RegionSelection(InputManager.MousePosition0Based);
}
@ -868,7 +868,7 @@ private void form_KeyUp(object sender, KeyEventArgs e)
IsSnapResizing = false;
break;
case Keys.Delete:
DeleteSelectedShape();
DeleteCurrentShape();
if (IsCreating)
{
@ -920,17 +920,17 @@ private void RegionSelection(Point location)
return;
}
BaseShape shape = AreaIntersect(location);
PositionOnClick = location;
if (shape != null && shape.ShapeType == CurrentShapeType) // Select area
BaseShape shape = GetShapeIntersect(location);
if (shape != null && shape.ShapeType == CurrentShapeType) // Select shape
{
IsMoving = true;
CurrentShape = shape;
SelectShape();
}
else if (!IsCreating) // Create new area
else if (!IsCreating) // Create new shape
{
DeselectShape();
@ -967,44 +967,36 @@ private void EndRegionSelection()
{
if (!IsCurrentRegionValid)
{
DeleteSelectedShape();
shape.Rectangle = Rectangle.Empty;
CheckHover();
}
else if (Config.QuickCrop && IsCurrentShapeTypeRegion)
{
form.UpdateRegionPath();
form.Close(RegionResult.Region);
}
else
{
if (wasCreating)
if (IsCurrentHoverAreaValid)
{
shape.OnShapeCreated();
shape.Rectangle = CurrentHoverRectangle;
}
SelectShape();
return;
}
}
if (!CurrentHoverRectangle.IsEmpty)
{
AddShape(CurrentHoverRectangle);
if (Config.QuickCrop && IsCurrentShapeTypeRegion)
{
form.UpdateRegionPath();
form.Close(RegionResult.Region);
}
else
{
if (wasCreating)
else
{
shape.OnShapeCreated();
DeleteCurrentShape();
}
}
SelectShape();
if (shape != null)
{
if (Config.QuickCrop && IsCurrentShapeTypeRegion)
{
form.UpdateRegionPath();
form.Close(RegionResult.Region);
}
else
{
if (wasCreating)
{
shape.OnShapeCreated();
}
SelectShape();
}
}
}
}
@ -1127,11 +1119,11 @@ private void CheckHover()
if (!ResizeManager.IsCursorOnNode() && !IsCreating && !IsMoving && !IsResizing)
{
Rectangle hoverArea = GetAreaIntersectWithMouse();
BaseShape shape = GetShapeIntersect();
if (!hoverArea.IsEmpty)
if (shape != null && !shape.Rectangle.IsEmpty)
{
CurrentHoverRectangle = hoverArea;
CurrentHoverRectangle = shape.Rectangle;
}
else
{
@ -1139,7 +1131,7 @@ private void CheckHover()
if (window != null && !window.Rectangle.IsEmpty)
{
hoverArea = CaptureHelpers.ScreenToClient(window.Rectangle);
Rectangle hoverArea = CaptureHelpers.ScreenToClient(window.Rectangle);
CurrentHoverRectangle = Rectangle.Intersect(form.ScreenRectangle0Based, hoverArea);
}
}
@ -1216,7 +1208,7 @@ private void DeselectShape()
ResizeManager.Hide();
}
private void DeleteSelectedShape()
private void DeleteCurrentShape()
{
BaseShape shape = CurrentShape;
@ -1229,7 +1221,7 @@ private void DeleteSelectedShape()
private void DeleteIntersectShape()
{
BaseShape shape = AreaIntersect();
BaseShape shape = GetShapeIntersect();
if (shape != null)
{
@ -1244,12 +1236,12 @@ private void ClearAll()
DeselectShape();
}
private bool IsAreaValid(Rectangle rect)
private bool IsShapeAreaValid(Rectangle rect)
{
return !rect.IsEmpty && rect.Width >= MinimumSize && rect.Height >= MinimumSize;
}
public BaseShape AreaIntersect(Point mousePosition)
public BaseShape GetShapeIntersect(Point mousePosition)
{
for (int i = Shapes.Count - 1; i >= 0; i--)
{
@ -1264,26 +1256,14 @@ public BaseShape AreaIntersect(Point mousePosition)
return null;
}
public BaseShape AreaIntersect()
public BaseShape GetShapeIntersect()
{
return AreaIntersect(InputManager.MousePosition0Based);
return GetShapeIntersect(InputManager.MousePosition0Based);
}
public Rectangle GetAreaIntersectWithMouse()
public bool IsShapeIntersect()
{
BaseShape shape = AreaIntersect();
if (shape != null)
{
return shape.Rectangle;
}
return Rectangle.Empty;
}
public bool IsAreaIntersect()
{
return AreaIntersect() != null;
return GetShapeIntersect() != null;
}
public Rectangle CombineAreas()