You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
43 lines
1.2 KiB
4 years ago
|
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)
|