Skip to content

Commit 92e892a

Browse files
committed
Merge pull request godotengine#81061 from KoBeWi/remembering_things_is_so_meta
Properly remember custom text color in scene tree
2 parents c846e59 + a37cc92 commit 92e892a

2 files changed

Lines changed: 19 additions & 8 deletions

File tree

editor/gui/scene_tree_editor.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
234234
item->add_button(0, get_theme_icon(SNAME("Script"), SNAME("EditorIcons")), BUTTON_SCRIPT);
235235
} else {
236236
//has no script (or script is a custom type)
237-
item->set_custom_color(0, get_theme_color(SNAME("disabled_font_color"), SNAME("Editor")));
237+
_set_item_custom_color(item, get_theme_color(SNAME("disabled_font_color"), SNAME("Editor")));
238238
item->set_selectable(0, false);
239239

240240
if (!scr.is_null()) { // make sure to mark the script if a custom type
@@ -251,11 +251,11 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
251251
node_name += " " + TTR("(Connecting From)");
252252
}
253253
item->set_text(0, node_name);
254-
item->set_custom_color(0, accent);
254+
_set_item_custom_color(item, accent);
255255
}
256256
} else if (part_of_subscene) {
257257
if (valid_types.size() == 0) {
258-
item->set_custom_color(0, get_theme_color(SNAME("warning_color"), SNAME("Editor")));
258+
_set_item_custom_color(item, get_theme_color(SNAME("warning_color"), SNAME("Editor")));
259259
}
260260
} else if (marked.has(p_node)) {
261261
String node_name = p_node->get_name();
@@ -264,15 +264,15 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
264264
}
265265
item->set_text(0, node_name);
266266
item->set_selectable(0, marked_selectable);
267-
item->set_custom_color(0, get_theme_color(SNAME("accent_color"), SNAME("Editor")));
267+
_set_item_custom_color(item, get_theme_color(SNAME("accent_color"), SNAME("Editor")));
268268
} else if (!p_node->can_process()) {
269-
item->set_custom_color(0, get_theme_color(SNAME("disabled_font_color"), SNAME("Editor")));
269+
_set_item_custom_color(item, get_theme_color(SNAME("disabled_font_color"), SNAME("Editor")));
270270
} else if (!marked_selectable && !marked_children_selectable) {
271271
Node *node = p_node;
272272
while (node) {
273273
if (marked.has(node)) {
274274
item->set_selectable(0, false);
275-
item->set_custom_color(0, get_theme_color(SNAME("error_color"), SNAME("Editor")));
275+
_set_item_custom_color(item, get_theme_color(SNAME("error_color"), SNAME("Editor")));
276276
break;
277277
}
278278
node = node->get_parent();
@@ -500,7 +500,7 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
500500
}
501501

502502
if (!valid) {
503-
item->set_custom_color(0, get_theme_color(SNAME("disabled_font_color"), SNAME("Editor")));
503+
_set_item_custom_color(item, get_theme_color(SNAME("disabled_font_color"), SNAME("Editor")));
504504
item->set_selectable(0, false);
505505
}
506506
}
@@ -550,6 +550,11 @@ void SceneTreeEditor::_update_visibility_color(Node *p_node, TreeItem *p_item) {
550550
}
551551
}
552552

553+
void SceneTreeEditor::_set_item_custom_color(TreeItem *p_item, Color p_color) {
554+
p_item->set_custom_color(0, p_color);
555+
p_item->set_meta(SNAME("custom_color"), p_color);
556+
}
557+
553558
void SceneTreeEditor::_node_script_changed(Node *p_node) {
554559
if (tree_dirty) {
555560
return;
@@ -661,7 +666,12 @@ bool SceneTreeEditor::_update_filter(TreeItem *p_parent, bool p_scroll_to_select
661666
}
662667

663668
if (selectable) {
664-
p_parent->clear_custom_color(0);
669+
Color custom_color = p_parent->get_meta(SNAME("custom_color"), Color(0, 0, 0, 0));
670+
if (custom_color == Color(0, 0, 0, 0)) {
671+
p_parent->clear_custom_color(0);
672+
} else {
673+
p_parent->set_custom_color(0, custom_color);
674+
}
665675
p_parent->set_selectable(0, true);
666676
} else if (keep_for_children) {
667677
p_parent->set_custom_color(0, get_theme_color(SNAME("disabled_font_color"), SNAME("Editor")));

editor/gui/scene_tree_editor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ class SceneTreeEditor : public Control {
117117
void _node_script_changed(Node *p_node);
118118
void _node_visibility_changed(Node *p_node);
119119
void _update_visibility_color(Node *p_node, TreeItem *p_item);
120+
void _set_item_custom_color(TreeItem *p_item, Color p_color);
120121

121122
void _selection_changed();
122123
Node *get_scene_node();

0 commit comments

Comments
 (0)