示例#1
0
        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);
        }
示例#2
0
 private void StartResizeRegion(MouseEventArgs e, HitAreaType hitType)
 {
     _EditMode             = EditModeType.Resize;
     _EditRegionStartPoint = e.Location;
     _EditRegionRectangle  = _SelectedRegion.ScreenRectangle;
     Cursor      = _CursorsByHitType[(int)hitType];
     _ResizeMode = hitType;
     Refresh();
 }
示例#3
0
        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;
        }