1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#include "cru/ui/ThemeManager.hpp"
#include "Helper.hpp"
#include "cru/common/StringUtil.hpp"
#include "cru/platform/graphics/Brush.hpp"
#include "cru/platform/graphics/Factory.hpp"
#include "cru/platform/gui/UiApplication.hpp"
namespace cru::ui {
ThemeManager* ThemeManager::GetInstance() {
static ThemeManager instance;
return &instance;
}
ThemeManager::ThemeManager() { Init(); }
void ThemeManager::Init() {
theme_resource_map_.emplace(u"scrollbar.collapse-thumb.color",
colors::gray.WithAlpha(128).ToString());
theme_resource_map_.emplace(u"scrollbar.arrow.normal.color", u"#505050");
theme_resource_map_.emplace(u"scrollbar.arrow.hover.color", u"#505050");
theme_resource_map_.emplace(u"scrollbar.arrow.press.color", u"#ffffff");
theme_resource_map_.emplace(u"scrollbar.arrow.disable.color", u"#a3a3a3");
theme_resource_map_.emplace(u"scrollbar.arrow-background.normal.color",
u"#f1f1f1");
theme_resource_map_.emplace(u"scrollbar.arrow-background.hover.color",
u"#d2d2d2");
theme_resource_map_.emplace(u"scrollbar.arrow-background.press.color",
u"#787878");
theme_resource_map_.emplace(u"scrollbar.arrow-background.disable.color",
u"#f1f1f1");
theme_resource_map_.emplace(u"scrollbar.slot.normal.color", u"#f1f1f1");
theme_resource_map_.emplace(u"scrollbar.slot.hover.color", u"#f1f1f1");
theme_resource_map_.emplace(u"scrollbar.slot.press.color", u"#f1f1f1");
theme_resource_map_.emplace(u"scrollbar.slot.disable.color", u"#f1f1f1");
theme_resource_map_.emplace(u"scrollbar.thumb.normal.color", u"#c1c1c1");
theme_resource_map_.emplace(u"scrollbar.thumb.hover.color", u"#a8a8a8");
theme_resource_map_.emplace(u"scrollbar.thumb.press.color", u"#787878");
theme_resource_map_.emplace(u"scrollbar.thumb.disable.color", u"#c1c1c1");
}
gsl::not_null<std::shared_ptr<platform::graphics::IBrush>>
ThemeManager::GetBrush(StringView key) {
auto k = key.ToString();
auto cached_brush_iter = brushes_.find(k);
if (cached_brush_iter != brushes_.cend()) {
return cached_brush_iter->second;
}
auto color_string_iter = theme_resource_map_.find(k);
if (color_string_iter == theme_resource_map_.cend()) {
throw ThemeResourceKeyNotExistException(u"Key do not exist.");
}
auto color = Color::Parse(color_string_iter->second);
if (!color) throw BadThemeResourceException(u"Value is not a valid color.");
std::shared_ptr<platform::graphics::IBrush> brush =
GetUiApplication()->GetGraphicsFactory()->CreateSolidColorBrush(*color);
brushes_[k] = brush;
return brush;
}
} // namespace cru::ui
|