blob: 6c87ad32b54beb4f22a467c4ce2337ca4ccd1d33 (
plain)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#include "BorderStylerEditor.h"
#include <memory>
#include "cru/common/ClonablePtr.h"
#include "cru/platform/graphics/Brush.h"
#include "cru/platform/graphics/Factory.h"
#include "cru/platform/gui/UiApplication.h"
#include "cru/ui/style/ApplyBorderStyleInfo.h"
#include "cru/ui/style/Styler.h"
namespace cru::theme_builder::components::styler {
BorderStylerEditor::BorderStylerEditor() {
container_.AddChild(corner_radius_editor_.GetRootControl());
container_.AddChild(thickness_editor_.GetRootControl());
container_.AddChild(brush_editor_.GetRootControl());
container_.AddChild(foreground_brush_editor_.GetRootControl());
container_.AddChild(background_brush_editor_.GetRootControl());
// TODO: Add change listener.
}
BorderStylerEditor::~BorderStylerEditor() { container_.RemoveFromParent(); }
ClonablePtr<ui::style::BorderStyler> BorderStylerEditor::GetStyler() {
auto graphics_factory =
platform::gui::IUiApplication::GetInstance()->GetGraphicsFactory();
ui::style::ApplyBorderStyleInfo border_style;
if (corner_radius_editor_.IsEnabled()) {
border_style.border_radius =
corner_radius_editor_.GetEditor()->GetCornerRadius();
}
if (thickness_editor_.IsEnabled()) {
border_style.border_thickness =
thickness_editor_.GetEditor()->GetThickness();
}
if (brush_editor_.IsEnabled()) {
border_style.border_brush = graphics_factory->CreateSolidColorBrush(
brush_editor_.GetEditor()->GetColor());
}
if (foreground_brush_editor_.IsEnabled()) {
border_style.foreground_brush = graphics_factory->CreateSolidColorBrush(
foreground_brush_editor_.GetEditor()->GetColor());
}
if (background_brush_editor_.IsEnabled()) {
border_style.background_brush = graphics_factory->CreateSolidColorBrush(
background_brush_editor_.GetEditor()->GetColor());
}
return ui::style::BorderStyler::Create(border_style);
}
void BorderStylerEditor::SetStyler(
const ClonablePtr<ui::style::BorderStyler> &styler) {
Expects(styler);
auto border_style = styler->GetBorderStyle();
corner_radius_editor_.SetEnabled(border_style.border_radius.has_value());
if (border_style.border_radius.has_value()) {
corner_radius_editor_.GetEditor()->SetCornerRadius(
*border_style.border_radius);
}
thickness_editor_.SetEnabled(border_style.border_thickness.has_value());
if (border_style.border_thickness.has_value()) {
thickness_editor_.GetEditor()->SetThickness(*border_style.border_thickness);
}
brush_editor_.SetEnabled(border_style.border_brush.has_value());
if (border_style.border_brush.has_value()) {
brush_editor_.GetEditor()->SetColor(
std::dynamic_pointer_cast<platform::graphics::ISolidColorBrush>(
border_style.border_brush.value())
->GetColor());
}
foreground_brush_editor_.SetEnabled(
border_style.foreground_brush.has_value());
if (border_style.foreground_brush.has_value()) {
foreground_brush_editor_.GetEditor()->SetColor(
std::dynamic_pointer_cast<platform::graphics::ISolidColorBrush>(
border_style.foreground_brush.value())
->GetColor());
}
background_brush_editor_.SetEnabled(
border_style.background_brush.has_value());
if (border_style.background_brush.has_value()) {
background_brush_editor_.GetEditor()->SetColor(
std::dynamic_pointer_cast<platform::graphics::ISolidColorBrush>(
border_style.background_brush.value())
->GetColor());
}
}
} // namespace cru::theme_builder::components::styler
|