|
@@ -2424,6 +2424,10 @@ StringName Control::get_theme_type_variation() const {
|
|
|
/// Theme property lookup.
|
|
|
|
|
|
Ref<Texture2D> Control::get_theme_icon(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
const Ref<Texture2D> *tex = data.theme_icon_override.getptr(p_name);
|
|
|
if (tex) {
|
|
@@ -2443,6 +2447,10 @@ Ref<Texture2D> Control::get_theme_icon(const StringName &p_name, const StringNam
|
|
|
}
|
|
|
|
|
|
Ref<StyleBox> Control::get_theme_stylebox(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
const Ref<StyleBox> *style = data.theme_style_override.getptr(p_name);
|
|
|
if (style) {
|
|
@@ -2462,6 +2470,10 @@ Ref<StyleBox> Control::get_theme_stylebox(const StringName &p_name, const String
|
|
|
}
|
|
|
|
|
|
Ref<Font> Control::get_theme_font(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
const Ref<Font> *font = data.theme_font_override.getptr(p_name);
|
|
|
if (font) {
|
|
@@ -2481,6 +2493,10 @@ Ref<Font> Control::get_theme_font(const StringName &p_name, const StringName &p_
|
|
|
}
|
|
|
|
|
|
int Control::get_theme_font_size(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
const int *font_size = data.theme_font_size_override.getptr(p_name);
|
|
|
if (font_size && (*font_size) > 0) {
|
|
@@ -2500,6 +2516,10 @@ int Control::get_theme_font_size(const StringName &p_name, const StringName &p_t
|
|
|
}
|
|
|
|
|
|
Color Control::get_theme_color(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
const Color *color = data.theme_color_override.getptr(p_name);
|
|
|
if (color) {
|
|
@@ -2519,6 +2539,10 @@ Color Control::get_theme_color(const StringName &p_name, const StringName &p_the
|
|
|
}
|
|
|
|
|
|
int Control::get_theme_constant(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
const int *constant = data.theme_constant_override.getptr(p_name);
|
|
|
if (constant) {
|
|
@@ -2538,6 +2562,10 @@ int Control::get_theme_constant(const StringName &p_name, const StringName &p_th
|
|
|
}
|
|
|
|
|
|
bool Control::has_theme_icon(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
if (has_theme_icon_override(p_name)) {
|
|
|
return true;
|
|
@@ -2550,6 +2578,10 @@ bool Control::has_theme_icon(const StringName &p_name, const StringName &p_theme
|
|
|
}
|
|
|
|
|
|
bool Control::has_theme_stylebox(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
if (has_theme_stylebox_override(p_name)) {
|
|
|
return true;
|
|
@@ -2562,6 +2594,10 @@ bool Control::has_theme_stylebox(const StringName &p_name, const StringName &p_t
|
|
|
}
|
|
|
|
|
|
bool Control::has_theme_font(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
if (has_theme_font_override(p_name)) {
|
|
|
return true;
|
|
@@ -2574,6 +2610,10 @@ bool Control::has_theme_font(const StringName &p_name, const StringName &p_theme
|
|
|
}
|
|
|
|
|
|
bool Control::has_theme_font_size(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
if (has_theme_font_size_override(p_name)) {
|
|
|
return true;
|
|
@@ -2586,6 +2626,10 @@ bool Control::has_theme_font_size(const StringName &p_name, const StringName &p_
|
|
|
}
|
|
|
|
|
|
bool Control::has_theme_color(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
if (has_theme_color_override(p_name)) {
|
|
|
return true;
|
|
@@ -2598,6 +2642,10 @@ bool Control::has_theme_color(const StringName &p_name, const StringName &p_them
|
|
|
}
|
|
|
|
|
|
bool Control::has_theme_constant(const StringName &p_name, const StringName &p_theme_type) const {
|
|
|
+ if (!data.initialized) {
|
|
|
+ WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED");
|
|
|
+ }
|
|
|
+
|
|
|
if (p_theme_type == StringName() || p_theme_type == get_class_name() || p_theme_type == data.theme_type_variation) {
|
|
|
if (has_theme_constant_override(p_name)) {
|
|
|
return true;
|
|
@@ -2894,6 +2942,8 @@ Control *Control::make_custom_tooltip(const String &p_text) const {
|
|
|
void Control::_notification(int p_notification) {
|
|
|
switch (p_notification) {
|
|
|
case NOTIFICATION_POSTINITIALIZE: {
|
|
|
+ data.initialized = true;
|
|
|
+
|
|
|
_invalidate_theme_cache();
|
|
|
_update_theme_item_cache();
|
|
|
} break;
|