diff options
Diffstat (limited to 'src/input_common/mouse/mouse_input.cpp')
| -rw-r--r-- | src/input_common/mouse/mouse_input.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/input_common/mouse/mouse_input.cpp b/src/input_common/mouse/mouse_input.cpp index 10786a541..67a584d53 100644 --- a/src/input_common/mouse/mouse_input.cpp +++ b/src/input_common/mouse/mouse_input.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // Licensed under GPLv2+ | 2 | // Licensed under GPLv2+ |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include "core/settings.h" | ||
| 5 | #include "input_common/mouse/mouse_input.h" | 6 | #include "input_common/mouse/mouse_input.h" |
| 6 | 7 | ||
| 7 | namespace MouseInput { | 8 | namespace MouseInput { |
| @@ -36,6 +37,9 @@ void Mouse::UpdateThread() { | |||
| 36 | if (configuring) { | 37 | if (configuring) { |
| 37 | UpdateYuzuSettings(); | 38 | UpdateYuzuSettings(); |
| 38 | } | 39 | } |
| 40 | if (mouse_panning_timout++ > 8) { | ||
| 41 | StopPanning(); | ||
| 42 | } | ||
| 39 | std::this_thread::sleep_for(std::chrono::milliseconds(update_time)); | 43 | std::this_thread::sleep_for(std::chrono::milliseconds(update_time)); |
| 40 | } | 44 | } |
| 41 | } | 45 | } |
| @@ -65,8 +69,34 @@ void Mouse::PressButton(int x, int y, int button_) { | |||
| 65 | mouse_info[button_index].data.pressed = true; | 69 | mouse_info[button_index].data.pressed = true; |
| 66 | } | 70 | } |
| 67 | 71 | ||
| 68 | void Mouse::MouseMove(int x, int y) { | 72 | void Mouse::StopPanning() { |
| 73 | for (MouseInfo& info : mouse_info) { | ||
| 74 | if (Settings::values.mouse_panning) { | ||
| 75 | info.data.axis = {}; | ||
| 76 | info.tilt_speed = 0; | ||
| 77 | info.last_mouse_change = {}; | ||
| 78 | } | ||
| 79 | } | ||
| 80 | } | ||
| 81 | |||
| 82 | void Mouse::MouseMove(int x, int y, int center_x, int center_y) { | ||
| 69 | for (MouseInfo& info : mouse_info) { | 83 | for (MouseInfo& info : mouse_info) { |
| 84 | if (Settings::values.mouse_panning) { | ||
| 85 | const auto mouse_change = Common::MakeVec(x, y) - Common::MakeVec(center_x, center_y); | ||
| 86 | mouse_panning_timout = 0; | ||
| 87 | |||
| 88 | if (mouse_change.y == 0 && mouse_change.x == 0) { | ||
| 89 | continue; | ||
| 90 | } | ||
| 91 | |||
| 92 | info.last_mouse_change = (info.last_mouse_change * 0.8f) + (mouse_change * 0.2f); | ||
| 93 | info.data.axis = {static_cast<int>(16 * info.last_mouse_change.x), | ||
| 94 | static_cast<int>(16 * -info.last_mouse_change.y)}; | ||
| 95 | info.tilt_direction = info.last_mouse_change; | ||
| 96 | info.tilt_speed = info.tilt_direction.Normalize() * info.sensitivity; | ||
| 97 | continue; | ||
| 98 | } | ||
| 99 | |||
| 70 | if (info.data.pressed) { | 100 | if (info.data.pressed) { |
| 71 | const auto mouse_move = Common::MakeVec(x, y) - info.mouse_origin; | 101 | const auto mouse_move = Common::MakeVec(x, y) - info.mouse_origin; |
| 72 | const auto mouse_change = Common::MakeVec(x, y) - info.last_mouse_position; | 102 | const auto mouse_change = Common::MakeVec(x, y) - info.last_mouse_position; |