Renderovací pipeline
TUIX renderuje přes nativní buffery. Každý objekt má buffer, buildry vyplňují pixelová data, kompozitor řeší viditelnost a vrstvení a renderer posílá výstup do terminálu.
Fáze pipeline
- Načíst a směrovat input snapshoty.
- Vyřešit velikost terminálu, modifikátory objektů, parent layout, viewport offsety a explicitní layout override.
- Podle potřeby zavolat builder resize/layout/event/content callbacky.
- Složit root a child buffery podle z-indexu, parent traversal, viewport clippingu a modal pravidel.
- Vygenerovat hitmapu používanou pro výběr myší.
- Vyrenderovat rozdíly viditelné v terminálu.
Řešení geometrie
Základní geometrie vychází z width_mod, height_mod, margin_top_mod a margin_left_mod. Layout parenty pak mohou přepsat obdélníky dětí zápisem layout rectů nebo grid placement dat. Scroll kontejnery a viewport widgety přidávají offsety a clipping v prostoru obsahu.
Vlastnictví pixelů
v0.5 zpřísňuje vlastnictví pixelů pomocí TuixBuffer.pixels_owned a bezpečnější obsluhy dočasných bufferů vrácených buildery. Buildry mohou držet persistentní pixel buffery nebo vracet dočasné pixely, které core zkopíruje do vlastního úložiště.
Viewport-aware kompozice
Viewport widgety vystavují callbacky pro offset, insets a velikost obsahu. Kompozitor tyto hodnoty používá pro clipping child bufferů a pro to, aby hitmap picking odpovídal viditelnému obsahu včetně odscrollovaných dětí.
Hitmap picking
Frame-local hitmapa mapuje terminálové buňky zpět na UID nejvrchnějších viditelných bufferů. Routování vstupu ji používá před builder dispatch, takže kliknutí myší sledují skutečné pořadí kreslení a viewport clipping.
Stabilita diffu
Textový a halfblock renderer porovnávají terminálem viditelný ANSI barevný výstup místo nestabilních mezihodnot barev. Tím se snižují zbytečné redraw při ekvivalentních barvách procházejících různými interními cestami.