private void DrawHorizontalLine(Vec pos, int length, DrawBoxOptions options) { // figure out which glyphs to use Glyph left = Glyph.BarRight; Glyph middle = Glyph.BarLeftRight; Glyph right = Glyph.BarLeft; if ((options & DrawBoxOptions.DoubleLines) == DrawBoxOptions.DoubleLines) { middle = Glyph.BarDoubleLeftRight; if ((options & DrawBoxOptions.ContinueLines) == DrawBoxOptions.ContinueLines) { left = Glyph.BarDoubleLeftRight; right = Glyph.BarDoubleLeftRight; } else { left = Glyph.BarDoubleRight; right = Glyph.BarDoubleLeft; } } else { if ((options & DrawBoxOptions.ContinueLines) == DrawBoxOptions.ContinueLines) { left = Glyph.BarLeftRight; right = Glyph.BarLeftRight; } } // left edge WriteLineChar(pos, left); // right edge WriteLineChar(pos.OffsetX(length - 1), right); // middle foreach (Vec iter in Rect.Row(pos.X + 1, pos.Y, length - 2)) { WriteLineChar(iter, middle); } }
private void DrawVerticalLine(Vec pos, int length, DrawBoxOptions options) { // figure out which glyphs to use Glyph top = Glyph.BarDown; Glyph middle = Glyph.BarUpDown; Glyph bottom = Glyph.BarUp; if ((options & DrawBoxOptions.DoubleLines) == DrawBoxOptions.DoubleLines) { middle = Glyph.BarDoubleUpDown; if ((options & DrawBoxOptions.ContinueLines) == DrawBoxOptions.ContinueLines) { top = Glyph.BarDoubleUpDown; bottom = Glyph.BarDoubleUpDown; } else { top = Glyph.BarDoubleDown; bottom = Glyph.BarDoubleUp; } } else { if ((options & DrawBoxOptions.ContinueLines) == DrawBoxOptions.ContinueLines) { top = Glyph.BarUpDown; bottom = Glyph.BarUpDown; } } // top edge WriteLineChar(pos, top); // bottom edge WriteLineChar(pos.OffsetY(length - 1), bottom); // middle foreach (Vec iter in Rect.Column(pos.X, pos.Y + 1, length - 2)) { WriteLineChar(iter, middle); } }
public void DrawBox(DrawBoxOptions options) { Vec pos = Vec.Zero; if (Size.X == 1) { DrawVerticalLine(pos, Size.Y, options); } else if (Size.Y == 1) { DrawHorizontalLine(pos, Size.X, options); } else { // figure out which glyphs to use Glyph topLeft; Glyph topRight; Glyph bottomLeft; Glyph bottomRight; Glyph horizontal; Glyph vertical; if ((options & DrawBoxOptions.DoubleLines) == DrawBoxOptions.DoubleLines) { topLeft = Glyph.BarDoubleDownRight; topRight = Glyph.BarDoubleDownLeft; bottomLeft = Glyph.BarDoubleUpRight; bottomRight = Glyph.BarDoubleUpLeft; horizontal = Glyph.BarDoubleLeftRight; vertical = Glyph.BarDoubleUpDown; } else { topLeft = Glyph.BarDownRight; topRight = Glyph.BarDownLeft; bottomLeft = Glyph.BarUpRight; bottomRight = Glyph.BarUpLeft; horizontal = Glyph.BarLeftRight; vertical = Glyph.BarUpDown; } // top left corner WriteLineChar(pos, topLeft); // top right corner WriteLineChar(pos.OffsetX(Size.X - 1), topRight); // bottom left corner WriteLineChar(pos.OffsetY(Size.Y - 1), bottomLeft); // bottom right corner WriteLineChar(pos + Size - 1, bottomRight); // top and bottom edges foreach (Vec iter in Rect.Row(pos.X + 1, pos.Y, Size.X - 2)) { WriteLineChar(iter, horizontal); WriteLineChar(iter.OffsetY(Size.Y - 1), horizontal); } // left and right edges foreach (Vec iter in Rect.Column(pos.X, pos.Y + 1, Size.Y - 2)) { WriteLineChar(iter, vertical); WriteLineChar(iter.OffsetX(Size.X - 1), vertical); } } }