void CanvasItem::_notification(int p_what) { switch(p_what) { case NOTIFICATION_ENTER_TREE: { first_draw=true; pending_children_sort=false; if (get_parent()) { CanvasItem *ci = get_parent()->cast_to<CanvasItem>(); if (ci) C=ci->children_items.push_back(this); } _enter_canvas(); if (!block_transform_notify && !xform_change.in_list()) { get_tree()->xform_change_list.add(&xform_change); } } break; case NOTIFICATION_MOVED_IN_PARENT: { if (group!="") { get_tree()->call_group(SceneTree::GROUP_CALL_UNIQUE,group,"_raise_self"); } else { CanvasItem *p = get_parent_item(); ERR_FAIL_COND(!p); p->_queue_sort_children(); } } break; case NOTIFICATION_EXIT_TREE: { if (xform_change.in_list()) get_tree()->xform_change_list.remove(&xform_change); _exit_canvas(); if (C) { get_parent()->cast_to<CanvasItem>()->children_items.erase(C); C=NULL; } global_invalid=true; } break; case NOTIFICATION_DRAW: { } break; case NOTIFICATION_TRANSFORM_CHANGED: { } break; case NOTIFICATION_VISIBILITY_CHANGED: { emit_signal(SceneStringNames::get_singleton()->visibility_changed); } break; } }
void CanvasItem::set_as_toplevel(bool p_toplevel) { if (toplevel==p_toplevel) return; if (!is_inside_tree()) { toplevel=p_toplevel; return; } _exit_canvas(); toplevel=p_toplevel; _enter_canvas(); }