Skip to content

Commit 92eee3f

Browse files
committed
Allow changing theme dynamically
1 parent 994552e commit 92eee3f

33 files changed

+154
-167
lines changed

examples/container_layout/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class MyNode : public Node {
1313
auto hbox_container = std::make_shared<HBoxContainer>();
1414
hbox_container->set_separation(8);
1515
hbox_container->set_position({100, 100});
16-
hbox_container->set_theme_bg(StyleBox());
16+
hbox_container->theme_override_bg = StyleBox();
1717
add_child(hbox_container);
1818

1919
for (int _ = 0; _ < 4; _++) {
@@ -39,7 +39,7 @@ class MyNode : public Node {
3939
auto vbox_container = std::make_shared<VBoxContainer>();
4040
vbox_container->set_separation(8);
4141
vbox_container->set_position({100, 300});
42-
vbox_container->set_theme_bg(StyleBox());
42+
vbox_container->theme_override_bg = StyleBox();
4343
add_child(vbox_container);
4444

4545
for (int _ = 0; _ < 4; _++) {
@@ -66,7 +66,7 @@ class MyNode : public Node {
6666
grid_container->set_separation(8);
6767
grid_container->set_position({600, 400});
6868
grid_container->set_column_limit(2);
69-
grid_container->set_theme_bg(StyleBox());
69+
grid_container->theme_override_bg = StyleBox();
7070
grid_container->set_item_shrinking(false);
7171
add_child(grid_container);
7272

examples/file_selection/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class MyNode : public Node {
1515
StyleBox new_bg;
1616
new_bg.bg_color = ColorU(27, 27, 27, 255);
1717
new_bg.corner_radius = 0;
18-
panel->set_theme_panel(new_bg);
18+
panel->theme_override_bg_ = new_bg;
1919
}
2020

2121
auto margin_container = std::make_shared<MarginContainer>();

examples/label_alignment/main.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,47 +19,47 @@ class MyNode : public Node {
1919
auto label = std::make_shared<Label>();
2020
label->set_custom_minimum_size({256, 64});
2121
label->set_horizontal_alignment(Alignment::Begin);
22-
label->set_theme_bg(StyleBox());
22+
label->theme_override_bg = StyleBox();
2323
vbox_container->add_child(label);
2424
}
2525

2626
{
2727
auto label = std::make_shared<Label>();
2828
label->set_custom_minimum_size({256, 64});
2929
label->set_horizontal_alignment(Alignment::Center);
30-
label->set_theme_bg(StyleBox());
30+
label->theme_override_bg = StyleBox();
3131
vbox_container->add_child(label);
3232
}
3333

3434
{
3535
auto label = std::make_shared<Label>();
3636
label->set_custom_minimum_size({256, 64});
3737
label->set_horizontal_alignment(Alignment::End);
38-
label->set_theme_bg(StyleBox());
38+
label->theme_override_bg = StyleBox();
3939
vbox_container->add_child(label);
4040
}
4141

4242
{
4343
auto label = std::make_shared<Label>();
4444
label->set_vertical_alignment(Alignment::Begin);
4545
label->set_custom_minimum_size({256, 64});
46-
label->set_theme_bg(StyleBox());
46+
label->theme_override_bg = StyleBox();
4747
vbox_container->add_child(label);
4848
}
4949

5050
{
5151
auto label = std::make_shared<Label>();
5252
label->set_vertical_alignment(Alignment::Center);
5353
label->set_custom_minimum_size({256, 64});
54-
label->set_theme_bg(StyleBox());
54+
label->theme_override_bg = StyleBox();
5555
vbox_container->add_child(label);
5656
}
5757

5858
{
5959
auto label = std::make_shared<Label>();
6060
label->set_vertical_alignment(Alignment::End);
6161
label->set_custom_minimum_size({256, 64});
62-
label->set_theme_bg(StyleBox());
62+
label->theme_override_bg = StyleBox();
6363
vbox_container->add_child(label);
6464
}
6565
}

src/nodes/scene_tree.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
#include "file_dialog.h"
66
#include "node.h"
77
#include "timer.h"
8-
#include "ui/button.h"
9-
#include "ui/check_button.h"
8+
#include "ui/button/button.h"
9+
#include "ui/button/check_button.h"
10+
#include "ui/button/menu_button.h"
11+
#include "ui/button/radio_button.h"
1012
#include "ui/container/box_container.h"
1113
#include "ui/container/collapse_container.h"
1214
#include "ui/container/grid_container.h"
@@ -15,11 +17,9 @@
1517
#include "ui/container/split_container.h"
1618
#include "ui/container/tab_container.h"
1719
#include "ui/label.h"
18-
#include "ui/menu_button.h"
1920
#include "ui/panel.h"
2021
#include "ui/popup_menu.h"
2122
#include "ui/progress_bar.h"
22-
#include "ui/radio_button.h"
2323
#include "ui/slider.h"
2424
#include "ui/spin_box.h"
2525
#include "ui/text_edit.h"
Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
#include <optional>
44

5-
#include "../../common/geometry.h"
6-
#include "../../resources/default_resource.h"
7-
#include "../../resources/vector_image.h"
5+
#include "../../../common/geometry.h"
6+
#include "../../../resources/default_resource.h"
7+
#include "../../../resources/vector_image.h"
88

99
namespace revector {
1010

@@ -13,22 +13,12 @@ Button::Button() {
1313

1414
auto default_theme = DefaultResource::get_singleton()->get_default_theme();
1515

16-
theme_normal = default_theme->button.styles["normal"];
17-
18-
theme_hovered = default_theme->button.styles["hovered"];
19-
20-
theme_pressed = default_theme->button.styles["pressed"];
21-
22-
theme_disabled = default_theme->button.styles["disabled"];
23-
2416
// Don't add the label as a child since it's not a normal node but part of the button.
2517
label = std::make_shared<Label>();
2618
label->set_text("Button");
2719
label->set_mouse_filter(MouseFilter::Ignore);
2820
label->set_horizontal_alignment(Alignment::Center);
2921
label->set_vertical_alignment(Alignment::Center);
30-
label->set_text_style(TextStyle{default_theme->button.colors["text"]});
31-
label->theme_background = StyleBox::from_empty();
3222
label->container_sizing.flag_h = ContainerSizingFlag::Fill;
3323

3424
icon_rect = std::make_shared<TextureRect>();
@@ -158,14 +148,18 @@ void Button::draw() {
158148
return;
159149
}
160150

151+
auto default_theme = DefaultResource::get_singleton()->get_default_theme();
152+
auto theme_normal = theme_override_normal.value_or(default_theme->button.styles["normal"]);
153+
auto theme_hovered = theme_override_hovered.value_or(default_theme->button.styles["hovered"]);
154+
auto theme_pressed = theme_override_pressed.value_or(default_theme->button.styles["pressed"]);
155+
auto theme_disabled = theme_override_disabled.value_or(default_theme->button.styles["disabled"]);
156+
161157
auto vector_server = VectorServer::get_singleton();
162158

163159
auto global_position = get_global_position();
164160

165161
icon_rect->set_texture(icon_normal_);
166162

167-
auto default_theme = DefaultResource::get_singleton()->get_default_theme();
168-
169163
if (disabled_) {
170164
label->set_text_style(TextStyle{default_theme->button.colors["text_disabled"]});
171165
} else {
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
#include <functional>
44

5-
#include "../../resources/style_box.h"
6-
#include "container/box_container.h"
7-
#include "container/margin_container.h"
8-
#include "label.h"
9-
#include "node_ui.h"
10-
#include "texture_rect.h"
5+
#include "../../../resources/style_box.h"
6+
#include "../container/box_container.h"
7+
#include "../container/margin_container.h"
8+
#include "../label.h"
9+
#include "../node_ui.h"
10+
#include "../texture_rect.h"
1111

1212
namespace revector {
1313

@@ -77,11 +77,11 @@ class Button : public NodeUi {
7777

7878
ToggleButtonGroup *group = nullptr;
7979

80-
// Styles.
81-
StyleBox theme_normal;
82-
StyleBox theme_hovered;
83-
StyleBox theme_pressed;
84-
StyleBox theme_disabled;
80+
// Style overrides.
81+
std::optional<StyleBox> theme_override_normal;
82+
std::optional<StyleBox> theme_override_hovered;
83+
std::optional<StyleBox> theme_override_pressed;
84+
std::optional<StyleBox> theme_override_disabled;
8585

8686
protected:
8787
bool pressed = false;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "check_button.h"
22

3-
#include "../../resources/default_resource.h"
3+
#include "../../../resources/default_resource.h"
44

55
namespace revector {
66

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#include "menu_button.h"
22

3-
#include "../../resources/default_resource.h"
4-
#include "container/scroll_container.h"
5-
#include "popup_menu.h"
3+
#include "../../../resources/default_resource.h"
4+
#include "../container/scroll_container.h"
5+
#include "../popup_menu.h"
66

77
namespace revector {
88

0 commit comments

Comments
 (0)