Keep track of default theme and project custom default theme seperatelly
Fixes #30288
This commit is contained in:
parent
4cb0887660
commit
17901da1a8
4 changed files with 81 additions and 12 deletions
|
@ -850,6 +850,12 @@ Ref<Texture> Control::get_icon(const StringName &p_name, const StringName &p_typ
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_icon(p_name, type)) {
|
||||||
|
return Theme::get_project_default()->get_icon(p_name, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Theme::get_default()->get_icon(p_name, type);
|
return Theme::get_default()->get_icon(p_name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -886,6 +892,12 @@ Ref<Shader> Control::get_shader(const StringName &p_name, const StringName &p_ty
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_shader(p_name, type)) {
|
||||||
|
return Theme::get_project_default()->get_shader(p_name, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Theme::get_default()->get_shader(p_name, type);
|
return Theme::get_default()->get_shader(p_name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -925,6 +937,9 @@ Ref<StyleBox> Control::get_stylebox(const StringName &p_name, const StringName &
|
||||||
}
|
}
|
||||||
|
|
||||||
while (class_name != StringName()) {
|
while (class_name != StringName()) {
|
||||||
|
if (Theme::get_project_default().is_valid() && Theme::get_project_default()->has_stylebox(p_name, type))
|
||||||
|
return Theme::get_project_default()->get_stylebox(p_name, type);
|
||||||
|
|
||||||
if (Theme::get_default()->has_stylebox(p_name, class_name))
|
if (Theme::get_default()->has_stylebox(p_name, class_name))
|
||||||
return Theme::get_default()->get_stylebox(p_name, class_name);
|
return Theme::get_default()->get_stylebox(p_name, class_name);
|
||||||
|
|
||||||
|
@ -1001,6 +1016,11 @@ Color Control::get_color(const StringName &p_name, const StringName &p_type) con
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_color(p_name, type)) {
|
||||||
|
return Theme::get_project_default()->get_color(p_name, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
return Theme::get_default()->get_color(p_name, type);
|
return Theme::get_default()->get_color(p_name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1036,6 +1056,11 @@ int Control::get_constant(const StringName &p_name, const StringName &p_type) co
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_constant(p_name, type)) {
|
||||||
|
return Theme::get_project_default()->get_constant(p_name, type);
|
||||||
|
}
|
||||||
|
}
|
||||||
return Theme::get_default()->get_constant(p_name, type);
|
return Theme::get_default()->get_constant(p_name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1106,6 +1131,11 @@ bool Control::has_icon(const StringName &p_name, const StringName &p_type) const
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_color(p_name, type)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return Theme::get_default()->has_icon(p_name, type);
|
return Theme::get_default()->has_icon(p_name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1140,6 +1170,11 @@ bool Control::has_shader(const StringName &p_name, const StringName &p_type) con
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_shader(p_name, type)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return Theme::get_default()->has_shader(p_name, type);
|
return Theme::get_default()->has_shader(p_name, type);
|
||||||
}
|
}
|
||||||
bool Control::has_stylebox(const StringName &p_name, const StringName &p_type) const {
|
bool Control::has_stylebox(const StringName &p_name, const StringName &p_type) const {
|
||||||
|
@ -1173,6 +1208,11 @@ bool Control::has_stylebox(const StringName &p_name, const StringName &p_type) c
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_stylebox(p_name, type)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return Theme::get_default()->has_stylebox(p_name, type);
|
return Theme::get_default()->has_stylebox(p_name, type);
|
||||||
}
|
}
|
||||||
bool Control::has_font(const StringName &p_name, const StringName &p_type) const {
|
bool Control::has_font(const StringName &p_name, const StringName &p_type) const {
|
||||||
|
@ -1206,6 +1246,11 @@ bool Control::has_font(const StringName &p_name, const StringName &p_type) const
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_font(p_name, type)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return Theme::get_default()->has_font(p_name, type);
|
return Theme::get_default()->has_font(p_name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1240,6 +1285,11 @@ bool Control::has_color(const StringName &p_name, const StringName &p_type) cons
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_color(p_name, type)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return Theme::get_default()->has_color(p_name, type);
|
return Theme::get_default()->has_color(p_name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1274,6 +1324,11 @@ bool Control::has_constant(const StringName &p_name, const StringName &p_type) c
|
||||||
theme_owner = NULL;
|
theme_owner = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Theme::get_project_default().is_valid()) {
|
||||||
|
if (Theme::get_project_default()->has_constant(p_name, type)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return Theme::get_default()->has_constant(p_name, type);
|
return Theme::get_default()->has_constant(p_name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -748,7 +748,7 @@ void register_scene_types() {
|
||||||
if (theme_path != String()) {
|
if (theme_path != String()) {
|
||||||
Ref<Theme> theme = ResourceLoader::load(theme_path);
|
Ref<Theme> theme = ResourceLoader::load(theme_path);
|
||||||
if (theme.is_valid()) {
|
if (theme.is_valid()) {
|
||||||
Theme::set_default(theme);
|
Theme::set_project_default(theme);
|
||||||
if (font.is_valid()) {
|
if (font.is_valid()) {
|
||||||
Theme::set_default_font(font);
|
Theme::set_default_font(font);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,8 +32,6 @@
|
||||||
#include "core/os/file_access.h"
|
#include "core/os/file_access.h"
|
||||||
#include "core/print_string.h"
|
#include "core/print_string.h"
|
||||||
|
|
||||||
Ref<Theme> Theme::default_theme;
|
|
||||||
|
|
||||||
void Theme::_emit_theme_changed() {
|
void Theme::_emit_theme_changed() {
|
||||||
|
|
||||||
emit_changed();
|
emit_changed();
|
||||||
|
@ -186,11 +184,6 @@ void Theme::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<Theme> Theme::get_default() {
|
|
||||||
|
|
||||||
return default_theme;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Theme::set_default_theme_font(const Ref<Font> &p_default_font) {
|
void Theme::set_default_theme_font(const Ref<Font> &p_default_font) {
|
||||||
|
|
||||||
if (default_theme_font == p_default_font)
|
if (default_theme_font == p_default_font)
|
||||||
|
@ -215,14 +208,31 @@ Ref<Font> Theme::get_default_theme_font() const {
|
||||||
return default_theme_font;
|
return default_theme_font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ref<Theme> Theme::project_default_theme;
|
||||||
|
Ref<Theme> Theme::default_theme;
|
||||||
|
Ref<Texture> Theme::default_icon;
|
||||||
|
Ref<StyleBox> Theme::default_style;
|
||||||
|
Ref<Font> Theme::default_font;
|
||||||
|
|
||||||
|
Ref<Theme> Theme::get_default() {
|
||||||
|
|
||||||
|
return default_theme;
|
||||||
|
}
|
||||||
|
|
||||||
void Theme::set_default(const Ref<Theme> &p_default) {
|
void Theme::set_default(const Ref<Theme> &p_default) {
|
||||||
|
|
||||||
default_theme = p_default;
|
default_theme = p_default;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<Texture> Theme::default_icon;
|
Ref<Theme> Theme::get_project_default() {
|
||||||
Ref<StyleBox> Theme::default_style;
|
|
||||||
Ref<Font> Theme::default_font;
|
return project_default_theme;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Theme::set_project_default(const Ref<Theme> &p_project_default) {
|
||||||
|
|
||||||
|
project_default_theme = p_project_default;
|
||||||
|
}
|
||||||
|
|
||||||
void Theme::set_default_icon(const Ref<Texture> &p_icon) {
|
void Theme::set_default_icon(const Ref<Texture> &p_icon) {
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,6 @@ class Theme : public Resource {
|
||||||
GDCLASS(Theme, Resource);
|
GDCLASS(Theme, Resource);
|
||||||
RES_BASE_EXTENSION("theme");
|
RES_BASE_EXTENSION("theme");
|
||||||
|
|
||||||
static Ref<Theme> default_theme;
|
|
||||||
void _emit_theme_changed();
|
void _emit_theme_changed();
|
||||||
|
|
||||||
HashMap<StringName, HashMap<StringName, Ref<Texture> > > icon_map;
|
HashMap<StringName, HashMap<StringName, Ref<Texture> > > icon_map;
|
||||||
|
@ -61,6 +60,8 @@ protected:
|
||||||
bool _get(const StringName &p_name, Variant &r_ret) const;
|
bool _get(const StringName &p_name, Variant &r_ret) const;
|
||||||
void _get_property_list(List<PropertyInfo> *p_list) const;
|
void _get_property_list(List<PropertyInfo> *p_list) const;
|
||||||
|
|
||||||
|
static Ref<Theme> project_default_theme;
|
||||||
|
static Ref<Theme> default_theme;
|
||||||
static Ref<Texture> default_icon;
|
static Ref<Texture> default_icon;
|
||||||
static Ref<StyleBox> default_style;
|
static Ref<StyleBox> default_style;
|
||||||
static Ref<Font> default_font;
|
static Ref<Font> default_font;
|
||||||
|
@ -137,6 +138,9 @@ public:
|
||||||
static Ref<Theme> get_default();
|
static Ref<Theme> get_default();
|
||||||
static void set_default(const Ref<Theme> &p_default);
|
static void set_default(const Ref<Theme> &p_default);
|
||||||
|
|
||||||
|
static Ref<Theme> get_project_default();
|
||||||
|
static void set_project_default(const Ref<Theme> &p_default);
|
||||||
|
|
||||||
static void set_default_icon(const Ref<Texture> &p_icon);
|
static void set_default_icon(const Ref<Texture> &p_icon);
|
||||||
static void set_default_style(const Ref<StyleBox> &p_style);
|
static void set_default_style(const Ref<StyleBox> &p_style);
|
||||||
static void set_default_font(const Ref<Font> &p_font);
|
static void set_default_font(const Ref<Font> &p_font);
|
||||||
|
|
Loading…
Reference in a new issue