diff --git a/pcsx2-qt/DisplayWidget.cpp b/pcsx2-qt/DisplayWidget.cpp index 0a3a9002e9..227d4e9e65 100644 --- a/pcsx2-qt/DisplayWidget.cpp +++ b/pcsx2-qt/DisplayWidget.cpp @@ -330,15 +330,12 @@ bool DisplayWidget::event(QEvent* event) case QEvent::Wheel: { - // wheel delta is 120 as in winapi const QPoint delta_angle(static_cast(event)->angleDelta()); - constexpr float DELTA = 120.0f; - - const float dx = std::clamp(static_cast(delta_angle.x()) / DELTA, -1.0f, 1.0f); + const float dx = std::clamp(static_cast(delta_angle.x()) / QtUtils::MOUSE_WHEEL_DELTA, -1.0f, 1.0f); if (dx != 0.0f) InputManager::UpdatePointerRelativeDelta(0, InputPointerAxis::WheelX, dx); - const float dy = std::clamp(static_cast(delta_angle.y()) / DELTA, -1.0f, 1.0f); + const float dy = std::clamp(static_cast(delta_angle.y()) / QtUtils::MOUSE_WHEEL_DELTA, -1.0f, 1.0f); if (dy != 0.0f) InputManager::UpdatePointerRelativeDelta(0, InputPointerAxis::WheelY, dy); diff --git a/pcsx2-qt/QtUtils.h b/pcsx2-qt/QtUtils.h index 3a35daf0f3..8dab030d48 100644 --- a/pcsx2-qt/QtUtils.h +++ b/pcsx2-qt/QtUtils.h @@ -36,6 +36,9 @@ class QUrl; namespace QtUtils { + /// Wheel delta is 120 as in winapi. + static constexpr float MOUSE_WHEEL_DELTA = 120.0f; + /// Marks an action as the "default" - i.e. makes the text bold. void MarkActionAsDefault(QAction* action); diff --git a/pcsx2-qt/Settings/InputBindingDialog.cpp b/pcsx2-qt/Settings/InputBindingDialog.cpp index b01f0b7f76..9dbd1b13d8 100644 --- a/pcsx2-qt/Settings/InputBindingDialog.cpp +++ b/pcsx2-qt/Settings/InputBindingDialog.cpp @@ -23,6 +23,7 @@ #include #include #include +#include // _BitScanForward() #include "pcsx2/GS/GSIntrin.h" @@ -77,6 +78,33 @@ bool InputBindingDialog::eventFilter(QObject* watched, QEvent* event) m_new_bindings.push_back(InputManager::MakePointerButtonKey(0, button_index)); return true; } + else if (event_type == QEvent::Wheel) + { + const QPoint delta_angle(static_cast(event)->angleDelta()); + const float dx = std::clamp(static_cast(delta_angle.x()) / QtUtils::MOUSE_WHEEL_DELTA, -1.0f, 1.0f); + if (dx != 0.0f) + { + InputBindingKey key(InputManager::MakePointerAxisKey(0, InputPointerAxis::WheelX)); + key.negative = (dx < 0.0f); + m_new_bindings.push_back(key); + } + + const float dy = std::clamp(static_cast(delta_angle.y()) / QtUtils::MOUSE_WHEEL_DELTA, -1.0f, 1.0f); + if (dy != 0.0f) + { + InputBindingKey key(InputManager::MakePointerAxisKey(0, InputPointerAxis::WheelY)); + key.negative = (dy < 0.0f); + m_new_bindings.push_back(key); + } + + if (dx != 0.0f || dy != 0.0f) + { + addNewBinding(); + stopListeningForInput(); + } + + return true; + } else if (event_type == QEvent::MouseMove && m_mouse_mapping_enabled) { // if we've moved more than a decent distance from the center of the widget, bind it. diff --git a/pcsx2-qt/Settings/InputBindingWidget.cpp b/pcsx2-qt/Settings/InputBindingWidget.cpp index 4e38fc9756..e6d13f87b7 100644 --- a/pcsx2-qt/Settings/InputBindingWidget.cpp +++ b/pcsx2-qt/Settings/InputBindingWidget.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -131,6 +132,33 @@ bool InputBindingWidget::eventFilter(QObject* watched, QEvent* event) m_new_bindings.push_back(InputManager::MakePointerButtonKey(0, button_index)); return true; } + else if (event_type == QEvent::Wheel) + { + const QPoint delta_angle(static_cast(event)->angleDelta()); + const float dx = std::clamp(static_cast(delta_angle.x()) / QtUtils::MOUSE_WHEEL_DELTA, -1.0f, 1.0f); + if (dx != 0.0f) + { + InputBindingKey key(InputManager::MakePointerAxisKey(0, InputPointerAxis::WheelX)); + key.negative = (dx < 0.0f); + m_new_bindings.push_back(key); + } + + const float dy = std::clamp(static_cast(delta_angle.y()) / QtUtils::MOUSE_WHEEL_DELTA, -1.0f, 1.0f); + if (dy != 0.0f) + { + InputBindingKey key(InputManager::MakePointerAxisKey(0, InputPointerAxis::WheelY)); + key.negative = (dy < 0.0f); + m_new_bindings.push_back(key); + } + + if (dx != 0.0f || dy != 0.0f) + { + setNewBinding(); + stopListeningForInput(); + } + + return true; + } else if (event_type == QEvent::MouseMove && m_mouse_mapping_enabled) { // if we've moved more than a decent distance from the center of the widget, bind it.