figlet sizes

This commit is contained in:
Will McGugan
2021-07-11 14:39:10 +01:00
parent 2802ce0a29
commit 022dbeec6c
4 changed files with 99 additions and 61 deletions

View File

@@ -1,4 +1,6 @@
from rich.align import Align
from rich.console import Console, ConsoleOptions, RenderResult
from rich.padding import Padding
from rich.text import Text
from textual.app import App
@@ -15,6 +17,31 @@ except ImportError:
font = Figlet(font="small")
class FigletText:
def __init__(self, text: str) -> None:
self.text = text
def __rich_console__(
self, console: Console, options: ConsoleOptions
) -> RenderResult:
size = min(options.max_width / 2, options.max_height)
text = self.text
if size <= 4:
yield Text(text, style="bold")
return
if size < 6:
font_name = "mini"
elif size < 8:
font_name = "small"
elif size < 10:
font_name = "standard"
else:
font_name = "big"
font = Figlet(font=font_name)
yield Text(font.renderText(text).rstrip("\n"), style="bold")
class CalculatorApp(App):
async def on_load(self, event: events.Load) -> None:
await self.bind("q,ctrl+c", "quit", "Quit")
@@ -24,18 +51,15 @@ class CalculatorApp(App):
layout = GridLayout(gap=(2, 1), gutter=1, align=("center", "center"))
await self.push_view(View(layout=layout))
layout.add_column("col", max_size=20, repeat=4)
layout.add_row("numbers", min_size=3, max_size=6)
layout.add_row("row", max_size=10, repeat=5)
layout.add_column("col", max_size=30, repeat=4)
layout.add_row("numbers")
layout.add_row("row", max_size=15, repeat=5)
layout.add_areas(
numbers="col1-start|col4-end,numbers", zero="col1-start|col2-end,row5"
)
def make_text(text: str) -> Text:
return Text(font.renderText(text).rstrip("\n"), style="bold")
def make_button(text: str) -> Button:
return Button(make_text(text), style="white on rgb(51,51,51)")
return Button(FigletText(text), style="white on rgb(51,51,51)")
buttons = {
name: make_button(name)
@@ -46,10 +70,11 @@ class CalculatorApp(App):
for name in "/X-+=":
buttons[name].style = "white on rgb(255,159,7)"
zero_text = make_text("0")
numbers = Align.right(FigletText("0"), vertical="middle")
layout.place(
*buttons.values(),
numbers=Static(Align.right(zero_text)),
numbers=Static(Padding(numbers, (0, 1)), style="white on rgb(51,51,51)"),
zero=make_button("0"),
)