using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; using FastReport.Utils; namespace FastReport { partial class LineObject { #region Properties /// /// This property is not relevant to this class. /// [Browsable(false)] public override FillBase Fill { get { return base.Fill; } set { base.Fill = value; } } #endregion #region Private Methods private bool ShouldSerializeStartCap() { return !StartCap.Equals(new CapSettings()); } private bool ShouldSerializeEndCap() { return !EndCap.Equals(new CapSettings()); } #endregion #region Protected Methods /// protected override SelectionPoint[] GetSelectionPoints() { return new SelectionPoint[] { new SelectionPoint(AbsLeft, AbsTop, SizingPoint.LeftTop), new SelectionPoint(AbsLeft + Width, AbsTop + Height, SizingPoint.RightBottom) }; } #endregion #region Public Methods /// public override bool PointInObject(PointF point) { using (Pen pen = new Pen(Color.Black, 10 / Report?.Designer?.ZoomDpi ?? 1)) using (GraphicsPath path = new GraphicsPath()) { path.AddLine(AbsLeft, AbsTop, AbsRight, AbsBottom); return path.IsOutlineVisible(point, pen); } } /// public override void CheckNegativeSize(FRMouseEventArgs e) { // do nothing } /// public override SizeF GetPreferredSize() { return new SizeF(0, 0); } /// public override void HandleMouseMove(FRMouseEventArgs e) { base.HandleMouseMove(e); if (e.handled) e.cursor = Cursors.Cross; } /// public override void HandleMouseUp(FRMouseEventArgs e) { base.HandleMouseUp(e); if (e.mode == WorkspaceMode2.SelectionRect) { GraphicsPath path = new GraphicsPath(); Pen pen = null; if (Width != 0 && Height != 0) { path.AddLine(AbsLeft, AbsTop, AbsRight, AbsBottom); pen = new Pen(Color.Black, 10 / Report.Designer.ZoomDpi); path.Widen(pen); } else { float d = 5 / Report.Designer.ZoomDpi; if (Width == 0) { path.AddLine(AbsLeft - d, AbsTop, AbsRight - d, AbsBottom); path.AddLine(AbsRight - d, AbsBottom, AbsRight + d, AbsBottom); path.AddLine(AbsRight + d, AbsBottom, AbsRight + d, AbsTop); } else { path.AddLine(AbsLeft, AbsTop - d, AbsRight, AbsBottom - d); path.AddLine(AbsRight, AbsBottom - d, AbsRight, AbsBottom + d); path.AddLine(AbsRight, AbsBottom + d, AbsLeft, AbsTop + d); } path.CloseFigure(); } Region region = new Region(path); e.handled = region.IsVisible(e.selectionRect); path.Dispose(); region.Dispose(); if (pen != null) pen.Dispose(); } else if (e.mode == WorkspaceMode2.Size) { if (!Diagonal) { if (Math.Abs(Width) > Math.Abs(Height)) Height = 0; else Width = 0; } } } /// public override void OnBeforeInsert(int flags) { diagonal = flags != 0; if (flags == 3 || flags == 4) StartCap.Style = CapStyle.Arrow; if (flags == 2 || flags == 4) EndCap.Style = CapStyle.Arrow; } #endregion } }