From 441f1a5fe9a3bf0e4e5dab578f793500b1ff6e3d Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Thu, 12 Mar 2020 09:37:40 -0300 Subject: Popups are now windows also (broken!) --- scene/2d/canvas_item.cpp | 16 ++++++++++++++++ scene/2d/canvas_item.h | 1 + 2 files changed, 17 insertions(+) (limited to 'scene/2d') diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index 2d2da005d0..321f3f2e6f 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -34,6 +34,7 @@ #include "core/message_queue.h" #include "core/method_bind_ext.gen.inc" #include "scene/main/canvas_layer.h" +#include "scene/main/viewport.h" #include "scene/main/window.h" #include "scene/resources/font.h" #include "scene/resources/style_box.h" @@ -454,6 +455,21 @@ Transform2D CanvasItem::get_global_transform_with_canvas() const { return get_global_transform(); } +Transform2D CanvasItem::get_screen_transform() const { + ERR_FAIL_COND_V(!is_inside_tree(), Transform2D()); + Transform2D xform = get_global_transform_with_canvas(); + + Window *w = Object::cast_to(get_viewport()); + if (w) { + Transform2D s; + s.set_origin(w->get_position()); + + xform = s * xform; + } + + return xform; +} + Transform2D CanvasItem::get_global_transform() const { #ifdef DEBUG_ENABLED ERR_FAIL_COND_V(!is_inside_tree(), get_transform()); diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h index 6bfe3cf0c7..3f176e5f60 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -367,6 +367,7 @@ public: virtual Transform2D get_global_transform() const; virtual Transform2D get_global_transform_with_canvas() const; + virtual Transform2D get_screen_transform() const; CanvasItem *get_toplevel() const; _FORCE_INLINE_ RID get_canvas_item() const { -- cgit v1.2.3