Zpět na projekty
TUIX v0.1Alfa

Naposledy aktualizováno: 2026-05-20

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()
Limit jedné komponentyMulti-modal layout systém je stále ve vývoji. Lze renderovat pouze jednu komponentu. Plně je pro render implementován pouze typ 'choice'.

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)
BudoucnostPlán: plný multi-component render pro všechny typy, částečné aktualizace obrazovky a layout s detekcí kolizí.