コード例 #1
0
ファイル: Border.cs プロジェクト: jhorv/CsConsoleFormat
        public override void Render (ConsoleBuffer buffer)
        {
            if (buffer == null)
                throw new ArgumentNullException(nameof(buffer));

            Rect renderRectWithoutShadow = new Rect(RenderSize).Deflate(Thickness.Max(Shadow, 0));

            //base.Render(buffer);
            if (Background != null)
                buffer.FillBackgroundRectangle(renderRectWithoutShadow, Background.Value);
            buffer.FillForegroundRectangle(new Rect(RenderSize), EffectiveColor);

            if (!Shadow.IsEmpty) {
                // 3 2 2 1:     -1 -1 2 3:
                // ▄▄▄▄▄▄▄▄▄    oooo▄▄
                // █████████    oooo██
                // ███oooo██     █████
                // ███oooo██     █████
                // ▀▀▀▀▀▀▀▀▀     ▀▀▀▀▀
                Thickness shadowLineDelta = new Thickness(0, 1);
                Thickness shadowOffset = Thickness.Max(-Shadow - shadowLineDelta, 0);
                Rect shadowRect = new Rect(RenderSize).Deflate(shadowOffset);

                if (Shadow.Top != 0)
                    buffer.FillForegroundLine(shadowRect.TopLine, ShadowColor, Chars.LowerHalfBlock);
                if (Shadow.Bottom != 0)
                    buffer.FillForegroundLine(shadowRect.BottomLine, ShadowColor, Chars.UpperHalfBlock);
                buffer.FillForegroundRectangle(shadowRect.Deflate(shadowLineDelta), ShadowColor, Chars.FullBlock);
                if (ShadowColor == null && ShadowColorMap != null)
                    buffer.ApplyColorMap(shadowRect, ShadowColorMap,
                        (ref ConsoleChar c) => c.ForegroundColor = ShadowColorMap[(int)c.BackgroundColor]);
            }
            buffer.FillForegroundRectangle(renderRectWithoutShadow, EffectiveColor);
            buffer.DrawRectangle(renderRectWithoutShadow, EffectiveColor, Stroke);
        }
コード例 #2
0
ファイル: Border.cs プロジェクト: tig/CsConsoleFormat
        protected override void RenderOverride(ConsoleBuffer buffer)
        {
            if (buffer == null)
                throw new ArgumentNullException(nameof(buffer));

            Rect renderRectWithoutShadow = new Rect(RenderSize).Deflate(Thickness.Max(Shadow, 0));

            //base.Render(buffer);
            if (Background != null)
                buffer.FillBackgroundRectangle(renderRectWithoutShadow, Background.Value);
            buffer.FillForegroundRectangle(new Rect(RenderSize), EffectiveColor);

            if (!Shadow.IsEmpty) {
                // 3 2 2 1:     -1 -1 2 3:
                // ▄▄▄▄▄▄▄▄▄    oooo▄▄
                // █████████    oooo██
                // ███oooo██     █████
                // ███oooo██     █████
                // ▀▀▀▀▀▀▀▀▀     ▀▀▀▀▀
                Thickness shadowLineDelta = new Thickness(0, 1);
                Thickness shadowOffset = Thickness.Max(-Shadow - shadowLineDelta, 0);
                Rect shadowRect = new Rect(RenderSize).Deflate(shadowOffset);

                if (Shadow.Top != 0)
                    buffer.FillForegroundLine(shadowRect.TopLine, ShadowColor, Chars.LowerHalfBlock);
                if (Shadow.Bottom != 0)
                    buffer.FillForegroundLine(shadowRect.BottomLine, ShadowColor, Chars.UpperHalfBlock);
                buffer.FillForegroundRectangle(shadowRect.Deflate(shadowLineDelta), ShadowColor, Chars.FullBlock);
                if (ShadowColor == null && ShadowColorMap != null)
                    buffer.ApplyColorMap(shadowRect, ShadowColorMap,
                        (ref ConsoleChar c) => c.ForegroundColor = ShadowColorMap[(int)c.BackgroundColor]);
            }
            buffer.FillForegroundRectangle(renderRectWithoutShadow, EffectiveColor);
            buffer.DrawRectangle(renderRectWithoutShadow, EffectiveColor, Stroke);
        }
コード例 #3
0
ファイル: BlockElement.cs プロジェクト: tig/CsConsoleFormat
 protected virtual void RenderOverride([NotNull] ConsoleBuffer buffer)
 {
     if (buffer == null)
     {
         throw new ArgumentNullException(nameof(buffer));
     }
     if (Background != null)
     {
         buffer.FillBackgroundRectangle(new Rect(RenderSize), Background.Value);
     }
     buffer.FillForegroundRectangle(new Rect(RenderSize), EffectiveColor);
 }
コード例 #4
0
        protected override void RenderOverride(ConsoleBuffer buffer)
        {
            base.RenderOverride(buffer);
            if (_inlineSequence.IsEmpty)
            {
                return;
            }

            ConsoleColor color = EffectiveColor, background = EffectiveBackground;

            for (int y = 0; y < _lines.Count; y++)
            {
                List <InlineSegment> line = _lines[y];
                int length = GetLineLength(line);

                int offset = 0;
                if (TextAlign == TextAlign.Left || TextAlign == TextAlign.Justify)
                {
                    offset = 0;
                }
                else if (TextAlign == TextAlign.Center)
                {
                    offset = (ActualWidth - length) / 2;
                }
                else if (TextAlign == TextAlign.Right)
                {
                    offset = ActualWidth - length;
                }

                int x = offset;
                foreach (InlineSegment segment in line)
                {
                    if (segment.Color != null)
                    {
                        color = segment.Color.Value;
                    }
                    if (segment.Background != null)
                    {
                        background = segment.Background.Value;
                    }
                    if (segment.TextBuilder != null)
                    {
                        string text = segment.ToString();
                        buffer.FillBackgroundRectangle(x, y, text.Length, 1, background);
                        buffer.DrawString(x, y, color, text);
                        x += text.Length;
                    }
                }
            }
        }