diff options
author | Juan Linietsky <reduzio@gmail.com> | 2016-07-11 02:26:58 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-11 02:26:58 -0300 |
commit | b41be2d1a9210d03be0817871ead7aa0f8657716 (patch) | |
tree | 120f0aa240041a1e1408ceca74e85b8806989c3c | |
parent | 9397458cc0a37f4899a0dba5352a6e045ed123d8 (diff) | |
parent | 605193b22fc61913d00b4ba4801c0283646b3a00 (diff) |
Merge pull request #4854 from Razzlegames/screenToLocal
Conversion function for screen coords to local Canvas coords
-rw-r--r-- | doc/base/classes.xml | 16 | ||||
-rw-r--r-- | scene/2d/canvas_item.cpp | 11 | ||||
-rw-r--r-- | scene/2d/canvas_item.h | 1 |
3 files changed, 28 insertions, 0 deletions
diff --git a/doc/base/classes.xml b/doc/base/classes.xml index b5384cfc2b..91c768ef42 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -7339,6 +7339,22 @@ </description> </method> <method name="update"> + <method name="make_screen_coord_local" qualifiers="const"> + <return type="Vector2"> + </return> + <argument index="0" name="screen_point" type="Vector2"> + </argument> + <description> + Take a 2d screen point and convert to 2D local coords relative to this Canvas + item. If this CanvasItem is the root of a Scene, its essentially the + world coords for that scene. + </description> + </method> + <method name="make_input_local" qualifiers="const"> + <return type="InputEvent"> + </return> + <argument index="0" name="event" type="InputEvent"> + </argument> <description> Queue the CanvasItem for update. [code]NOTIFICATION_DRAW[/code] will be called on idle time to request redraw. </description> diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index bc5bff3b8e..eb4f457975 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -948,6 +948,15 @@ Ref<CanvasItemMaterial> CanvasItem::get_material() const{ return material; } +Vector2 CanvasItem::make_canvas_pos_local(const Vector2& screen_point) const { + + ERR_FAIL_COND_V(!is_inside_tree(),screen_point); + + Matrix32 local_matrix = (get_canvas_transform() * + get_global_transform()).affine_inverse(); + + return local_matrix.xform(screen_point); +} InputEvent CanvasItem::make_input_local(const InputEvent& p_event) const { @@ -1052,6 +1061,8 @@ void CanvasItem::_bind_methods() { ObjectTypeDB::bind_method(_MD("set_use_parent_material","enable"),&CanvasItem::set_use_parent_material); ObjectTypeDB::bind_method(_MD("get_use_parent_material"),&CanvasItem::get_use_parent_material); + ObjectTypeDB::bind_method(_MD("make_canvas_pos_local","screen_point"), + &CanvasItem::make_canvas_pos_local); ObjectTypeDB::bind_method(_MD("make_input_local","event"),&CanvasItem::make_input_local); BIND_VMETHOD(MethodInfo("_draw")); diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h index 8a61b449fd..b894310ce2 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -263,6 +263,7 @@ public: bool get_use_parent_material() const; InputEvent make_input_local(const InputEvent& pevent) const; + Vector2 make_canvas_pos_local(const Vector2& screen_point) const; Vector2 get_global_mouse_pos() const; Vector2 get_local_mouse_pos() const; |