Introduce EventConnection and EventConnectionList for scoped Node event listeners that safely handle either emitter or observer destruction order.
Add ObservableValue and UIValueBinding for UI-independent observable state, along with a shared UIValueConverter policy used by both observable and raw data bindings.
Harden UIDataBind and UIProperty lifetime behavior, documentation, conversion, operators, and multi-widget handling. Preserve UIProperty as the lightweight option for UI-local owned values and UIDataBind for explicitly managed external values.
Use inline ordered callback storage to preserve registration-order dispatch without per-listener tree allocations.
Migrate submenu observation to scoped connections, safely clear ecode run configuration bindings before model erasure, and simplify the 7GUIs Counter example with UIProperty.
Add lifecycle, ordering, conversion, binding, and mutation regression tests.
- migrate themes, skins, icons, shaders, and shader programs to resource handles
- make UIThemeManager scene-owned and publish resources through scopes and catalogs
- retain shaders through their programs and expose non-owning GPU registries
- replace FrameBuffer and VertexBuffer factory ownership with unique pointers
- migrate engine, UI, tools, examples, tests, and eterm to the new ownership APIs
- remove the obsolete raw-owning ResourceManager templates
- document the completed Stage 7 architecture and remaining validation work
- add ownership, registry, and scoped shader-program coverage
- replace FontManager with per-ResourceScope FontService instances
- publish font factories into explicit or default resource scopes
- import default resources into UI scene scopes unless explicitly disabled
- keep related font faces strongly owned without hot-path weak_ptr locking
- add cached glyph advance queries without creating texture pages
- fix font picker preview ownership, cleanup, and rapid switching
- selectively evict TextLayout cache entries when referenced fonts unload
- document FontService, ResourceCatalog, and cache invalidation semantics
- migrate examples, tools, benchmarks, and tests to the scoped font API
- expand coverage for font ownership, texture release, and layout caching
- replace TextureAtlasManager and GlobalTextureAtlas with catalog-backed atlas ownership
- make TextureAtlas and TextureRegion creation return explicit resource handles
- let atlases retain their textures and regions through shared ownership
- add atlas publication, lookup, removal, and enumeration to ResourceCatalog and ResourceScope
- make TextureAtlasLoader publish atlases and regions into an explicit resource scope
- move theme atlas ownership into each theme resource catalog
- migrate maps, editors, examples, and tests away from the global atlas manager
- add scope-aware Sprite pattern-loading overloads while preserving default-scope compatibility
- fix re-entrant style-state invalidation when applying styles creates new widgets
- add atlas ownership, scoped Sprite lookup, and style-state regression coverage
- update the resource ownership plan and texture atlas editor launch configuration
Added control over the UISceneNode children and added setHighlightOverRecursive. This allows us to inspect nested UISceneNodes.
Fix hit-box bug when changing display.
Fix: Ctrl+W does not close the tab in Build Settings: Added Event::OnFocusWithin so the tab widget registers that event to setCurrenWidget in UICodeEditorSplitter.
Added cookies support (now it's possible to login in websites).
Improved redirect handling in HTTP client.
Fix in `Node::find*` and `UIWidget::find*` functions to ignore closing nodes.
Fix in Node min width and height handling with pixel scale different than 1.
Redesigned UIDropDownList to inherit from UIDropDown which is a base class to handle different types of drop-downs. Added UIDropDownModelList which is the same as UIDropDownList but uses a UIListView by default so it's a model/view based DropDown.
Fix crash when changing states of the buttons in the build panel.
Increased the default animations speed.