private void DrawTools(Graphics g, Point point) { if (!SelectImageRect.Contains(_mouseDownPoint)) { return; } Color color = SelectedColor; switch (DrawStyle) { case DrawStyle.Rectangle: using (Pen pen = new Pen(color)) { g.DrawRectangle(pen, ImageBoundsToRect(Rectangle.FromLTRB(_mouseDownPoint.X, _mouseDownPoint.Y, point.X, point.Y))); } break; case DrawStyle.Ellipse: using (Pen pen = new Pen(color)) { g.DrawEllipse(pen, ImageBoundsToRect(Rectangle.FromLTRB(_mouseDownPoint.X, _mouseDownPoint.Y, point.X, point.Y))); } break; case DrawStyle.Arrow: using (Pen pen = new Pen(color)) { pen.EndCap = LineCap.ArrowAnchor; pen.EndCap = LineCap.Custom; pen.CustomEndCap = new AdjustableArrowCap(4, 4, true); g.DrawLine(pen, _mouseDownPoint, point); } break; case DrawStyle.Text: using (Pen pen = new Pen(color)) { pen.DashStyle = DashStyle.DashDot; pen.DashCap = DashCap.Round; pen.DashPattern = new[] { 9f, 3f, 3f, 3f }; g.DrawRectangle(pen, ImageBoundsToRect(Rectangle.FromLTRB(_mouseDownPoint.X, _mouseDownPoint.Y, point.X, point.Y))); } break; case DrawStyle.Line: if (LinePointList.Count < 2) { return; } Point[] points = LinePointList.ToArray(); using (Pen pen = new Pen(color)) { g.DrawLines(pen, points); } break; } }
private void AddOperate(Point point) { if (!SelectImageRect.Contains(_mouseDownPoint)) { return; } Color color = SelectedColor; switch (DrawStyle) { case DrawStyle.Rectangle: OperateManager.AddOperate( OperateType.DrawRectangle, color, ImageBoundsToRect(Rectangle.FromLTRB( _mouseDownPoint.X, _mouseDownPoint.Y, point.X, point.Y))); break; case DrawStyle.Ellipse: OperateManager.AddOperate( OperateType.DrawEllipse, color, ImageBoundsToRect(Rectangle.FromLTRB( _mouseDownPoint.X, _mouseDownPoint.Y, point.X, point.Y))); break; case DrawStyle.Arrow: Point[] points = new Point[] { _mouseDownPoint, point }; OperateManager.AddOperate( OperateType.DrawArrow, color, points); break; case DrawStyle.Text: ShowTextBox(); Rectangle textRect = ImageBoundsToRect(Rectangle.FromLTRB( _mouseDownPoint.X, _mouseDownPoint.Y, point.X, point.Y)); DrawTextData textData = new DrawTextData( string.Empty, base.Font, textRect); OperateManager.AddOperate( OperateType.DrawText, color, textData); break; case DrawStyle.Line: if (LinePointList.Count < 2) { return; } OperateManager.AddOperate( OperateType.DrawLine, color, LinePointList.ToArray()); LinePointList.Clear(); break; } }
protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if (textBox.Visible) { if (SelectImageRect.Contains(e.Location) || e.Button == MouseButtons.Left) { string text = textBox.Text; Font font = textBox.Font; Color color = textBox.ForeColor; HideTextBox(); if (OperateManager.OperateCount > 0) { OperateObject obj = OperateManager.OperateList[OperateManager.OperateCount - 1]; if (obj.OperateType == OperateType.DrawText) { DrawTextData textData = obj.Data as DrawTextData; if (textData != null && !textData.Completed) { if (string.IsNullOrEmpty(text)) { OperateManager.RedoOperate(); } else { obj.Color = color; textData.Font = font; textData.Text = text; textData.Completed = true; } } } } } Invalidate(); return; } if (e.Button == MouseButtons.Left) { if (SelectedImage) { if (SizeGrip != SizeGrip.None) { _mouseDown = true; _mouseDownPoint = e.Location; HideDrawToolsControl(); Invalidate(); } if (DrawStyle != DrawStyle.None) { if (SelectImageRect.Contains(e.Location)) { _mouseDown = true; _mouseDownPoint = e.Location; if (DrawStyle == DrawStyle.Line) { LinePointList.Add(_mouseDownPoint); } ClipCursor(false); } } } else { _mouseDown = true; _mouseDownPoint = e.Location; } } }