diff options
author | kobewi <kobewi4e@gmail.com> | 2023-03-30 22:37:00 +0200 |
---|---|---|
committer | kobewi <kobewi4e@gmail.com> | 2023-04-18 22:14:01 +0200 |
commit | 727a4ed79a371d87be06a8101c9eedd48ecc3e01 (patch) | |
tree | 04e61c2a74da1ac6c442ce4a3b2dd2f70a84db3a | |
parent | 9e6b680cfb64655c057a869abd594f3518f24e17 (diff) | |
download | redot-engine-727a4ed79a371d87be06a8101c9eedd48ecc3e01.tar.gz |
Fix invalid global position when read outside tree
-rw-r--r-- | scene/main/canvas_item.cpp | 7 | ||||
-rw-r--r-- | scene/main/canvas_item.h | 1 |
2 files changed, 8 insertions, 0 deletions
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp index 6be610c083..71602d6243 100644 --- a/scene/main/canvas_item.cpp +++ b/scene/main/canvas_item.cpp @@ -142,6 +142,10 @@ void CanvasItem::_redraw_callback() { pending_update = false; // don't change to false until finished drawing (avoid recursive update) } +void CanvasItem::_invalidate_global_transform() { + global_invalid = true; +} + Transform2D CanvasItem::get_global_transform_with_canvas() const { if (canvas_layer) { return canvas_layer->get_final_transform() * get_global_transform(); @@ -290,6 +294,7 @@ void CanvasItem::_notification(int p_what) { } } + global_invalid = true; _enter_canvas(); RenderingServer::get_singleton()->canvas_item_set_visible(canvas_item, is_visible_in_tree()); // The visibility of the parent may change. @@ -403,6 +408,7 @@ void CanvasItem::set_as_top_level(bool p_top_level) { if (!is_inside_tree()) { top_level = p_top_level; + propagate_call(SNAME("_invalidate_global_transform")); return; } @@ -950,6 +956,7 @@ void CanvasItem::_validate_property(PropertyInfo &p_property) const { void CanvasItem::_bind_methods() { ClassDB::bind_method(D_METHOD("_top_level_raise_self"), &CanvasItem::_top_level_raise_self); + ClassDB::bind_method(D_METHOD("_invalidate_global_transform"), &CanvasItem::_invalidate_global_transform); #ifdef TOOLS_ENABLED ClassDB::bind_method(D_METHOD("_edit_set_state", "state"), &CanvasItem::_edit_set_state); diff --git a/scene/main/canvas_item.h b/scene/main/canvas_item.h index ea1e666b08..d6ca98d4de 100644 --- a/scene/main/canvas_item.h +++ b/scene/main/canvas_item.h @@ -129,6 +129,7 @@ private: virtual void _top_level_changed_on_parent(); void _redraw_callback(); + void _invalidate_global_transform(); void _enter_canvas(); void _exit_canvas(); |