| | |
| | | MouseDown += Canvas_MouseDown; |
| | | MouseMove += Canvas_MouseMove; |
| | | MouseUp += Canvas_MouseUp; |
| | | |
| | | EventRouter.ChangeElementsMouseState -= OnElementChangeMouseState; |
| | | EventRouter.ChangeElementsMouseState += OnElementChangeMouseState; |
| | | } |
| | | |
| | | #region Event |
| | |
| | | MouseState = MouseState.New; |
| | | break; |
| | | case ElementState.Selected: |
| | | MouseState = MouseState.SelectedElement; |
| | | CurrentElementId = ele.ID; |
| | | Cursor = Cursors.Default; |
| | | break; |
| | | case ElementState.Moving: |
| | | MouseState = MouseState.MoveElement; |
| | | Cursor = Cursors.NoMove2D; |
| | | break; |
| | | case ElementState.MouseInSide: |
| | | MouseState = MouseState.InSideElement; |
| | |
| | | case ElementState.MouseHover: |
| | | MouseState = MouseState.HoverElement; |
| | | break; |
| | | |
| | | case ElementState.CanStretchLeft: |
| | | Cursor = Cursors.SizeWE; |
| | | break; |
| | | case ElementState.StretchingLeft: |
| | | MouseState = MouseState.StretchingLeft; |
| | | Cursor = Cursors.SizeWE; |
| | | break; |
| | | case ElementState.CanStretchBottom: |
| | | Cursor = Cursors.SizeNS; |
| | | break; |
| | | case ElementState.StretchingBottom: |
| | | MouseState = MouseState.StretchingBottom; |
| | | Cursor = Cursors.SizeNS; |
| | | break; |
| | | case ElementState.CanStretchRight: |
| | | Cursor = Cursors.SizeWE; |
| | | break; |
| | | case ElementState.StretchingRight: |
| | | MouseState = MouseState.StretchingRight; |
| | | Cursor = Cursors.SizeWE; |
| | | break; |
| | | case ElementState.CanStretchTop: |
| | | Cursor = Cursors.SizeNS; |
| | | break; |
| | | case ElementState.StretchingTop: |
| | | MouseState = MouseState.StretchingTop; |
| | | Cursor = Cursors.SizeNS; |
| | | break; |
| | | |
| | | case ElementState.CanStretchLeftLowerCorner: |
| | | Cursor = Cursors.SizeNESW; |
| | | break; |
| | | case ElementState.StretchingLeftLowerCorner: |
| | | MouseState = MouseState.StretchingLeftLowerCorner; |
| | | Cursor = Cursors.SizeNESW; |
| | | break; |
| | | case ElementState.CanStretchLeftUpperCorner: |
| | | Cursor = Cursors.SizeNWSE; |
| | | break; |
| | | case ElementState.StretchingLeftUpperCorner: |
| | | MouseState = MouseState.StretchingLeftUpperCorner; |
| | | Cursor = Cursors.SizeNWSE; |
| | | break; |
| | | case ElementState.CanStretchRightLowerCorner: |
| | | Cursor = Cursors.SizeNWSE; |
| | | break; |
| | | case ElementState.StretchingRightLowerCorner: |
| | | MouseState = MouseState.StretchingRightLowerCorner; |
| | | Cursor = Cursors.SizeNWSE; |
| | | break; |
| | | case ElementState.CanStretchRightUpperCorner: |
| | | Cursor = Cursors.SizeNESW; |
| | | break; |
| | | case ElementState.StretchingRightUpperCorner: |
| | | MouseState = MouseState.StretchingRightUpperCorner; |
| | | Cursor = Cursors.SizeNESW; |
| | | break; |
| | | default: |
| | | MouseState = MouseState.Normal; |
| | | break; |
| | | } |
| | | |
| | | if (MouseState == MouseState.SelectedElement) |
| | | { |
| | | CurrentElementId = ele.ID; |
| | | } |
| | | } |
| | | else |
| | |
| | | MouseState = MouseState.Normal; |
| | | } |
| | | } |
| | | |
| | | this.Invalidate(); |
| | | } |
| | | #endregion |
| | | |
| | |
| | | } |
| | | |
| | | Point startPoint, currentPoint; |
| | | bool _isMouseBtnPressing = false; |
| | | |
| | | private void Canvas_MouseDown(object sender, MouseEventArgs e) |
| | | { |
| | |
| | | |
| | | if (e.Button == MouseButtons.Left) |
| | | { |
| | | _isMouseBtnPressing = true; |
| | | |
| | | switch (MouseState) |
| | | { |
| | | case MouseState.Normal: |
| | | //if (DrawTemplate == null && string.IsNullOrWhiteSpace(CurrentElementId)) |
| | | //{ |
| | | // this.Cursor = Cursors.Hand; |
| | | // startPoint = e.Location; |
| | | //} |
| | | //else |
| | | //{ |
| | | // MouseState = MouseState.New; |
| | | //} |
| | | MouseState = MouseState.MovingAll; |
| | | startPoint = e.Location; |
| | | |
| | | //Elements.ForEach(ele => |
| | | foreach (IShapeElement ele in Elements) |
| | | { |
| | | ele.State = ElementState.Normal; |
| | | ele.OnMouseDown(p); |
| | | } |
| | | //); |
| | | break; |
| | | case MouseState.StretchingLeft: |
| | | break; |
| | | case MouseState.StretchingRight: |
| | | break; |
| | | case MouseState.StretchingUp: |
| | | case MouseState.StretchingTop: |
| | | break; |
| | | case MouseState.StretchingDown: |
| | | case MouseState.StretchingBottom: |
| | | break; |
| | | case MouseState.MoveElement: |
| | | break; |
| | | case MouseState.SelectedElement: |
| | | //MouseState = MouseState.MoveElement; |
| | | startPoint = e.Location; |
| | | |
| | | //Elements.ForEach(ele => |
| | | foreach (IShapeElement ele in Elements) |
| | | { |
| | | ele.OnMouseDown(p); |
| | | } |
| | | //); |
| | | break; |
| | | case MouseState.HoverElement: |
| | | case MouseState.InSideElement: |
| | |
| | | break; |
| | | } |
| | | |
| | | //if (DrawTemplate == null) |
| | | //{ |
| | | // this.Cursor = Cursors.Hand; |
| | | // startPoint = e.Location; |
| | | //} |
| | | |
| | | //Point p = ToMapPoint(e.Location); |
| | | |
| | | //Elements.ForEach(ele => |
| | | //{ |
| | | // ele.State = ElementState.Normal; |
| | | // ele.OnMouseDown(p); |
| | | //}); |
| | | |
| | | //DrawTemplate?.OnMouseDown(p); |
| | | foreach (IShapeElement ele in Elements) |
| | | { |
| | | ele.OnMouseDown(p); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void Canvas_MouseUp(object sender, MouseEventArgs e) |
| | | { |
| | | _isMouseBtnPressing = false; |
| | | switch (MouseState) |
| | | { |
| | | case MouseState.Normal: |
| | |
| | | break; |
| | | case MouseState.StretchingRight: |
| | | break; |
| | | case MouseState.StretchingUp: |
| | | case MouseState.StretchingTop: |
| | | break; |
| | | case MouseState.StretchingDown: |
| | | case MouseState.StretchingBottom: |
| | | break; |
| | | case MouseState.MoveElement: |
| | | //MouseState = MouseState.SelectedElement; |
| | |
| | | case MouseState.SelectionZoneDoing: |
| | | MouseState = MouseState.SelectionZone; |
| | | |
| | | //Elements.ForEach(ele => |
| | | foreach (IShapeElement ele in Elements) |
| | | { |
| | | if (ele.IsIntersect(_selectionRect)) |
| | |
| | | ele.State = ElementState.Selected; |
| | | } |
| | | } |
| | | //); |
| | | |
| | | break; |
| | | } |
| | |
| | | |
| | | Point p = ToMapPoint(e.Location); |
| | | DrawTemplate?.OnMouseUp(p); |
| | | //Elements.ForEach(ele => |
| | | foreach (IShapeElement ele in Elements) |
| | | { |
| | | ele.OnMouseUp(p); |
| | | } |
| | | //); |
| | | } |
| | | |
| | | private void Canvas_MouseMove(object sender, MouseEventArgs e) |
| | |
| | | switch (MouseState) |
| | | { |
| | | case MouseState.Normal: |
| | | //Elements.ForEach(u => |
| | | //{ |
| | | // u.OnMouseMove(p); |
| | | //}); |
| | | { |
| | | if (_isMouseBtnPressing) |
| | | { |
| | | currentPoint = e.Location; |
| | | Point p1 = ToMapPoint(startPoint); |
| | | Point p2 = ToMapPoint(currentPoint); |
| | | Matrix.Translate(p2.X - p1.X, p2.Y - p1.Y); |
| | | startPoint = e.Location; |
| | | } |
| | | } |
| | | break; |
| | | case MouseState.StretchingLeft: |
| | | break; |
| | | case MouseState.StretchingRight: |
| | | break; |
| | | case MouseState.StretchingUp: |
| | | case MouseState.StretchingTop: |
| | | break; |
| | | case MouseState.StretchingDown: |
| | | case MouseState.StretchingBottom: |
| | | break; |
| | | case MouseState.MoveElement: |
| | | //Elements.ForEach(ele => |
| | | foreach (IShapeElement ele in Elements) |
| | | { |
| | | ele.OnMouseMove(p); |
| | | } |
| | | //); |
| | | break; |
| | | case MouseState.HoverElement: |
| | | case MouseState.InSideElement: |
| | |
| | | case MouseState.Editing: |
| | | break; |
| | | case MouseState.MovingAll: |
| | | { |
| | | currentPoint = e.Location; |
| | | Point p1 = ToMapPoint(startPoint); |
| | | Point p2 = ToMapPoint(currentPoint); |
| | | Matrix.Translate(p2.X - p1.X, p2.Y - p1.Y); |
| | | startPoint = e.Location; |
| | | } |
| | | break; |
| | | case MouseState.SelectionZoneDoing: |
| | | { |
| | |
| | | break; |
| | | } |
| | | |
| | | //if (this.Cursor == Cursors.Hand) |
| | | //{ |
| | | // currentPoint = e.Location; |
| | | |
| | | // Point p1 = ToMapPoint(startPoint); |
| | | // Point p2 = ToMapPoint(currentPoint); |
| | | // Matrix.Translate(p2.X - p1.X, p2.Y - p1.Y); |
| | | // startPoint = e.Location; |
| | | //} |
| | | |
| | | //DisplayMouseLocation(e.Location); |
| | | Point mapPoint = ToMapPoint(e.Location); |
| | | Color color = Color.Transparent; |
| | | if (MAP != null && mapPoint.X > 0 && mapPoint.X < MAP.Width && mapPoint.Y > 0 && mapPoint.Y < MAP.Height) |
| | |
| | | |
| | | if (MouseState != MouseState.SelectionZoneDoing) |
| | | { |
| | | //Elements.ForEach(u => |
| | | foreach (IShapeElement ele in Elements) |
| | | { |
| | | ele.OnMouseMove(p); |
| | | } |
| | | //); |
| | | } |
| | | |
| | | Invalidate(); |
| | |
| | | { |
| | | switch (MouseState) |
| | | { |
| | | case MouseState.SelectedElement: |
| | | //case MouseState.SelectedElement: |
| | | case MouseState.HoverElement: |
| | | case MouseState.InSideElement: |
| | | case MouseState.MoveElement: |
| | |
| | | } |
| | | else |
| | | { |
| | | if (MouseState == MouseState.SelectedElement) |
| | | //if (MouseState == MouseState.SelectedElement) |
| | | { |
| | | MouseState = MouseState.Normal; |
| | | |
| | |
| | | #region 按键操作 |
| | | public void OnCanvasKeyPressed(object sender, KeyPressEventArgs e) |
| | | { |
| | | if (e.KeyChar == 27) //Esc |
| | | { |
| | | if (MouseState == MouseState.SelectedElement) |
| | | { |
| | | MouseState = MouseState.Normal; |
| | | //if (e.KeyChar == 27) //Esc |
| | | //{ |
| | | // //if (MouseState == MouseState.SelectedElement) |
| | | // { |
| | | // MouseState = MouseState.Normal; |
| | | |
| | | //Elements.ForEach(ele => |
| | | foreach (IShapeElement ele in Elements) |
| | | { |
| | | ele.State = ElementState.Normal; |
| | | } |
| | | //); |
| | | } |
| | | } |
| | | // //Elements.ForEach(ele => |
| | | // foreach (IShapeElement ele in Elements) |
| | | // { |
| | | // ele.State = ElementState.Normal; |
| | | // } |
| | | // //); |
| | | // } |
| | | //} |
| | | |
| | | Invalidate(); |
| | | //Invalidate(); |
| | | } |
| | | |
| | | public void OnCanvasKeyDown(object sender, KeyEventArgs e) |
| | |
| | | Elements.Remove(Elements.FirstOrDefault(u => u.ID == CurrentElementId)); |
| | | break; |
| | | case Keys.Escape: |
| | | if (MouseState == MouseState.SelectedElement) |
| | | //if (MouseState == MouseState.SelectedElement) |
| | | { |
| | | MouseState = MouseState.Normal; |
| | | |