summaryrefslogtreecommitdiff
path: root/scene/gui
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <remi@verschelde.fr>2021-02-19 19:13:09 +0100
committerGitHub <noreply@github.com>2021-02-19 19:13:09 +0100
commit7447af265b3b9bb880329b913c40cb03aaa89cd7 (patch)
tree2294d19f3b8f1c61926e9cbc8f0edab16dfe11bf /scene/gui
parentcfa09bacc9983b49748523647e373e3719319fc4 (diff)
parent84da090a6907fef7451eb7914ba3179f582d4380 (diff)
Merge pull request #42427 from KoBeWi/achtung_size
Warn when setting Control size inside ready()
Diffstat (limited to 'scene/gui')
-rw-r--r--scene/gui/control.cpp13
-rw-r--r--scene/gui/control.h2
2 files changed, 14 insertions, 1 deletions
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 0e28c942f1..0c104bf318 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -456,6 +456,10 @@ bool Control::is_layout_rtl() const {
}
}
+void Control::_clear_size_warning() {
+ data.size_warning = false;
+}
+
//moved theme configuration here, so controls can set up even if still not inside active scene
void Control::add_child_notify(Node *p_child) {
@@ -503,7 +507,9 @@ void Control::_notification(int p_notification) {
} break;
case NOTIFICATION_EXIT_TREE: {
get_viewport()->_gui_remove_control(this);
-
+ } break;
+ case NOTIFICATION_READY: {
+ connect("ready", callable_mp(this, &Control::_clear_size_warning), varray(), CONNECT_DEFERRED | CONNECT_ONESHOT);
} break;
case NOTIFICATION_ENTER_CANVAS: {
@@ -1702,6 +1708,11 @@ void Control::set_rect(const Rect2 &p_rect) {
}
void Control::_set_size(const Size2 &p_size) {
+#ifdef DEBUG_ENABLED
+ if (data.size_warning) {
+ WARN_PRINT("Adjusting the size of Control nodes before they are fully initialized is unreliable. Consider deferring it with set_deferred().");
+ }
+#endif
set_size(p_size);
}
diff --git a/scene/gui/control.h b/scene/gui/control.h
index 8b24781287..8981e05872 100644
--- a/scene/gui/control.h
+++ b/scene/gui/control.h
@@ -182,6 +182,7 @@ private:
float rotation = 0.0;
Vector2 scale = Vector2(1, 1);
Vector2 pivot_offset;
+ bool size_warning = true;
int h_size_flags = SIZE_FILL;
int v_size_flags = SIZE_FILL;
@@ -235,6 +236,7 @@ private:
void _update_minimum_size();
+ void _clear_size_warning();
void _update_scroll();
void _compute_offsets(Rect2 p_rect, const float p_anchors[4], float (&r_offsets)[4]);