private HitAreaType DetectHit(MouseEventArgs e) { HitAreaType hit = HitAreaType.None; for (int i = 0; i < _Regions.Count; i++) { hit = _Regions[i].HitTest(e.Location); if (hit != HitAreaType.None) { _SelectedRegion = _Regions[i]; Cursor = _CursorsByHitType[(int)hit]; Refresh(); OnRegionSelected(i, _Regions[i].Rectangle); break; } } if (_SelectedRegion != null && hit == HitAreaType.None) { Cursor = Cursors.Default; _SelectedRegion = null; Refresh(); } return(hit); }
private void StartResizeRegion(MouseEventArgs e, HitAreaType hitType) { _EditMode = EditModeType.Resize; _EditRegionStartPoint = e.Location; _EditRegionRectangle = _SelectedRegion.ScreenRectangle; Cursor = _CursorsByHitType[(int)hitType]; _ResizeMode = hitType; Refresh(); }
private void MoveResizeRegion(MouseEventArgs e) { Rectangle rc = _EditRegionRectangle; int x = rc.X, y = rc.Y, w = rc.Width, h = rc.Height; if (_ResizeMode == HitAreaType.BottomLeft || _ResizeMode == HitAreaType.BottomMiddle || _ResizeMode == HitAreaType.BottomRight) { y = rc.Top; h = e.Location.Y - y; if (h < 0) { y = e.Location.Y; h = -h; switch (_ResizeMode) { case HitAreaType.BottomLeft: _ResizeMode = HitAreaType.TopLeft; break; case HitAreaType.BottomMiddle: _ResizeMode = HitAreaType.TopMiddle; break; case HitAreaType.BottomRight: _ResizeMode = HitAreaType.TopRight; break; default: break; } } } else if (_ResizeMode == HitAreaType.TopLeft || _ResizeMode == HitAreaType.TopMiddle || _ResizeMode == HitAreaType.TopRight) { y = e.Location.Y; h = rc.Bottom - y; if (h < 0) { y = rc.Top; h = -h; switch (_ResizeMode) { case HitAreaType.TopLeft: _ResizeMode = HitAreaType.BottomLeft; break; case HitAreaType.TopMiddle: _ResizeMode = HitAreaType.BottomMiddle; break; case HitAreaType.TopRight: _ResizeMode = HitAreaType.BottomRight; break; default: break; } } } if (_ResizeMode == HitAreaType.BottomRight || _ResizeMode == HitAreaType.TopRight || _ResizeMode == HitAreaType.MidRight) { x = rc.Left; w = e.Location.X - x; if (w < 0) { x = e.Location.X; w = -w; switch (_ResizeMode) { case HitAreaType.TopRight: _ResizeMode = HitAreaType.TopLeft; break; case HitAreaType.MidRight: _ResizeMode = HitAreaType.MidLeft; break; case HitAreaType.BottomRight: _ResizeMode = HitAreaType.BottomLeft; break; default: break; } } } else if (_ResizeMode == HitAreaType.BottomLeft || _ResizeMode == HitAreaType.TopLeft || _ResizeMode == HitAreaType.MidLeft) { x = e.Location.X; w = rc.Right - x; if (w < 0) { x = rc.Right; w = -w; switch (_ResizeMode) { case HitAreaType.TopLeft: _ResizeMode = HitAreaType.TopRight; break; case HitAreaType.MidLeft: _ResizeMode = HitAreaType.MidRight; break; case HitAreaType.BottomLeft: _ResizeMode = HitAreaType.BottomRight; break; default: break; } } } _EditRegionRectangle = new Rectangle(x, y, w, h); var refrect = CalcImageRectangle(); _EditRegionRectangle.Intersect(refrect); Refresh(); return; }