diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2021-02-19 19:13:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-19 19:13:09 +0100 |
commit | 7447af265b3b9bb880329b913c40cb03aaa89cd7 (patch) | |
tree | 2294d19f3b8f1c61926e9cbc8f0edab16dfe11bf /scene/gui | |
parent | cfa09bacc9983b49748523647e373e3719319fc4 (diff) | |
parent | 84da090a6907fef7451eb7914ba3179f582d4380 (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.cpp | 13 | ||||
-rw-r--r-- | scene/gui/control.h | 2 |
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]); |