From 65ae3e1d8da1d264f9b0979a0e837cd9a9cbf130 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Wed, 29 Jun 2022 20:08:30 +1000 Subject: [PATCH] Qt: Make mouse mapping opt-in (less annoying) --- .../ControllerGlobalSettingsWidget.cpp | 1 + .../ControllerGlobalSettingsWidget.ui | 105 ++++++++++-------- pcsx2-qt/Settings/InputBindingDialog.cpp | 4 +- pcsx2-qt/Settings/InputBindingDialog.h | 1 + pcsx2-qt/Settings/InputBindingWidget.cpp | 8 +- pcsx2-qt/Settings/InputBindingWidget.h | 3 + 6 files changed, 71 insertions(+), 51 deletions(-) diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp index 8d62453f50..5fabe9e039 100644 --- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp +++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp @@ -33,6 +33,7 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent, SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableSDLSource, "InputSources", "SDL", true); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableSDLEnhancedMode, "InputSources", "SDLControllerEnhancedMode", false); SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableXInputSource, "InputSources", "XInput", false); + SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableMouseMapping, "UI", "EnableMouseMapping", false); ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.multitapPort1, "Pad", "MultitapPort1", false); ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.multitapPort2, "Pad", "MultitapPort2", false); ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.pointerXInvert, "Pad", "PointerXInvert", false); diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui index a9479ceaf6..0ac675b828 100644 --- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui +++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui @@ -6,8 +6,8 @@ 0 0 - 900 - 675 + 902 + 677 @@ -91,8 +91,27 @@ Mouse/Pointer Source - - + + + + + 0 + 0 + + + + + 20 + 0 + + + + 10 + + + + + 0 @@ -116,16 +135,6 @@ - - - - Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used. - - - true - - - @@ -133,41 +142,8 @@ - - - - - 0 - 0 - - - - - 20 - 0 - - - - 10 - - - - - - - Invert - - - - - - - Vertical Sensitivity: - - - - - + + 0 @@ -210,6 +186,30 @@ + + + + Invert + + + + + + + Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used. + + + true + + + + + + + Vertical Sensitivity: + + + @@ -217,6 +217,13 @@ + + + + Enable Mouse Mapping + + + diff --git a/pcsx2-qt/Settings/InputBindingDialog.cpp b/pcsx2-qt/Settings/InputBindingDialog.cpp index 3f27132e02..b01f0b7f76 100644 --- a/pcsx2-qt/Settings/InputBindingDialog.cpp +++ b/pcsx2-qt/Settings/InputBindingDialog.cpp @@ -19,6 +19,7 @@ #include "QtHost.h" #include "QtUtils.h" #include "Settings/InputBindingDialog.h" +#include "Settings/InputBindingWidget.h" #include #include #include @@ -76,7 +77,7 @@ bool InputBindingDialog::eventFilter(QObject* watched, QEvent* event) m_new_bindings.push_back(InputManager::MakePointerButtonKey(0, button_index)); return true; } - else if (event_type == QEvent::MouseMove) + 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. // this is so we don't accidentally bind to the mouse if you bump it while reaching for your pad. @@ -125,6 +126,7 @@ void InputBindingDialog::onInputListenTimerTimeout() void InputBindingDialog::startListeningForInput(u32 timeout_in_seconds) { m_new_bindings.clear(); + m_mouse_mapping_enabled = InputBindingWidget::isMouseMappingEnabled(); m_input_listen_start_position = QCursor::pos(); m_input_listen_timer = new QTimer(this); m_input_listen_timer->setSingleShot(false); diff --git a/pcsx2-qt/Settings/InputBindingDialog.h b/pcsx2-qt/Settings/InputBindingDialog.h index 48a35cea29..510e0f12d2 100644 --- a/pcsx2-qt/Settings/InputBindingDialog.h +++ b/pcsx2-qt/Settings/InputBindingDialog.h @@ -69,4 +69,5 @@ protected: QTimer* m_input_listen_timer = nullptr; u32 m_input_listen_remaining_seconds = 0; QPoint m_input_listen_start_position{}; + bool m_mouse_mapping_enabled = false; }; diff --git a/pcsx2-qt/Settings/InputBindingWidget.cpp b/pcsx2-qt/Settings/InputBindingWidget.cpp index 86f358424e..4e38fc9756 100644 --- a/pcsx2-qt/Settings/InputBindingWidget.cpp +++ b/pcsx2-qt/Settings/InputBindingWidget.cpp @@ -56,6 +56,11 @@ InputBindingWidget::~InputBindingWidget() Q_ASSERT(!isListeningForInput()); } +bool InputBindingWidget::isMouseMappingEnabled() +{ + return Host::GetBaseBoolSettingValue("UI", "EnableMouseMapping", false); +} + void InputBindingWidget::initialize(SettingsInterface* sif, std::string section_name, std::string key_name) { m_sif = sif; @@ -126,7 +131,7 @@ bool InputBindingWidget::eventFilter(QObject* watched, QEvent* event) m_new_bindings.push_back(InputManager::MakePointerButtonKey(0, button_index)); return true; } - else if (event_type == QEvent::MouseMove) + 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. // this is so we don't accidentally bind to the mouse if you bump it while reaching for your pad. @@ -266,6 +271,7 @@ void InputBindingWidget::onInputListenTimerTimeout() void InputBindingWidget::startListeningForInput(u32 timeout_in_seconds) { m_new_bindings.clear(); + m_mouse_mapping_enabled = isMouseMappingEnabled(); m_input_listen_start_position = QCursor::pos(); m_input_listen_timer = new QTimer(this); m_input_listen_timer->setSingleShot(false); diff --git a/pcsx2-qt/Settings/InputBindingWidget.h b/pcsx2-qt/Settings/InputBindingWidget.h index 2c970e2401..c8e744b730 100644 --- a/pcsx2-qt/Settings/InputBindingWidget.h +++ b/pcsx2-qt/Settings/InputBindingWidget.h @@ -33,6 +33,8 @@ public: InputBindingWidget(QWidget* parent, SettingsInterface* sif, std::string section_name, std::string key_name); ~InputBindingWidget(); + static bool isMouseMappingEnabled(); + void initialize(SettingsInterface* sif, std::string section_name, std::string key_name); public Q_SLOTS: @@ -74,6 +76,7 @@ protected: QTimer* m_input_listen_timer = nullptr; u32 m_input_listen_remaining_seconds = 0; QPoint m_input_listen_start_position{}; + bool m_mouse_mapping_enabled = false; }; class InputVibrationBindingWidget : public QPushButton