diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 3e1f89239fc..68a2cd3f478 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -1743,8 +1743,11 @@ void Control::_size_changed() { new_size_cache.height = minimum_size.height; } - bool pos_changed = !new_pos_cache.is_equal_approx(data.pos_cache); - bool size_changed = !new_size_cache.is_equal_approx(data.size_cache); + bool pos_changed = new_pos_cache != data.pos_cache; + bool size_changed = new_size_cache != data.size_cache; + // Below helps in getting rid of floating point errors for signaling resized. + bool approx_pos_changed = !new_pos_cache.is_equal_approx(data.pos_cache); + bool approx_size_changed = !new_size_cache.is_equal_approx(data.size_cache); if (pos_changed) { data.pos_cache = new_pos_cache; @@ -1754,13 +1757,13 @@ void Control::_size_changed() { } if (is_inside_tree()) { - if (pos_changed || size_changed) { + if (approx_pos_changed || approx_size_changed) { // Ensure global transform is marked as dirty before `NOTIFICATION_RESIZED` / `item_rect_changed` signal // so an up to date global transform could be obtained when handling these. _notify_transform(); - item_rect_changed(size_changed); - if (size_changed) { + item_rect_changed(approx_size_changed); + if (approx_size_changed) { notification(NOTIFICATION_RESIZED); } }