diff options
author | crupest <crupest@outlook.com> | 2021-05-10 19:34:01 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-05-10 19:34:01 +0800 |
commit | 43a1883ac80ce3ff4782cd74e5ad16a03887c2aa (patch) | |
tree | daa3c374813f478e0ce99dfca858393b6ad95a3a /include | |
parent | ae5042599688af2d8b462e49e3cd103b6ec92fe9 (diff) | |
download | cru-43a1883ac80ce3ff4782cd74e5ad16a03887c2aa.tar.gz cru-43a1883ac80ce3ff4782cd74e5ad16a03887c2aa.tar.bz2 cru-43a1883ac80ce3ff4782cd74e5ad16a03887c2aa.zip |
...
Diffstat (limited to 'include')
-rw-r--r-- | include/cru/common/StringUtil.hpp | 5 | ||||
-rw-r--r-- | include/cru/platform/Color.hpp | 3 | ||||
-rw-r--r-- | include/cru/ui/ThemeManager.hpp | 27 | ||||
-rw-r--r-- | include/cru/ui/UiManager.hpp | 8 | ||||
-rw-r--r-- | include/cru/ui/render/ScrollBar.hpp | 10 |
5 files changed, 40 insertions, 13 deletions
diff --git a/include/cru/common/StringUtil.hpp b/include/cru/common/StringUtil.hpp index 62999d53..912106c3 100644 --- a/include/cru/common/StringUtil.hpp +++ b/include/cru/common/StringUtil.hpp @@ -145,4 +145,9 @@ gsl::index Utf16PreviousWord(std::u16string_view str, gsl::index position, bool* is_space = nullptr); gsl::index Utf16NextWord(std::u16string_view str, gsl::index position, bool* is_space = nullptr); + +char16_t ToLower(char16_t c); +char16_t ToUpper(char16_t c); +std::u16string ToLower(std::u16string_view s); +std::u16string ToUpper(std::u16string_view s); } // namespace cru diff --git a/include/cru/platform/Color.hpp b/include/cru/platform/Color.hpp index d1a9b678..efa02848 100644 --- a/include/cru/platform/Color.hpp +++ b/include/cru/platform/Color.hpp @@ -30,6 +30,9 @@ struct Color { return result; } + std::string ToUtf8String() const; + std::u16string ToString() const; + std::uint8_t red; std::uint8_t green; std::uint8_t blue; diff --git a/include/cru/ui/ThemeManager.hpp b/include/cru/ui/ThemeManager.hpp index c9e17680..1da29a0e 100644 --- a/include/cru/ui/ThemeManager.hpp +++ b/include/cru/ui/ThemeManager.hpp @@ -2,26 +2,49 @@ #include "Base.hpp" #include "cru/common/Base.hpp" #include "cru/common/Event.hpp" +#include "cru/platform/graphics/Brush.hpp" #include <boost/property_tree/ptree.hpp> #include <cstddef> +#include <memory> +#include <stdexcept> +#include <string_view> +#include <unordered_map> 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; + ~ThemeManager() override = default; IEvent<std::nullptr_t>* ThemeResourceChangeEvent() { return &theme_resource_change_event_; } + gsl::not_null<std::shared_ptr<platform::graphics::IBrush>> GetBrush( + std::u16string key); + + private: + void Init(); + private: Event<std::nullptr_t> theme_resource_change_event_; - boost::property_tree::iptree theme_tree_; + boost::property_tree::ptree theme_tree_; + std::unordered_map<std::u16string, + std::shared_ptr<platform::graphics::IBrush>> + brushes_; }; } // namespace cru::ui diff --git a/include/cru/ui/UiManager.hpp b/include/cru/ui/UiManager.hpp index b9af0065..10b12e87 100644 --- a/include/cru/ui/UiManager.hpp +++ b/include/cru/ui/UiManager.hpp @@ -4,7 +4,6 @@ #include "controls/Base.hpp" #include "cru/platform/graphics/Brush.hpp" #include "cru/ui/helper/ClickDetector.hpp" -#include "render/ScrollBar.hpp" #include "style/StyleRuleSet.hpp" #include <gsl/pointers> @@ -23,13 +22,6 @@ struct ThemeResources { style::StyleRuleSet text_box_style; style::StyleRuleSet menu_item_style; - - std::shared_ptr<platform::graphics::IBrush> scroll_bar_colllapsed_thumb_brush; - std::unordered_map< - render::ScrollBarBrushUsageKind, - std::unordered_map<helper::ClickState, - std::shared_ptr<platform::graphics::IBrush>>> - scroll_bar_brushes; }; class UiManager : public Object { diff --git a/include/cru/ui/render/ScrollBar.hpp b/include/cru/ui/render/ScrollBar.hpp index f72aef9b..8f18c821 100644 --- a/include/cru/ui/render/ScrollBar.hpp +++ b/include/cru/ui/render/ScrollBar.hpp @@ -38,6 +38,10 @@ enum class ScrollBarAreaKind { }; enum class ScrollBarBrushUsageKind { Arrow, ArrowBackground, Slot, Thumb }; +enum class ScrollBarBrushStateKind { Normal, Hover, Press, Disable }; + +std::u16string GenerateScrollBarThemeColorKey(ScrollBarBrushUsageKind usage, + ScrollBarBrushStateKind state); class ScrollBar : public Object { public: @@ -71,9 +75,9 @@ class ScrollBar : public Object { void SetCollapsedThumbBrush( std::shared_ptr<platform::graphics::IBrush> brush); gsl::not_null<std::shared_ptr<platform::graphics::IBrush>> GetBrush( - ScrollBarBrushUsageKind kind, helper::ClickState click_state); + ScrollBarBrushUsageKind usage, ScrollBarBrushStateKind state); // Brush could be nullptr to use the theme brush. - void SetBrush(ScrollBarBrushUsageKind kind, helper::ClickState click_state, + void SetBrush(ScrollBarBrushUsageKind usage, ScrollBarBrushStateKind state, std::shared_ptr<platform::graphics::IBrush> brush); protected: @@ -124,7 +128,7 @@ class ScrollBar : public Object { std::shared_ptr<platform::graphics::IBrush> collapsed_thumb_brush_; std::unordered_map< ScrollBarBrushUsageKind, - std::unordered_map<helper::ClickState, + std::unordered_map<ScrollBarBrushStateKind, std::shared_ptr<platform::graphics::IBrush>>> brushes_; |