#pragma once #include "Base.hpp" #include "cru/common/Base.hpp" #include "cru/common/Event.hpp" #include "cru/platform/graphics/Brush.hpp" #include #include #include #include #include #include namespace cru::ui { class BadThemeResourceException : public std::runtime_error { public: using std::runtime_error::runtime_error; }; class ThemeManager : public Object { public: static ThemeManager* GetInstance(); private: ThemeManager(); public: CRU_DELETE_COPY(ThemeManager) CRU_DELETE_MOVE(ThemeManager) ~ThemeManager() override = default; IEvent* ThemeResourceChangeEvent() { return &theme_resource_change_event_; } gsl::not_null> GetBrush( std::u16string key); private: void Init(); private: Event theme_resource_change_event_; boost::property_tree::ptree theme_tree_; std::unordered_map> brushes_; }; } // namespace cru::ui