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
|
#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_tree_.put("scrollbar.collapse-thumb.color",
colors::gray.WithAlpha(128).ToString().ToUtf8());
theme_tree_.put("scrollbar.arrow.normal.color", "#505050");
theme_tree_.put("scrollbar.arrow.hover.color", "#505050");
theme_tree_.put("scrollbar.arrow.press.color", "#ffffff");
theme_tree_.put("scrollbar.arrow.disable.color", "#a3a3a3");
theme_tree_.put("scrollbar.arrow-background.normal.color", "#f1f1f1");
theme_tree_.put("scrollbar.arrow-background.hover.color", "#d2d2d2");
theme_tree_.put("scrollbar.arrow-background.press.color", "#787878");
theme_tree_.put("scrollbar.arrow-background.disable.color", "#f1f1f1");
theme_tree_.put("scrollbar.slot.normal.color", "#f1f1f1");
theme_tree_.put("scrollbar.slot.hover.color", "#f1f1f1");
theme_tree_.put("scrollbar.slot.press.color", "#f1f1f1");
theme_tree_.put("scrollbar.slot.disable.color", "#f1f1f1");
theme_tree_.put("scrollbar.thumb.normal.color", "#c1c1c1");
theme_tree_.put("scrollbar.thumb.hover.color", "#a8a8a8");
theme_tree_.put("scrollbar.thumb.press.color", "#787878");
theme_tree_.put("scrollbar.thumb.disable.color", "#c1c1c1");
}
gsl::not_null<std::shared_ptr<platform::graphics::IBrush>>
ThemeManager::GetBrush(StringView key) {
String k = ToLower(key);
auto cached_brush_iter = brushes_.find(k);
if (cached_brush_iter != brushes_.cend()) {
return cached_brush_iter->second;
}
auto color_string =
String::FromUtf8(theme_tree_.get<std::string>(key.ToUtf8()));
auto color = Color::Parse(color_string);
if (!color) throw BadThemeResourceException("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
|