Renderovací pipeline
TUIX renderuje přes nativní buffery. Každý objekt má buffer, buildry vyplňují pixelová data s internovanými UTF-8 symboly, kompozitor řeší viditelnost, maskování vykreslení a vrstvení a streamovací renderer posílá minimální ANSI diffy 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, partial kompozice citlivé na masku vykreslení a modal pravidel.
- Vygenerovat hitmapu používanou pro výběr myší.
- Vyrenderovat rozdíly viditelné v terminálu s optimalizací ANSI barev a kurzoru.
Ř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ů a návratová politika
v0.6 spravuje vlastnictví pixelů přes TuixPixelReturnPolicy (`TUIX_PIXEL_RETURN_PERSISTENT` nebo `TUIX_PIXEL_RETURN_TEMPORARY`) a `TuixBuffer.pixels_owned`. Buildery deklarují svoji politiku v deskriptoru `TuixBuilder`, což jádru umožňuje buď odkazovat na persistentní buffery builderu, nebo dočasné pixely zkopírovat do vlastního úložiště.
Dirty značení a generace překreslení
TUIX optimalizuje renderování snímků pomocí detailního sledování dirty stavů. Úprava widgetu označí generaci překreslení bufferu přes `tuix_buffer_mark_redraw_by_uid()`. Změna rozměrů nebo layoutu rodiče označí hierarchie dětí přes `tuix_buffer_mark_children_geometry_dirty_by_uid()`. Kompozitor kontroluje tyto příznaky generace, aby při průchodu zcela přeskočil nezměněné podstromy.
Unicode a terminálový výstup
TuixPixel používá internované neměnné UTF-8 symboly s metadaty o délce a šířce buňky. Renderer sanitizuje řídicí znaky terminálu (tabulátory, CR, raw escape sekvence) před odesláním diffů. Široké znaky (např. CJK ideogramy) zabírají 2 sloupce terminálu a jsou zpracovány bez narušení výpočtu řádkových diffů nebo pozice kurzoru. Terminal probing řídí funkce širokých glyfů podle schopností terminálu.
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.