diff options
author | Marcel Admiraal <madmiraal@users.noreply.github.com> | 2022-01-13 09:23:53 +0000 |
---|---|---|
committer | Marcel Admiraal <madmiraal@users.noreply.github.com> | 2022-01-13 15:23:21 +0000 |
commit | 5250cdd150dbffc1387d8cc60bee7977b322117a (patch) | |
tree | ff7ab7cbc45fc09d6553c8489685d3289572ae0c | |
parent | 8fce6166cbc635b069c09b782ea67c495348abcb (diff) |
Use mouse event relative motion to calculate mouse velocity
-rw-r--r-- | core/input/input.cpp | 15 | ||||
-rw-r--r-- | platform/javascript/display_server_javascript.cpp | 3 | ||||
-rw-r--r-- | platform/linuxbsd/display_server_x11.cpp | 1 | ||||
-rw-r--r-- | platform/osx/display_server_osx.mm | 1 | ||||
-rw-r--r-- | platform/windows/display_server_windows.cpp | 4 |
5 files changed, 8 insertions, 16 deletions
diff --git a/core/input/input.cpp b/core/input/input.cpp index 26df16792d..612594f3b5 100644 --- a/core/input/input.cpp +++ b/core/input/input.cpp @@ -504,18 +504,20 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid()) { - Point2 pos = mm->get_global_position(); - if (mouse_pos != pos) { - set_mouse_position(pos); + Point2 position = mm->get_global_position(); + if (mouse_pos != position) { + set_mouse_position(position); } + Vector2 relative = mm->get_relative(); + mouse_velocity_track.update(relative); if (event_dispatch_function && emulate_touch_from_mouse && !p_is_emulated && (mm->get_button_mask() & MouseButton::LEFT) != MouseButton::NONE) { Ref<InputEventScreenDrag> drag_event; drag_event.instantiate(); - drag_event->set_position(mm->get_position()); - drag_event->set_relative(mm->get_relative()); - drag_event->set_velocity(mm->get_velocity()); + drag_event->set_position(position); + drag_event->set_relative(relative); + drag_event->set_velocity(get_last_mouse_velocity()); event_dispatch_function(drag_event); } @@ -696,7 +698,6 @@ void Input::set_gyroscope(const Vector3 &p_gyroscope) { } void Input::set_mouse_position(const Point2 &p_posf) { - mouse_velocity_track.update(p_posf - mouse_pos); mouse_pos = p_posf; } diff --git a/platform/javascript/display_server_javascript.cpp b/platform/javascript/display_server_javascript.cpp index f98e0c4c5f..c95f2ad576 100644 --- a/platform/javascript/display_server_javascript.cpp +++ b/platform/javascript/display_server_javascript.cpp @@ -137,7 +137,6 @@ int DisplayServerJavaScript::mouse_button_callback(int p_pressed, int p_button, DisplayServerJavaScript *ds = get_singleton(); Point2 pos(p_x, p_y); - Input::get_singleton()->set_mouse_position(pos); Ref<InputEventMouseButton> ev; ev.instantiate(); ev->set_position(pos); @@ -219,7 +218,6 @@ void DisplayServerJavaScript::mouse_move_callback(double p_x, double p_y, double } Point2 pos(p_x, p_y); - Input::get_singleton()->set_mouse_position(pos); Ref<InputEventMouseMotion> ev; ev.instantiate(); dom2godot_mod(ev, p_modifiers); @@ -229,7 +227,6 @@ void DisplayServerJavaScript::mouse_move_callback(double p_x, double p_y, double ev->set_global_position(pos); ev->set_relative(Vector2(p_rel_x, p_rel_y)); - Input::get_singleton()->set_mouse_position(ev->get_position()); ev->set_velocity(Input::get_singleton()->get_last_mouse_velocity()); Input::get_singleton()->parse_input_event(ev); diff --git a/platform/linuxbsd/display_server_x11.cpp b/platform/linuxbsd/display_server_x11.cpp index 747b5beeda..a525a0f183 100644 --- a/platform/linuxbsd/display_server_x11.cpp +++ b/platform/linuxbsd/display_server_x11.cpp @@ -3647,7 +3647,6 @@ void DisplayServerX11::process_events() { mm->set_button_mask((MouseButton)mouse_get_button_state()); mm->set_position(pos); mm->set_global_position(pos); - Input::get_singleton()->set_mouse_position(pos); mm->set_velocity(Input::get_singleton()->get_last_mouse_velocity()); mm->set_relative(rel); diff --git a/platform/osx/display_server_osx.mm b/platform/osx/display_server_osx.mm index 27d302a984..8ce45d14a4 100644 --- a/platform/osx/display_server_osx.mm +++ b/platform/osx/display_server_osx.mm @@ -792,7 +792,6 @@ static void _mouseDownEvent(DisplayServer::WindowID window_id, NSEvent *event, M mm->set_relative(relativeMotion); _get_key_modifier_state([event modifierFlags], mm); - Input::get_singleton()->set_mouse_position(wd.mouse_pos); Input::get_singleton()->parse_input_event(mm); } diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 091bed36ea..2768ec37e4 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -2078,7 +2078,6 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA mm->set_position(c); mm->set_global_position(c); - Input::get_singleton()->set_mouse_position(c); mm->set_velocity(Vector2(0, 0)); if (raw->data.mouse.usFlags == MOUSE_MOVE_RELATIVE) { @@ -2183,7 +2182,6 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA SetCursorPos(pos.x, pos.y); } - Input::get_singleton()->set_mouse_position(mm->get_position()); mm->set_velocity(Input::get_singleton()->get_last_mouse_velocity()); if (old_invalid) { @@ -2325,7 +2323,6 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA SetCursorPos(pos.x, pos.y); } - Input::get_singleton()->set_mouse_position(mm->get_position()); mm->set_velocity(Input::get_singleton()->get_last_mouse_velocity()); if (old_invalid) { @@ -2426,7 +2423,6 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA SetCursorPos(pos.x, pos.y); } - Input::get_singleton()->set_mouse_position(mm->get_position()); mm->set_velocity(Input::get_singleton()->get_last_mouse_velocity()); if (old_invalid) { |