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
}