Merge pull request #4854 from Razzlegames/screenToLocal

Conversion function for screen coords to local Canvas coords
This commit is contained in:
Juan Linietsky 2016-07-11 02:26:58 -03:00 committed by GitHub
commit b41be2d1a9
3 changed files with 28 additions and 0 deletions

View File

@ -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>

View File

@ -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"));

View File

@ -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;