aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-05-10 19:34:01 +0800
committercrupest <crupest@outlook.com>2021-05-10 19:34:01 +0800
commit43a1883ac80ce3ff4782cd74e5ad16a03887c2aa (patch)
treedaa3c374813f478e0ce99dfca858393b6ad95a3a /include/cru/ui
parentae5042599688af2d8b462e49e3cd103b6ec92fe9 (diff)
downloadcru-43a1883ac80ce3ff4782cd74e5ad16a03887c2aa.tar.gz
cru-43a1883ac80ce3ff4782cd74e5ad16a03887c2aa.tar.bz2
cru-43a1883ac80ce3ff4782cd74e5ad16a03887c2aa.zip
...
Diffstat (limited to 'include/cru/ui')
-rw-r--r--include/cru/ui/ThemeManager.hpp27
-rw-r--r--include/cru/ui/UiManager.hpp8
-rw-r--r--include/cru/ui/render/ScrollBar.hpp10
3 files changed, 32 insertions, 13 deletions
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_;