Merge pull request #87432 from Rindbee/fix-set_global_position-in-control

Fix issue where `set_global_position(global_position)` in `Control` resulted in a different result than `global_position`
This commit is contained in:
Yuri Sizov 2024-01-24 14:08:40 +01:00
commit 9c9a00f3a8

View file

@ -1419,13 +1419,15 @@ void Control::_set_global_position(const Point2 &p_point) {
void Control::set_global_position(const Point2 &p_point, bool p_keep_offsets) { void Control::set_global_position(const Point2 &p_point, bool p_keep_offsets) {
ERR_MAIN_THREAD_GUARD; ERR_MAIN_THREAD_GUARD;
Transform2D inv;
if (data.parent_canvas_item) { Transform2D global_transform_cache = get_global_transform();
inv = data.parent_canvas_item->get_global_transform().affine_inverse(); if (p_point == global_transform_cache.get_origin()) {
return; // Edge case, but avoids calculation.
} }
set_position(inv.xform(p_point), p_keep_offsets); Point2 internal_position = global_transform_cache.affine_inverse().xform(p_point);
set_position(internal_position + data.pos_cache, p_keep_offsets);
} }
Point2 Control::get_global_position() const { Point2 Control::get_global_position() const {