Zpět na projekty
TUIX v0.6Beta

Naposledy aktualizováno: 2026-08-14

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

  1. Načíst a směrovat input snapshoty.
  2. Vyřešit velikost terminálu, modifikátory objektů, parent layout, viewport offsety a explicitní layout override.
  3. Podle potřeby zavolat builder resize/layout/event/content callbacky.
  4. Složit root a child buffery podle z-indexu, parent traversal, viewport clippingu, partial kompozice citlivé na masku vykreslení a modal pravidel.
  5. Vygenerovat hitmapu používanou pro výběr myší.
  6. 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.