diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-29 12:46:07 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-29 14:07:48 +0100 |
commit | 810a0dbff12585cebf37681e5e4007550b259c8c (patch) | |
tree | 7c6441bba177e2c1ba347d00e9888bd43fa86e51 | |
parent | b5d30f9efea4ca308a2a9cf88777b348719afac9 (diff) | |
download | redot-engine-810a0dbff12585cebf37681e5e4007550b259c8c.tar.gz |
Don't access Node3D/Node2D/Control global transform in `reparent` unless needed
Fixes #89002.
Co-authored-by: Tamás Gálffy <ezittgtx@gmail.com>
-rw-r--r-- | scene/2d/node_2d.cpp | 6 | ||||
-rw-r--r-- | scene/3d/node_3d.cpp | 6 | ||||
-rw-r--r-- | scene/gui/control.cpp | 6 |
3 files changed, 12 insertions, 6 deletions
diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index 0a5f696992..aae7eff7bd 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -143,10 +143,12 @@ void Node2D::_update_transform() { void Node2D::reparent(Node *p_parent, bool p_keep_global_transform) { ERR_THREAD_GUARD; - Transform2D temp = get_global_transform(); - Node::reparent(p_parent); if (p_keep_global_transform) { + Transform2D temp = get_global_transform(); + Node::reparent(p_parent); set_global_transform(temp); + } else { + Node::reparent(p_parent); } } diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp index ab058b5646..5c081a0b47 100644 --- a/scene/3d/node_3d.cpp +++ b/scene/3d/node_3d.cpp @@ -719,10 +719,12 @@ void Node3D::set_disable_gizmos(bool p_enabled) { void Node3D::reparent(Node *p_parent, bool p_keep_global_transform) { ERR_THREAD_GUARD; - Transform3D temp = get_global_transform(); - Node::reparent(p_parent); if (p_keep_global_transform) { + Transform3D temp = get_global_transform(); + Node::reparent(p_parent); set_global_transform(temp); + } else { + Node::reparent(p_parent); } } diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 235895ce47..e9f1606d66 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -188,10 +188,12 @@ Size2 Control::_edit_get_minimum_size() const { void Control::reparent(Node *p_parent, bool p_keep_global_transform) { ERR_MAIN_THREAD_GUARD; - Transform2D temp = get_global_transform(); - Node::reparent(p_parent); if (p_keep_global_transform) { + Transform2D temp = get_global_transform(); + Node::reparent(p_parent); set_global_position(temp.get_origin()); + } else { + Node::reparent(p_parent); } } |