43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from rich.style import Style as RichStyle
|
||
|
|
|
||
|
|
from textual.color import Color
|
||
|
|
from textual.content import Style
|
||
|
|
from textual.css.styles import RulesMap
|
||
|
|
from textual.strip import Strip
|
||
|
|
from textual.visual import RenderOptions, Visual
|
||
|
|
|
||
|
|
|
||
|
|
class Blank(Visual):
|
||
|
|
"""Draw solid background color."""
|
||
|
|
|
||
|
|
def __init__(self, color: Color | str = "transparent") -> None:
|
||
|
|
self._rich_style = RichStyle.from_color(bgcolor=Color.parse(color).rich_color)
|
||
|
|
|
||
|
|
def visualize(self) -> Blank:
|
||
|
|
return self
|
||
|
|
|
||
|
|
def get_optimal_width(self, rules: RulesMap, container_width: int) -> int:
|
||
|
|
return container_width
|
||
|
|
|
||
|
|
def get_height(self, rules: RulesMap, width: int) -> int:
|
||
|
|
return 1
|
||
|
|
|
||
|
|
def render_strips(
|
||
|
|
self, width: int, height: int | None, style: Style, options: RenderOptions
|
||
|
|
) -> list[Strip]:
|
||
|
|
"""Render the Visual into an iterable of strips. Part of the Visual protocol.
|
||
|
|
|
||
|
|
Args:
|
||
|
|
width: Width of desired render.
|
||
|
|
height: Height of desired render or `None` for any height.
|
||
|
|
style: The base style to render on top of.
|
||
|
|
options: Additional render options.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
An list of Strips.
|
||
|
|
"""
|
||
|
|
line_count = 1 if height is None else height
|
||
|
|
return [Strip.blank(width, self._rich_style)] * line_count
|