56 static auto get()
noexcept -> UISystem&;
58 static auto exists()
noexcept -> bool;
67 auto createContext(std::string_view name, glm::ivec2 dimensions, std::optional<float> fixed_dp_ratio = std::nullopt)
69 void destroyContext(Rml::Context* context);
71 auto loadFontFace(std::string_view uri,
bool fallback =
false) -> bool;
78 auto globalStyleUris()
const -> std::vector<std::string>;
83 auto colorFromSchemes(std::string_view name)
const -> std::optional<glm::vec4>;
85 auto colorHex(std::string_view name)
const -> std::optional<std::string>;
88 std::vector<const assets::Localization*> texts;
89 std::vector<const assets::ImageLocalization*> images;
94 void popLocalizationScope();
102 auto language() const -> const std::
string& {
106 void setLanguage(std::string language);
107 void reloadAllDocuments();
110 auto translate(std::string_view input)
const -> std::optional<std::string>;
112 auto lookupLocalizationRaw(std::string_view
id)
const -> std::optional<std::string>;
115 auto localizedImage(std::string_view
id)
const -> std::string;
132 void registerContextOwner(Rml::Context* context,
toast::Node* owner);
133 void unregisterContextOwner(Rml::Context* context);
136 auto ownerForContext(Rml::Context* context)
const ->
toast::Node*;
139 auto panels() ->
const std::vector<toast::Panel*>& {
144 auto worldPanels() ->
const std::vector<toast::Panel3D*>& {
145 return m_world_panels;
148 void applyDpRatio(
float ratio);
149 void setSDLWindow(
void* window);
152 auto renderInterface() -> RenderInterface_VK* {
153 return m_render_interface.get();
158 auto currentLanguage() const -> std::
string;
160 static inline UISystem* instance =
nullptr;
162 std::unique_ptr<UIFileInterface> m_file_interface;
163 std::unique_ptr<UISystemInterface> m_system_interface;
164 std::unique_ptr<RenderInterface_VK> m_render_interface;
165 std::unique_ptr<UIInputRouter> m_input_router;
166 event::Listener m_asset_listener;
168 float m_dp_ratio = 1.0f;
170 uint64_t m_next_context_id = 1;
171 uint64_t m_frame_counter = 0;
173 std::vector<toast::Panel*> m_panels;
174 std::vector<toast::Panel3D*> m_world_panels;
176 std::vector<Rml::Context*> m_screen_contexts;
177 std::unordered_map<Rml::Context*, toast::Node*> m_context_owners;
178 std::unordered_set<Rml::Context*> m_display_density_contexts;
180 std::vector<assets::Handle<assets::UIStyle>> m_global_styles;
181 std::vector<assets::Handle<assets::ColorScheme>> m_global_schemes;
182 std::unordered_map<uint64_t,
size_t> m_global_style_refs;
183 std::unordered_map<uint64_t,
size_t> m_global_scheme_refs;
184 std::unordered_set<std::
string> m_loaded_fonts;
186 std::
string m_language;
187 std::vector<assets::Handle<assets::Localization>> m_global_localizations;
188 std::vector<assets::Handle<assets::ImageLocalization>> m_global_image_localizations;
189 std::unordered_map<uint64_t,
size_t> m_global_localization_refs;
190 std::unordered_map<uint64_t,
size_t> m_global_image_localization_refs;
193 bool m_documents_reload_pending = false;
194 bool m_stylesheet_cache_dirty = false;
197 std::mutex m_deferred_mutex;
198 std::vector<std::pair<toast::Node*, std::function<
void()>>> m_deferred_setups;