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. Když engine renderuje snímek, kompozituje pouze buffery patřící aktuálně aktivní scéně.
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
- Vytvořte scénu: scenes.init_scene(b"name")
- Nastavte ji jako aktivní: registry.registry.current_scene_name = b"name"
- Vytvořte widgety ve scéně: objects.create_object(builder, b"name", ...)
- Vyčistěte obsah widgetů (volitelné): scenes.clear_scene(b"name")
- 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"Pořadí kompozice
Buffery ve scéně se kompozitují v pořadí vytvoření (malířský algoritmus). První vytvořený widget se kreslí jako první (pozadí) a pozdější widgety se kreslí navrch. Pokud se dva widgety překrývají, pixely pozdějšího přepíší pixely dřívějšího.
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.