From baa105ab60d9001f0da0fc4e0e6e3d6a88c2aea2 Mon Sep 17 00:00:00 2001 From: robfram Date: Thu, 4 Nov 2021 19:02:40 +0100 Subject: [PATCH] Correct Viewport get_mouse_position() inside ViewportContainer --- scene/main/viewport.cpp | 9 ++++++++- scene/main/viewport.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 3cc35ef094..90e0828497 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1448,7 +1448,7 @@ void Viewport::_vp_unhandled_input(const Ref &p_ev) { } Vector2 Viewport::get_mouse_position() const { - return (get_final_transform().affine_inverse() * _get_input_pre_xform()).xform(Input::get_singleton()->get_mouse_position() - _get_window_offset()); + return last_mousepos; } void Viewport::warp_mouse(const Vector2 &p_pos) { @@ -2793,6 +2793,11 @@ void Viewport::_post_gui_grab_click_focus() { void Viewport::input(const Ref &p_event) { ERR_FAIL_COND(!is_inside_tree()); + Ref ev_mm = p_event; + if (ev_mm.is_valid()) { + last_mousepos = ev_mm->get_position(); + } + local_input_handled = false; if (!is_input_handled()) { @@ -3423,6 +3428,8 @@ Viewport::Viewport() { local_input_handled = false; handle_input_locally = true; physics_last_id = 0; //ensures first time there will be a check + + last_mousepos = Vector2(Math_INF, Math_INF); } Viewport::~Viewport() { diff --git a/scene/main/viewport.h b/scene/main/viewport.h index 4f92a13db5..73466615d4 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -214,6 +214,7 @@ private: Size2 size_override_margin; Rect2 last_vp_rect; + Vector2 last_mousepos; bool transparent_bg; bool vflip;