RenderEngine
Třída RenderEngine zajišťuje veškerý terminálový výstup. Je dostupná přes engine.render a kreslí komponenty pomocí Unicode box-drawing znaků a ANSI barevných kódů.
draw()
Hlavní vstupní bod renderu. Vyčistí terminál, spočítá layout přes LayoutEngine._compute_all() a poté vykreslí komponenty. Aktuálně podporuje přesně jednu komponentu — pro nula komponent vyhodí ValueError a pro více komponent NotImplementedError.
engine.render.draw()Box drawing
Komponenty se kreslí uvnitř Unicode box-drawing okrajů. Použité znaky: ┏ (levý horní), ┓ (pravý horní), ┗ (levý dolní), ┛ (pravý dolní), ━ (horizontální), ┃ (vertikální). Šířka boxu je layout.x znaků a okraje se aplikují pomocí mezer.
_wrap_and_center(text, max_width)
Interní metoda, která zalamuje dlouhý text do max_width a horizontálně centrová textový blok. Zpracovává explicitní nové řádky. Vrací seznam vypaddingovaných stringů, každý přesně max_width znaků široký.
_draw_buttons(*, obj, choices, max_width, max_height)
Renderuje interaktivní oblast tlačítek choice komponenty. Tlačítka jsou horizontálně centrovaná uvnitř boxu. Více tlačítek v jednom řádku je odděleno 4 mezerami. Aktuálně vybrané tlačítko (sledované selected_row a selected_index) je zvýrazněno pomocí barev selected_background a selected_text z aktivního stylu.
Dlouhé názvy tlačítek se automaticky rozdělí, když přesáhnou max_width - 4 znaky. Pro přesné měření Unicode textu se používá visual_width().
_draw_choice(obj, text)
Renderuje kompletní choice komponentu: oblast textu labelu nahoře, oblast tlačítek uprostřed a spodní okraj. Dostupná výška pro tlačítka se počítá jako layout.y - (počet řádků labelu) - 5 kvůli paddingu a okrajům. Po renderu zavolá engine.input.listen() a spustí input smyčku.
_refresh(*, selected_row, selected_index)
Spustí plný redraw s aktualizovaným stavem výběru. Vyčistí obrazovku a znovu zavolá draw(). Voláno z RenderEngine._handle_selection_change() i z InputHandleru při stisku navigačních kláves.
Zvýraznění výběru
Vybrané tlačítko se renderuje pomocí ANSI escape kódů background_color() a text_color(). Barvy se řeší nejdříve z custom_styles, poté se použije aktivní preset. Escape kód \x1b[0m resetuje formátování po zvýrazněném segmentu.
Aktuální omezení
- Plně je implementován pouze render single choice komponenty
- Typy progress_bar a text_input zatím nemají render metody
- Multi-modal layout systém vyhazuje NotImplementedError
- Plný redraw obrazovky při každé interakci (bez diferenciálních update)