private void PaintLine(Graphics g, SnapshotIcon icon, SnapshotIcon child, bool highlight) { if (child.Index == -1) { return; } try { Rectangle leftItemBounds = icon.GetBounds(ItemBoundsPortion.Entire); Rectangle rightItemBounds = child.GetBounds(ItemBoundsPortion.Entire); leftItemBounds.Size = icon.DefaultSize; rightItemBounds.Size = child.DefaultSize; int left = leftItemBounds.Right + 6; int right = rightItemBounds.Left; int mid = (left + right) / 2; Point start = new Point(left, (leftItemBounds.Bottom + leftItemBounds.Top) / 2); Point end = new Point(right, (rightItemBounds.Top + rightItemBounds.Bottom) / 2); Point curveStart = start; curveStart.Offset(straightLineLength, 0); Point curveEnd = end; curveEnd.Offset(-straightLineLength, 0); Point control1 = new Point(mid + straightLineLength, start.Y); Point control2 = new Point(mid - straightLineLength, end.Y); Color lineColor = LinkLineColor; float lineWidth = LinkLineWidth; if (highlight) { lineColor = Color.ForestGreen; lineWidth = 2.5f; } using (Pen p = new Pen(lineColor, lineWidth)) { p.SetLineCap(LineCap.Round, LineCap.Custom, DashCap.Flat); p.CustomEndCap = linkLineArrow; g.SmoothingMode = SmoothingMode.AntiAlias; GraphicsPath path = new GraphicsPath(); path.AddLine(start, curveStart); path.AddBezier(curveStart, control1, control2, curveEnd); path.AddLine(curveEnd, end); g.DrawPath(p, path); } } catch (Exception) { //Debugger.Break(); } }
private void PaintLine(Graphics g, SnapshotIcon icon, SnapshotIcon child, bool highlight) { if (child.Index == -1) return; try { Rectangle leftItemBounds = icon.GetBounds(ItemBoundsPortion.Entire); Rectangle rightItemBounds = child.GetBounds(ItemBoundsPortion.Entire); leftItemBounds.Size = icon.DefaultSize; rightItemBounds.Size = child.DefaultSize; int left = leftItemBounds.Right + 6; int right = rightItemBounds.Left; int mid = (left + right) / 2; Point start = new Point(left, (leftItemBounds.Bottom + leftItemBounds.Top) / 2); Point end = new Point(right, (rightItemBounds.Top + rightItemBounds.Bottom) / 2); Point curveStart = start; curveStart.Offset(straightLineLength, 0); Point curveEnd = end; curveEnd.Offset(-straightLineLength, 0); Point control1 = new Point(mid + straightLineLength, start.Y); Point control2 = new Point(mid - straightLineLength, end.Y); Color lineColor = LinkLineColor; float lineWidth = LinkLineWidth; if (highlight) { lineColor = Color.ForestGreen; lineWidth = 2.5f; } using (Pen p = new Pen(lineColor, lineWidth)) { p.SetLineCap(LineCap.Round, LineCap.Custom, DashCap.Flat); p.CustomEndCap = linkLineArrow; g.SmoothingMode = SmoothingMode.AntiAlias; GraphicsPath path = new GraphicsPath(); path.AddLine(start, curveStart); path.AddBezier(curveStart, control1, control2, curveEnd); path.AddLine(curveEnd, end); g.DrawPath(p, path); } } catch (Exception) { //Debugger.Break(); } }