mirror of
https://github.com/godotengine/godot.git
synced 2025-12-08 06:09:55 +00:00
Remove NOTIFICATION_MOVED_IN_PARENT
* This notification makes node children management very inefficient. * Replaced by a NOTIFICATION_CHILDREN_CHANGED (and children_changed signal). * Changed Canvas code (and similar) to use the above signal, to perform more efficiently. This PR breaks compatibility (although this notification was very rarely used, even within the engine), but provides an alternate way to do the same. It is required for the changes in #75627 to be entirely effective.
This commit is contained in:
parent
44d539465a
commit
104392ef4e
12 changed files with 109 additions and 51 deletions
|
|
@ -180,25 +180,30 @@ void CanvasLayer::_notification(int p_what) {
|
|||
viewport = vp->get_viewport_rid();
|
||||
|
||||
RenderingServer::get_singleton()->viewport_attach_canvas(viewport, canvas);
|
||||
RenderingServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_index());
|
||||
RenderingServer::get_singleton()->viewport_set_canvas_transform(viewport, canvas, transform);
|
||||
_update_follow_viewport();
|
||||
|
||||
if (vp) {
|
||||
get_parent()->connect(SNAME("child_order_changed"), callable_mp(vp, &Viewport::canvas_parent_mark_dirty).bind(get_parent()), CONNECT_REFERENCE_COUNTED);
|
||||
vp->canvas_parent_mark_dirty(get_parent());
|
||||
}
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_EXIT_TREE: {
|
||||
ERR_FAIL_NULL_MSG(vp, "Viewport is not initialized.");
|
||||
get_parent()->disconnect(SNAME("child_order_changed"), callable_mp(vp, &Viewport::canvas_parent_mark_dirty).bind(get_parent()));
|
||||
|
||||
vp->_canvas_layer_remove(this);
|
||||
RenderingServer::get_singleton()->viewport_remove_canvas(viewport, canvas);
|
||||
viewport = RID();
|
||||
_update_follow_viewport(false);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
case NOTIFICATION_MOVED_IN_PARENT: {
|
||||
if (is_inside_tree()) {
|
||||
RenderingServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_index());
|
||||
}
|
||||
} break;
|
||||
void CanvasLayer::update_draw_order() {
|
||||
if (is_inside_tree()) {
|
||||
RenderingServer::get_singleton()->viewport_set_canvas_stacking(viewport, canvas, layer, get_index());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue