forked from varia/varia.website
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from typing import TYPE_CHECKING
|
|
|
|
from .measure import Measurement
|
|
from .segment import Segment
|
|
from .style import StyleType
|
|
|
|
if TYPE_CHECKING:
|
|
from .console import Console, ConsoleOptions, RenderResult, RenderableType
|
|
|
|
|
|
class Styled:
|
|
"""Apply a style to a renderable.
|
|
|
|
Args:
|
|
renderable (RenderableType): Any renderable.
|
|
style (StyleType): A style to apply across the entire renderable.
|
|
"""
|
|
|
|
def __init__(self, renderable: "RenderableType", style: "StyleType") -> None:
|
|
self.renderable = renderable
|
|
self.style = style
|
|
|
|
def __rich_console__(
|
|
self, console: "Console", options: "ConsoleOptions"
|
|
) -> "RenderResult":
|
|
style = console.get_style(self.style)
|
|
rendered_segments = console.render(self.renderable, options)
|
|
segments = Segment.apply_style(rendered_segments, style)
|
|
return segments
|
|
|
|
def __rich_measure__(
|
|
self, console: "Console", options: "ConsoleOptions"
|
|
) -> Measurement:
|
|
return Measurement.get(console, options, self.renderable)
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover
|
|
from rich import print
|
|
from rich.panel import Panel
|
|
|
|
panel = Styled(Panel("hello"), "on blue")
|
|
print(panel)
|