ThemeOwner: Extract get_owner_node_theme

Signed-off-by: Quentin Guidée <quentin.guidee@gmail.com>
This commit is contained in:
Quentin Guidée 2022-12-17 15:27:42 -05:00
parent 10bc1d8710
commit 501c317ae1
No known key found for this signature in database
GPG Key ID: BA2A6E3FD8A2B599
2 changed files with 20 additions and 50 deletions

View File

@ -205,16 +205,7 @@ Variant ThemeOwner::get_theme_item_in_types(Theme::DataType p_data_type, const S
while (owner_node) { while (owner_node) {
// For each theme resource check the theme types provided and see if p_name exists with any of them. // 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) { for (const StringName &E : p_theme_types) {
Ref<Theme> owner_theme; Ref<Theme> owner_theme = _get_owner_node_theme(owner_node);
Control *owner_c = Object::cast_to<Control>(owner_node);
if (owner_c) {
owner_theme = owner_c->get_theme();
}
Window *owner_w = Object::cast_to<Window>(owner_node);
if (owner_w) {
owner_theme = owner_w->get_theme();
}
if (owner_theme.is_valid() && owner_theme->has_theme_item(p_data_type, p_name, E)) { 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); return owner_theme->get_theme_item(p_data_type, p_name, E);
@ -254,16 +245,7 @@ bool ThemeOwner::has_theme_item_in_types(Theme::DataType p_data_type, const Stri
while (owner_node) { while (owner_node) {
// For each theme resource check the theme types provided and see if p_name exists with any of them. // 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) { for (const StringName &E : p_theme_types) {
Ref<Theme> owner_theme; Ref<Theme> owner_theme = _get_owner_node_theme(owner_node);
Control *owner_c = Object::cast_to<Control>(owner_node);
if (owner_c) {
owner_theme = owner_c->get_theme();
}
Window *owner_w = Object::cast_to<Window>(owner_node);
if (owner_w) {
owner_theme = owner_w->get_theme();
}
if (owner_theme.is_valid() && owner_theme->has_theme_item(p_data_type, p_name, E)) { if (owner_theme.is_valid() && owner_theme->has_theme_item(p_data_type, p_name, E)) {
return true; return true;
@ -299,16 +281,7 @@ float ThemeOwner::get_theme_default_base_scale() {
Node *owner_node = get_owner_node(); Node *owner_node = get_owner_node();
while (owner_node) { while (owner_node) {
Ref<Theme> owner_theme; Ref<Theme> owner_theme = _get_owner_node_theme(owner_node);
Control *owner_c = Object::cast_to<Control>(owner_node);
if (owner_c) {
owner_theme = owner_c->get_theme();
}
Window *owner_w = Object::cast_to<Window>(owner_node);
if (owner_w) {
owner_theme = owner_w->get_theme();
}
if (owner_theme.is_valid() && owner_theme->has_default_base_scale()) { if (owner_theme.is_valid() && owner_theme->has_default_base_scale()) {
return owner_theme->get_default_base_scale(); return owner_theme->get_default_base_scale();
@ -338,16 +311,7 @@ Ref<Font> ThemeOwner::get_theme_default_font() {
Node *owner_node = get_owner_node(); Node *owner_node = get_owner_node();
while (owner_node) { while (owner_node) {
Ref<Theme> owner_theme; Ref<Theme> owner_theme = _get_owner_node_theme(owner_node);
Control *owner_c = Object::cast_to<Control>(owner_node);
if (owner_c) {
owner_theme = owner_c->get_theme();
}
Window *owner_w = Object::cast_to<Window>(owner_node);
if (owner_w) {
owner_theme = owner_w->get_theme();
}
if (owner_theme.is_valid() && owner_theme->has_default_font()) { if (owner_theme.is_valid() && owner_theme->has_default_font()) {
return owner_theme->get_default_font(); return owner_theme->get_default_font();
@ -377,16 +341,7 @@ int ThemeOwner::get_theme_default_font_size() {
Node *owner_node = get_owner_node(); Node *owner_node = get_owner_node();
while (owner_node) { while (owner_node) {
Ref<Theme> owner_theme; Ref<Theme> owner_theme = _get_owner_node_theme(owner_node);
Control *owner_c = Object::cast_to<Control>(owner_node);
if (owner_c) {
owner_theme = owner_c->get_theme();
}
Window *owner_w = Object::cast_to<Window>(owner_node);
if (owner_w) {
owner_theme = owner_w->get_theme();
}
if (owner_theme.is_valid() && owner_theme->has_default_font_size()) { if (owner_theme.is_valid() && owner_theme->has_default_font_size()) {
return owner_theme->get_default_font_size(); return owner_theme->get_default_font_size();
@ -408,3 +363,17 @@ int ThemeOwner::get_theme_default_font_size() {
} }
return ThemeDB::get_singleton()->get_fallback_font_size(); return ThemeDB::get_singleton()->get_fallback_font_size();
} }
Ref<Theme> ThemeOwner::_get_owner_node_theme(Node *p_owner_node) const {
const Control *owner_c = Object::cast_to<Control>(p_owner_node);
if (owner_c) {
return owner_c->get_theme();
}
const Window *owner_w = Object::cast_to<Window>(p_owner_node);
if (owner_w) {
return owner_w->get_theme();
}
return Ref<Theme>();
}

View File

@ -43,6 +43,7 @@ class ThemeOwner : public Object {
Window *owner_window = nullptr; Window *owner_window = nullptr;
Node *_get_next_owner_node(Node *p_from_node) const; Node *_get_next_owner_node(Node *p_from_node) const;
Ref<Theme> _get_owner_node_theme(Node *p_owner_node) const;
public: public:
// Theme owner node. // Theme owner node.