Skip to content

Commit

Permalink
Fix issue where set_global_position(global_position) in Control r…
Browse files Browse the repository at this point in the history
…esulted in a different result than `global_position`

Previously, the case where the pivot point was not at the origin was ignored.
  • Loading branch information
Rindbee committed Jan 22, 2024
1 parent 0bcc0e9 commit 0c6b6fe
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions scene/gui/control.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
ERR_MAIN_THREAD_GUARD;
Transform2D inv;

if (data.parent_canvas_item) {
inv = data.parent_canvas_item->get_global_transform().affine_inverse();
Transform2D global_transform_cache = get_global_transform();
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 {
Expand Down

0 comments on commit 0c6b6fe

Please sign in to comment.