protected virtual void DrawLines(Graphics g, Rectangle r, Pen p, Branch br, int glyphMidVertical)
{
Rectangle r2 = r;
r2.Width = PIXELS_PER_LEVEL;
// Vertical lines have to start on even points, otherwise the dotted line looks wrong.
// This is only needed if pen is dotted.
int top = r2.Top;
//if (p.DashStyle == DashStyle.Dot && (top & 1) == 0)
// top += 1;
// Draw lines for ancestors
int midX;
IList<Branch> ancestors = br.Ancestors;
foreach (Branch ancestor in ancestors) {
if (!ancestor.IsLastChild && !ancestor.IsOnlyBranch) {
midX = r2.Left + r2.Width / 2;
g.DrawLine(p, midX, top, midX, r2.Bottom);
}
r2.Offset(PIXELS_PER_LEVEL, 0);
}
// Draw lines for this branch
midX = r2.Left + r2.Width / 2;
// Horizontal line first
g.DrawLine(p, midX, glyphMidVertical, r2.Right, glyphMidVertical);
// Vertical line second
if (br.IsFirstBranch) {
if (!br.IsLastChild && !br.IsOnlyBranch)
g.DrawLine(p, midX, glyphMidVertical, midX, r2.Bottom);
} else {
if (br.IsLastChild)
g.DrawLine(p, midX, top, midX, glyphMidVertical);
else
g.DrawLine(p, midX, top, midX, r2.Bottom);
}
}