diff --git a/scene/theme/theme_owner.cpp b/scene/theme/theme_owner.cpp index b3d51e71c09..75b3c8f4f50 100644 --- a/scene/theme/theme_owner.cpp +++ b/scene/theme/theme_owner.cpp @@ -37,33 +37,8 @@ // Theme owner node. void ThemeOwner::set_owner_node(Node *p_node) { - owner_control = nullptr; - owner_window = nullptr; - - Control *c = Object::cast_to(p_node); - if (c) { - owner_control = c; - return; - } - - Window *w = Object::cast_to(p_node); - if (w) { - owner_window = w; - return; - } -} - -Node *ThemeOwner::get_owner_node() const { - if (owner_control) { - return owner_control; - } else if (owner_window) { - return owner_window; - } - return nullptr; -} - -bool ThemeOwner::has_owner_node() const { - return bool(owner_control || owner_window); + ERR_FAIL_COND(p_node && !Object::cast_to(p_node) && !Object::cast_to(p_node)); + owner_node = p_node; } void ThemeOwner::set_owner_context(ThemeContext *p_context, bool p_propagate) { @@ -219,16 +194,16 @@ void ThemeOwner::get_theme_type_dependencies(const Node *p_for_node, const Strin // and eventually the chain must lead to native types). // First, look through themes owned by nodes in the tree. - Node *owner_node = get_owner_node(); + Node *current_owner = owner_node; - while (owner_node) { - Ref owner_theme = _get_owner_node_theme(owner_node); + while (current_owner) { + Ref owner_theme = _get_owner_node_theme(current_owner); if (owner_theme.is_valid() && owner_theme->get_type_variation_base(type_variation) != StringName()) { owner_theme->get_type_dependencies(type_name, type_variation, r_result); return; } - owner_node = _get_next_owner_node(owner_node); + current_owner = _get_next_owner_node(current_owner); } // Second, check global contexts. @@ -254,19 +229,19 @@ Variant ThemeOwner::get_theme_item_in_types(Theme::DataType p_data_type, const S // First, look through each control or window node in the branch, until no valid parent can be found. // Only nodes with a theme resource attached are considered. - Node *owner_node = get_owner_node(); + Node *current_owner = owner_node; - while (owner_node) { + while (current_owner) { // For each theme resource check the theme types provided and see if p_name exists with any of them. for (const StringName &E : p_theme_types) { - Ref owner_theme = _get_owner_node_theme(owner_node); + Ref owner_theme = _get_owner_node_theme(current_owner); if (owner_theme.is_valid() && owner_theme->has_theme_item(p_data_type, p_name, E)) { return owner_theme->get_theme_item(p_data_type, p_name, E); } } - owner_node = _get_next_owner_node(owner_node); + current_owner = _get_next_owner_node(current_owner); } // Second, check global themes from the appropriate context. @@ -290,19 +265,19 @@ bool ThemeOwner::has_theme_item_in_types(Theme::DataType p_data_type, const Stri // First, look through each control or window node in the branch, until no valid parent can be found. // Only nodes with a theme resource attached are considered. - Node *owner_node = get_owner_node(); + Node *current_owner = owner_node; - while (owner_node) { + while (current_owner) { // For each theme resource check the theme types provided and see if p_name exists with any of them. for (const StringName &E : p_theme_types) { - Ref owner_theme = _get_owner_node_theme(owner_node); + Ref owner_theme = _get_owner_node_theme(current_owner); if (owner_theme.is_valid() && owner_theme->has_theme_item(p_data_type, p_name, E)) { return true; } } - owner_node = _get_next_owner_node(owner_node); + current_owner = _get_next_owner_node(current_owner); } // Second, check global themes from the appropriate context. @@ -325,16 +300,16 @@ float ThemeOwner::get_theme_default_base_scale() { // First, look through each control or window node in the branch, until no valid parent can be found. // Only nodes with a theme resource attached are considered. // For each theme resource see if their assigned theme has the default value defined and valid. - Node *owner_node = get_owner_node(); + Node *current_owner = owner_node; - while (owner_node) { - Ref owner_theme = _get_owner_node_theme(owner_node); + while (current_owner) { + Ref owner_theme = _get_owner_node_theme(current_owner); if (owner_theme.is_valid() && owner_theme->has_default_base_scale()) { return owner_theme->get_default_base_scale(); } - owner_node = _get_next_owner_node(owner_node); + current_owner = _get_next_owner_node(current_owner); } // Second, check global themes from the appropriate context. @@ -355,16 +330,16 @@ Ref ThemeOwner::get_theme_default_font() { // First, look through each control or window node in the branch, until no valid parent can be found. // Only nodes with a theme resource attached are considered. // For each theme resource see if their assigned theme has the default value defined and valid. - Node *owner_node = get_owner_node(); + Node *current_owner = owner_node; - while (owner_node) { - Ref owner_theme = _get_owner_node_theme(owner_node); + while (current_owner) { + Ref owner_theme = _get_owner_node_theme(current_owner); if (owner_theme.is_valid() && owner_theme->has_default_font()) { return owner_theme->get_default_font(); } - owner_node = _get_next_owner_node(owner_node); + current_owner = _get_next_owner_node(current_owner); } // Second, check global themes from the appropriate context. @@ -385,16 +360,16 @@ int ThemeOwner::get_theme_default_font_size() { // First, look through each control or window node in the branch, until no valid parent can be found. // Only nodes with a theme resource attached are considered. // For each theme resource see if their assigned theme has the default value defined and valid. - Node *owner_node = get_owner_node(); + Node *current_owner = owner_node; - while (owner_node) { - Ref owner_theme = _get_owner_node_theme(owner_node); + while (current_owner) { + Ref owner_theme = _get_owner_node_theme(current_owner); if (owner_theme.is_valid() && owner_theme->has_default_font_size()) { return owner_theme->get_default_font_size(); } - owner_node = _get_next_owner_node(owner_node); + current_owner = _get_next_owner_node(current_owner); } // Second, check global themes from the appropriate context. diff --git a/scene/theme/theme_owner.h b/scene/theme/theme_owner.h index 344da058e71..6e2fce225a3 100644 --- a/scene/theme/theme_owner.h +++ b/scene/theme/theme_owner.h @@ -43,8 +43,7 @@ class ThemeOwner : public Object { Node *holder = nullptr; - Control *owner_control = nullptr; - Window *owner_window = nullptr; + Node *owner_node = nullptr; ThemeContext *owner_context = nullptr; void _owner_context_changed(); @@ -57,8 +56,8 @@ public: // Theme owner node. void set_owner_node(Node *p_node); - Node *get_owner_node() const; - bool has_owner_node() const; + Node *get_owner_node() const { return owner_node; } + bool has_owner_node() const { return owner_node != nullptr; } void set_owner_context(ThemeContext *p_context, bool p_propagate = true);