Selaa lähdekoodia

Fix issue where `set_global_position(global_position)` in `Control` resulted in a different result than `global_position`

Previously, the case where the pivot point was not at the origin was ignored.
风青山 1 vuosi sitten
vanhempi
commit
0c6b6fe749
1 muutettua tiedostoa jossa 6 lisäystä ja 4 poistoa
  1. 6 4
      scene/gui/control.cpp

+ 6 - 4
scene/gui/control.cpp

@@ -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 {