From bb8b57cbaea3eb57b4d3aabd95cb2ae67d6a7afe Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 6 Jun 2016 21:14:25 -0300 Subject: [PATCH] -Fix small bug regarding to canvas layer detection, closes #4381 (cherry picked from commit 2b9cab25c08f9319fcb9d89262d8eda5618a89ee) --- scene/2d/canvas_item.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index 21615b7f552..0c5886f755a 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -455,19 +455,14 @@ void CanvasItem::_enter_canvas() { if ((!get_parent() || !get_parent()->cast_to()) || toplevel) { Node *n = this; - Viewport *viewport=NULL; + canvas_layer=NULL; while(n) { - if (n->cast_to()) { - - viewport = n->cast_to(); - break; - } - if (!canvas_layer && n->cast_to()) { - - canvas_layer = n->cast_to(); + canvas_layer = n->cast_to(); + if (canvas_layer) { + break; } n=n->get_parent(); } @@ -476,7 +471,7 @@ void CanvasItem::_enter_canvas() { if (canvas_layer) canvas=canvas_layer->get_world_2d()->get_canvas(); else - canvas=viewport->find_world_2d()->get_canvas(); + canvas=get_viewport()->find_world_2d()->get_canvas(); VisualServer::get_singleton()->canvas_item_set_parent(canvas_item,canvas); @@ -487,7 +482,9 @@ void CanvasItem::_enter_canvas() { } else { + CanvasItem *parent = get_parent_item(); + canvas_layer=parent->canvas_layer; VisualServer::get_singleton()->canvas_item_set_parent(canvas_item,parent->get_canvas_item()); parent->_queue_sort_children(); } @@ -1176,12 +1173,10 @@ Matrix32 CanvasItem::get_viewport_transform() const { return canvas_layer->get_transform(); } - } else if (get_viewport()) { + } else { return get_viewport()->get_final_transform() * get_viewport()->get_canvas_transform(); } - return Matrix32(); - }