namespace Terminal.Gui; public partial class View { #region Drawing Primitives /// Moves the drawing cursor to the specified -relative location in the view. /// /// /// If the provided coordinates are outside the visible content area, this method does nothing. /// /// /// The top-left corner of the visible content area is ViewPort.Location. /// /// /// Column (viewport-relative). /// Row (viewport-relative). public bool Move (int col, int row) { if (Driver is null || Driver?.Rows == 0) { return false; } if (col < 0 || row < 0 || col >= Viewport.Width || row >= Viewport.Height) { return false; } Point screen = ViewportToScreen (new Point (col, row)); Driver?.Move (screen.X, screen.Y); return true; } /// Draws the specified character in the specified viewport-relative column and row of the View. /// /// If the provided coordinates are outside the visible content area, this method does nothing. /// /// /// The top-left corner of the visible content area is ViewPort.Location. /// /// Column (viewport-relative). /// Row (viewport-relative). /// The Rune. public void AddRune (int col, int row, Rune rune) { if (Move (col, row)) { Driver?.AddRune (rune); } } /// Utility function to draw strings that contain a hotkey. /// String to display, the hotkey specifier before a letter flags the next letter as the hotkey. /// Hot color. /// Normal color. /// /// /// The hotkey is any character following the hotkey specifier, which is the underscore ('_') character by /// default. /// /// The hotkey specifier can be changed via /// public void DrawHotString (string text, Attribute hotColor, Attribute normalColor) { Rune hotkeySpec = HotKeySpecifier == (Rune)0xffff ? (Rune)'_' : HotKeySpecifier; SetAttribute (normalColor); foreach (Rune rune in text.EnumerateRunes ()) { if (rune == new Rune (hotkeySpec.Value)) { SetAttribute (hotColor); continue; } Application.Driver?.AddRune (rune); SetAttribute (normalColor); } } /// /// Utility function to draw strings that contains a hotkey using a and the "focused" /// state. /// /// String to display, the underscore before a letter flags the next letter as the hotkey. /// /// If set to this uses the focused colors from the color scheme, otherwise /// the regular ones. /// public void DrawHotString (string text, bool focused) { if (focused) { DrawHotString (text, GetHotFocusColor (), GetFocusColor ()); } else { DrawHotString ( text, Enabled ? GetHotNormalColor () : ColorScheme!.Disabled, Enabled ? GetNormalColor () : ColorScheme!.Disabled ); } } /// Fills the specified -relative rectangle with the specified color. /// The Viewport-relative rectangle to clear. /// The color to use to fill the rectangle. If not provided, the Normal background color will be used. public void FillRect (Rectangle rect, Color? color = null) { if (Driver is null) { return; } Region prevClip = SetClip (); Rectangle toClear = ViewportToScreen (rect); Attribute prev = SetAttribute (new (color ?? GetNormalColor ().Background)); Driver.FillRect (toClear); SetAttribute (prev); Driver.Clip = prevClip; } #endregion Drawing Primitives }