Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
                }
            }
        }