/// <inheritdoc />
        public override void UpdateAndDraw(ControlBase control, TimeSpan time)
        {
            if (!(control is Button button))
            {
                return;
            }
            if (!button.IsDirty)
            {
                return;
            }

            RefreshTheme(control.FindThemeColors(), control);
            ColoredGlyph appearance = ControlThemeState.GetStateAppearance(control.State);

            int middle = button.Height != 1 ? button.Height / 2 : 0;

            var shadowBounds = new Rectangle(0, 0, button.Width, button.Height).WithPosition((2, 1));

            button.Surface.Clear();

            if (appearance.Matches(ControlThemeState.MouseDown))
            {
                middle += 1;

                // Redraw the control
                button.Surface.Fill(shadowBounds,
                                    appearance.Foreground,
                                    appearance.Background,
                                    appearance.Glyph, null);

                button.Surface.Print(shadowBounds.X, middle, button.Text.Align(button.TextAlignment, button.Width));
                button.MouseArea = new Rectangle(0, 0, button.Width + 2, button.Height + 1);
            }
            else
            {
                // Redraw the control
                button.Surface.Fill(new Rectangle(0, 0, button.Width, button.Height),
                                    appearance.Foreground,
                                    appearance.Background,
                                    appearance.Glyph, null);

                button.Surface.Print(0, middle, button.Text.Align(button.TextAlignment, button.Width));

                // Bottom line
                button.Surface.DrawLine(new Point(shadowBounds.X, shadowBounds.MaxExtentY),
                                        new Point(shadowBounds.MaxExtentX, shadowBounds.MaxExtentY), _shade.Glyph, _shade.Foreground, _shade.Background);

                // Side line 1
                button.Surface.DrawLine(new Point(shadowBounds.MaxExtentX - 1, shadowBounds.Y),
                                        new Point(shadowBounds.MaxExtentX, shadowBounds.MaxExtentY), _shade.Glyph, _shade.Foreground, _shade.Background);

                // Side line 2
                button.Surface.DrawLine(new Point(shadowBounds.MaxExtentX, shadowBounds.Y),
                                        new Point(shadowBounds.MaxExtentX, shadowBounds.MaxExtentY), _shade.Glyph, _shade.Foreground, _shade.Background);

                button.MouseArea = new Rectangle(0, 0, button.Width, button.Height);
            }

            button.IsDirty = false;
        }
Exemple #2
0
        /// <inheritdoc />
        public override void UpdateAndDraw(ControlBase control, TimeSpan time)
        {
            if (!control.IsDirty)
            {
                return;
            }
            if (!(control is Label label))
            {
                return;
            }

            RefreshTheme(control.FindThemeColors(), control);
            ColoredGlyph appearance;

            if (!UseNormalStateOnly)
            {
                appearance = ControlThemeState.GetStateAppearance(control.State);
            }
            else
            {
                appearance = ControlThemeState.Normal;
            }

            label.Surface.Fill(label.TextColor ?? appearance.Foreground, appearance.Background, 0);
            label.Surface.Print(0, 0, label.DisplayText.Align(label.Alignment, label.Surface.Width));

            IFont font  = label.AlternateFont ?? label.Parent?.Host?.ParentConsole?.Font;
            Color color = label.TextColor ?? appearance.Foreground;

            if (font != null)
            {
                if (label.ShowUnderline && label.ShowStrikethrough)
                {
                    label.Surface.SetDecorator(0, label.Surface.Width, GetStrikethrough(font, color), GetUnderline(font, color));
                }
                else if (label.ShowUnderline)
                {
                    label.Surface.SetDecorator(0, label.Surface.Width, GetUnderline(font, color));
                }
                else if (label.ShowStrikethrough)
                {
                    label.Surface.SetDecorator(0, label.Surface.Width, GetStrikethrough(font, color));
                }
            }

            label.IsDirty = false;
        }
        /// <inheritdoc />
        public override void UpdateAndDraw(ControlBase control, TimeSpan time)
        {
            if (!(control is ToggleButtonBase checkbox))
            {
                return;
            }
            if (!control.IsDirty)
            {
                return;
            }

            RefreshTheme(control.FindThemeColors(), control);

            ColoredGlyph appearance        = ControlThemeState.GetStateAppearance(checkbox.State);
            ColoredGlyph bracketAppearance = BracketsThemeState.GetStateAppearance(checkbox.State);
            ColoredGlyph iconAppearance    = IconThemeState.GetStateAppearance(checkbox.State);

            checkbox.Surface.Fill(appearance.Foreground, appearance.Background, null);

            // If we are doing text, then print it otherwise we're just displaying the button part
            if (checkbox.Width <= 2)
            {
                iconAppearance.CopyAppearanceTo(checkbox.Surface[0, 0]);
            }

            if (checkbox.Width >= 3)
            {
                bracketAppearance.CopyAppearanceTo(checkbox.Surface[0, 0]);
                iconAppearance.CopyAppearanceTo(checkbox.Surface[1, 0]);
                bracketAppearance.CopyAppearanceTo(checkbox.Surface[2, 0]);

                checkbox.Surface[0, 0].Glyph = LeftBracketGlyph;
                checkbox.Surface[2, 0].Glyph = RightBracketGlyph;
            }

            if (checkbox.Width >= 5)
            {
                checkbox.Surface.Print(4, 0, checkbox.Text.Align(checkbox.TextAlignment, checkbox.Width - 4));
            }

            checkbox.IsDirty = false;
        }
Exemple #4
0
        /// <inheritdoc />
        public override void UpdateAndDraw(ControlBase control, TimeSpan time)
        {
            if (!(control is DrawingArea drawingSurface))
            {
                return;
            }

            RefreshTheme(control.FindThemeColors(), control);

            if (!UseNormalStateOnly)
            {
                Appearance = ControlThemeState.GetStateAppearance(control.State);
            }
            else
            {
                Appearance = ControlThemeState.Normal;
            }

            drawingSurface.OnDraw?.Invoke(drawingSurface, time);
            control.IsDirty = false;
        }
        /// <inheritdoc />
        public override void UpdateAndDraw(ControlBase control, TimeSpan time)
        {
            if (SkipDrawing || !(control is Panel))
            {
                return;
            }

            RefreshTheme(control.FindThemeColors(), control);

            if (!UseNormalStateOnly)
            {
                Appearance = ControlThemeState.GetStateAppearance(control.State);
            }
            else
            {
                Appearance = ControlThemeState.Normal;
            }

            control.Surface.Fill(Appearance.Foreground, Appearance.Background, Appearance.Glyph);

            control.IsDirty = false;
        }
Exemple #6
0
        /// <inheritdoc />
        public override void UpdateAndDraw(ControlBase control, TimeSpan time)
        {
            if (!(control is Button button))
            {
                return;
            }
            if (!button.IsDirty)
            {
                return;
            }

            RefreshTheme(control.FindThemeColors(), control);
            ColoredGlyph appearance         = ControlThemeState.GetStateAppearance(control.State);
            ColoredGlyph endGlyphAppearance = EndsThemeState.GetStateAppearance(control.State);

            int middle = (button.Height != 1 ? button.Height / 2 : 0);

            // Redraw the control
            button.Surface.Fill(
                appearance.Foreground,
                appearance.Background,
                appearance.Glyph, null);

            if (ShowEnds && button.Width >= 3)
            {
                var lines = control.State == ControlStates.Disabled ? appearance.Foreground : _colorsLastUsed.Lines;
                button.Surface.Print(1, middle, (button.Text).Align(button.TextAlignment, button.Width - 2));
                button.Surface.SetCellAppearance(0, middle, endGlyphAppearance);
                button.Surface[0, middle].Glyph = LeftEndGlyph;
                button.Surface.SetCellAppearance(button.Width - 1, middle, endGlyphAppearance);
                button.Surface[button.Width - 1, middle].Glyph = RightEndGlyph;
            }
            else
            {
                button.Surface.Print(0, middle, button.Text.Align(button.TextAlignment, button.Width));
            }

            button.IsDirty = false;
        }
Exemple #7
0
        /// <inheritdoc />
        public override void UpdateAndDraw(ControlBase control, TimeSpan time)
        {
            if (!(control is ScrollBar scrollbar))
            {
                return;
            }

            if (!scrollbar.IsDirty)
            {
                return;
            }

            RefreshTheme(control.FindThemeColors(), control);

            ColoredGlyph appearance = ControlThemeState.GetStateAppearance(scrollbar.State);

            scrollbar.Surface.Clear();

            if (scrollbar.Orientation == Orientation.Horizontal)
            {
                scrollbar.Surface.SetCellAppearance(0, 0, appearance);
                scrollbar.Surface.SetGlyph(0, 0, StartButtonVerticalGlyph);

                scrollbar.Surface.SetCellAppearance(scrollbar.Width - 1, 0, appearance);
                scrollbar.Surface.SetGlyph(scrollbar.Width - 1, 0, EndButtonVerticalGlyph);

                if (scrollbar.SliderBarSize != 0)
                {
                    for (int i = 1; i <= scrollbar.SliderBarSize; i++)
                    {
                        scrollbar.Surface.SetCellAppearance(i, 0, appearance);
                        scrollbar.Surface.SetGlyph(i, 0, BarGlyph);
                    }

                    if (scrollbar.IsEnabled)
                    {
                        scrollbar.Surface.SetCellAppearance(1 + scrollbar.CurrentSliderPosition, 0, appearance);
                        scrollbar.Surface.SetGlyph(1 + scrollbar.CurrentSliderPosition, 0, SliderGlyph);
                    }
                }
            }
            else
            {
                scrollbar.Surface.SetCellAppearance(0, 0, appearance);
                scrollbar.Surface.SetGlyph(0, 0, StartButtonHorizontalGlyph);

                scrollbar.Surface.SetCellAppearance(0, scrollbar.Height - 1, appearance);
                scrollbar.Surface.SetGlyph(0, scrollbar.Height - 1, EndButtonHorizontalGlyph);

                if (scrollbar.SliderBarSize != 0)
                {
                    for (int i = 0; i < scrollbar.SliderBarSize; i++)
                    {
                        scrollbar.Surface.SetCellAppearance(0, i + 1, appearance);
                        scrollbar.Surface.SetGlyph(0, i + 1, BarGlyph);
                    }

                    if (scrollbar.IsEnabled)
                    {
                        scrollbar.Surface.SetCellAppearance(0, 1 + scrollbar.CurrentSliderPosition, appearance);
                        scrollbar.Surface.SetGlyph(0, 1 + scrollbar.CurrentSliderPosition, SliderGlyph);
                    }
                }
            }

            if (scrollbar.IsSliding)
            {
                scrollbar.MouseArea = new Rectangle(-2, -2, scrollbar.Width + 4, scrollbar.Height + 4);
            }
            else
            {
                scrollbar.MouseArea = new Rectangle(0, 0, scrollbar.Width, scrollbar.Height);
            }

            scrollbar.IsDirty = false;
        }