diff --git a/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp b/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp index d1e09ac973b7..96a5040704b9 100644 --- a/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp +++ b/Source/Core/DolphinQt/Config/Mapping/MappingWidget.cpp @@ -172,7 +172,9 @@ QGroupBox* MappingWidget::CreateGroupBox(const QString& name, ControllerEmu::Con { QPushButton* mouse_button = new QPushButton(tr("Use Mouse Controlled Pointing")); form_layout->insertRow(2, mouse_button); - connect(mouse_button, &QCheckBox::clicked, [this, group] { + + using ControllerEmu::Cursor; + connect(mouse_button, &QCheckBox::clicked, [this, group = static_cast(group)] { std::string default_device = g_controller_interface.GetDefaultDeviceString() + ":"; const std::string controller_device = GetController()->GetDefaultDevice().ToString() + ":"; if (default_device == controller_device) @@ -183,6 +185,9 @@ QGroupBox* MappingWidget::CreateGroupBox(const QString& name, ControllerEmu::Con group->SetControlExpression(1, fmt::format("`{}Cursor Y+`", default_device)); group->SetControlExpression(2, fmt::format("`{}Cursor X-`", default_device)); group->SetControlExpression(3, fmt::format("`{}Cursor X+`", default_device)); + + group->SetRelativeInput(false); + emit ConfigChanged(); GetController()->UpdateReferences(g_controller_interface); }); diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp index 98784c00ae9a..0ba4bfa3ea4d 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.cpp @@ -181,6 +181,11 @@ ControlState Cursor::GetVerticalOffset() const return m_vertical_offset_setting.GetValue() / 100; } +void Cursor::SetRelativeInput(bool value) +{ + m_relative_setting.SetValue(value); +} + bool Cursor::StateData::IsVisible() const { return !std::isnan(x); diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.h b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.h index 3710a40d92e6..7b2e5f581c25 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.h +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Cursor.h @@ -40,6 +40,8 @@ class Cursor : public ReshapableInput // Vertical offset in meters. ControlState GetVerticalOffset() const; + void SetRelativeInput(bool enabled); + private: Cursor::StateData UpdateState(Cursor::ReshapeData input); diff --git a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h index b102b062e7f2..863e211caee4 100644 --- a/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h +++ b/Source/Core/InputCommon/ControllerEmu/Setting/NumericSetting.h @@ -186,7 +186,6 @@ class SettingValue bool IsSimpleValue() const { return m_input.GetExpression().empty(); } -private: void SetValue(ValueType value) { m_value = value; @@ -195,6 +194,7 @@ class SettingValue m_input.SetExpression(""); } +private: // Values are R/W by both UI and CPU threads. mutable std::atomic m_value = {};