Zpět na projekty
TUIX v0.3Beta

Naposledy aktualizováno: 2026-05-20

Scény

Scény jsou v TUIX nejvyšší kontejnery. Každý widget žije v nějaké scéně a v každém snímku se renderuje pouze aktivní scéna.

Co je scéna

Scéna je pojmenovaná kolekce bufferů widgetů. Interně každá scéna (TuixScene) drží seřazené pole ukazatelů TuixBuffer. Ve v0.3 mohou buffery tvořit parent/child stromy přes parent_uid a kompozice prochází traversal chainy se řazením podle z-index.

Názvy scén jsou bajtové řetězce (např. b"main", b"settings"). Jména se jednou uloží do globální registry a porovnávají se podle ukazatele, nikoli hodnoty, což dělá vyhledávání scén po prvním vytvoření O(1).

Životní cyklus scény

  1. Vytvořte scénu: scenes.init_scene(b"name")
  2. Nastavte ji jako aktivní: registry.registry.current_scene_name = b"name"
  3. Vytvořte widgety ve scéně: objects.create_object(builder, b"name", ...)
  4. Vyčistěte obsah widgetů (volitelné): scenes.clear_scene(b"name")
  5. Zničte scénu: scenes.free_scene(b"name")

Aktivní scéna

V jednu chvíli může být aktivní pouze jedna scéna. Aktivní scéna se nastavuje přes registry.registry.current_scene_name. Během main_loop() se renderují pouze widgety aktivní scény. Přepnutí scén je okamžité — nastavte vlastnost a další snímek vykreslí novou scénu.

# Switch between scenes
scenes.init_scene(b"menu")
scenes.init_scene(b"game")

# Show the menu scene
registry.registry.current_scene_name = b"menu"

# Later, switch to game scene
registry.registry.current_scene_name = b"game"

Hierarchie a rodičovství

Pomocí buffers.set_buffer_parent(scene_name, uid, parent_uid) připojte child buffer k parent bufferu. Ve v0.3 se parent relace validují: self-parent a cyklické vztahy se odmítají.

Při odstranění parent bufferu se children bezpečně pře-rodičují, aby se zachovala integrita scény.

Pořadí kompozice

Ve v0.3 se root buffery řadí podle z-index a každý parent/child podstrom se kompozituje jako traversal chain. To zachovává lokální vrstvení stromu a zároveň umožňuje globální řazení rootů ve scéně.

Metriky aktivity scény

v0.3 sleduje počitadla aktivity scén včetně frame counter polí jako last_active_frame a last_compacted_frame. Pro data-first údržbu a rozhodování o kompaktaci používejte scenes.get_scene_stats().

Správa paměti

Scény a jejich buffery se spravují ručně. Zavolejte scenes.free_scene() pro uvolnění všech bufferů i struktury scény. Zavolejte scenes.clear_scene() pro uvolnění všech bufferů, ale ponechte scénu alokovanou pro opětovné použití. Scény používají exponenciální růst (4 → 8 → 16 → ...) interních polí bufferů, aby minimalizovaly realokace.

Scény vždy uvolňujtePokud před ukončením nezavoláte free_scene(), dojde na C straně k úniku paměti bufferů scény.