From aeb4445cade29bec75e31ba5d9788a2c51b679bb Mon Sep 17 00:00:00 2001
From: SideProjectsLab <84940532+sideprojectslab@users.noreply.github.com>
Date: Sun, 12 Feb 2023 00:58:58 +0100
Subject: [PATCH] Qt/Input: Improved how mouse movements are mapped to analog
(#7910)
---
pcsx2-qt/CMakeLists.txt | 1 +
.../ControllerGlobalSettingsWidget.cpp | 49 +-
.../Settings/ControllerGlobalSettingsWidget.h | 14 +
.../ControllerGlobalSettingsWidget.ui | 315 +++++--------
.../Settings/ControllerMouseSettingsDialog.ui | 417 ++++++++++++++++++
pcsx2-qt/pcsx2-qt.vcxproj | 5 +-
pcsx2-qt/pcsx2-qt.vcxproj.filters | 3 +
.../resources/icons/black/svg/mouse-line.svg | 1 +
.../resources/icons/white/svg/mouse-line.svg | 1 +
pcsx2-qt/resources/resources.qrc | 2 +
pcsx2/Frontend/InputManager.cpp | 45 +-
pcsx2/PAD/Host/PAD.cpp | 14 +-
12 files changed, 633 insertions(+), 234 deletions(-)
create mode 100644 pcsx2-qt/Settings/ControllerMouseSettingsDialog.ui
create mode 100644 pcsx2-qt/resources/icons/black/svg/mouse-line.svg
create mode 100644 pcsx2-qt/resources/icons/white/svg/mouse-line.svg
diff --git a/pcsx2-qt/CMakeLists.txt b/pcsx2-qt/CMakeLists.txt
index 5f3f37f75d..39134fcc3e 100644
--- a/pcsx2-qt/CMakeLists.txt
+++ b/pcsx2-qt/CMakeLists.txt
@@ -58,6 +58,7 @@ target_sources(pcsx2-qt PRIVATE
Settings/ControllerGlobalSettingsWidget.ui
Settings/ControllerMacroEditWidget.ui
Settings/ControllerMacroWidget.ui
+ Settings/ControllerMouseSettingsDialog.ui
Settings/ControllerSettingsDialog.cpp
Settings/ControllerSettingsDialog.h
Settings/ControllerSettingsDialog.ui
diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp
index e203a3c720..9382f8f862 100644
--- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp
+++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.cpp
@@ -45,10 +45,10 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
#endif
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableMouseMapping, "UI", "EnableMouseMapping", false);
+ connect(m_ui.mouseSettings, &QToolButton::clicked, this, &ControllerGlobalSettingsWidget::mouseSettingsClicked);
+
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.multitapPort1, "Pad", "MultitapPort1", false);
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.multitapPort2, "Pad", "MultitapPort2", false);
- ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerXScale, "Pad", "PointerXScale", 8.0f);
- ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerYScale, "Pad", "PointerYScale", 8.0f);
#ifdef _WIN32
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.enableXInputSource, "InputSources", "XInput", false);
@@ -81,13 +81,6 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
for (QCheckBox* cb : {m_ui.multitapPort1, m_ui.multitapPort2})
connect(cb, &QCheckBox::stateChanged, this, [this]() { emit bindingSetupChanged(); });
- connect(m_ui.pointerXScale, &QSlider::valueChanged, this,
- [this](int value) { m_ui.pointerXScaleLabel->setText(QStringLiteral("%1").arg(value)); });
- connect(m_ui.pointerYScale, &QSlider::valueChanged, this,
- [this](int value) { m_ui.pointerYScaleLabel->setText(QStringLiteral("%1").arg(value)); });
- m_ui.pointerXScaleLabel->setText(QStringLiteral("%1").arg(m_ui.pointerXScale->value()));
- m_ui.pointerYScaleLabel->setText(QStringLiteral("%1").arg(m_ui.pointerYScale->value()));
-
updateSDLOptionsEnabled();
}
@@ -128,6 +121,12 @@ void ControllerGlobalSettingsWidget::ledSettingsClicked()
dialog.exec();
}
+void ControllerGlobalSettingsWidget::mouseSettingsClicked()
+{
+ ControllerMouseSettingsDialog dialog(this, m_dialog);
+ dialog.exec();
+}
+
ControllerLEDSettingsDialog::ControllerLEDSettingsDialog(QWidget* parent, ControllerSettingsDialog* dialog)
: QDialog(parent)
, m_dialog(dialog)
@@ -156,3 +155,35 @@ void ControllerLEDSettingsDialog::linkButton(ColorPickerButton* button, u32 play
});
#endif
}
+
+ControllerMouseSettingsDialog::ControllerMouseSettingsDialog(QWidget* parent, ControllerSettingsDialog* dialog)
+ : QDialog(parent)
+{
+ m_ui.setupUi(this);
+
+ SettingsInterface* sif = dialog->getProfileSettingsInterface();
+
+ m_ui.icon->setPixmap(QIcon::fromTheme(QStringLiteral("mouse-line")).pixmap(32, 32));
+
+ ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerXSpeedSlider, "Pad", "PointerXSpeed", 40.0f);
+ ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerYSpeedSlider, "Pad", "PointerYSpeed", 40.0f);
+ ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerXDeadZoneSlider, "Pad", "PointerXDeadZone", 20.0f);
+ ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerYDeadZoneSlider, "Pad", "PointerYDeadZone", 20.0f);
+ ControllerSettingWidgetBinder::BindWidgetToInputProfileFloat(sif, m_ui.pointerInertiaSlider, "Pad", "PointerInertia", 10.0f);
+
+ connect(m_ui.pointerXSpeedSlider, &QSlider::valueChanged, this, [this](int value) { m_ui.pointerXSpeedVal->setText(QStringLiteral("%1").arg(value)); });
+ connect(m_ui.pointerYSpeedSlider, &QSlider::valueChanged, this, [this](int value) { m_ui.pointerYSpeedVal->setText(QStringLiteral("%1").arg(value)); });
+ connect(m_ui.pointerXDeadZoneSlider, &QSlider::valueChanged, this, [this](int value) { m_ui.pointerXDeadZoneVal->setText(QStringLiteral("%1").arg(value)); });
+ connect(m_ui.pointerYDeadZoneSlider, &QSlider::valueChanged, this, [this](int value) { m_ui.pointerYDeadZoneVal->setText(QStringLiteral("%1").arg(value)); });
+ connect(m_ui.pointerInertiaSlider, &QSlider::valueChanged, this, [this](int value) { m_ui.pointerInertiaVal->setText(QStringLiteral("%1").arg(value)); });
+
+ m_ui.pointerXSpeedVal->setText(QStringLiteral("%1").arg(m_ui.pointerXSpeedSlider->value()));
+ m_ui.pointerYSpeedVal->setText(QStringLiteral("%1").arg(m_ui.pointerYSpeedSlider->value()));
+ m_ui.pointerXDeadZoneVal->setText(QStringLiteral("%1").arg(m_ui.pointerXDeadZoneSlider->value()));
+ m_ui.pointerYDeadZoneVal->setText(QStringLiteral("%1").arg(m_ui.pointerYDeadZoneSlider->value()));
+ m_ui.pointerInertiaVal->setText(QStringLiteral("%1").arg(m_ui.pointerInertiaSlider->value()));
+
+ connect(m_ui.buttonBox->button(QDialogButtonBox::Close), &QPushButton::clicked, this, &QDialog::accept);
+}
+
+ControllerMouseSettingsDialog::~ControllerMouseSettingsDialog() = default;
diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.h b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.h
index e748c523cd..9c4b0954cc 100644
--- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.h
+++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.h
@@ -24,6 +24,7 @@
#include "ui_ControllerGlobalSettingsWidget.h"
#include "ui_ControllerLEDSettingsDialog.h"
+#include "ui_ControllerMouseSettingsDialog.h"
class ControllerSettingsDialog;
@@ -44,6 +45,7 @@ Q_SIGNALS:
private Q_SLOTS:
void updateSDLOptionsEnabled();
void ledSettingsClicked();
+ void mouseSettingsClicked();
private:
Ui::ControllerGlobalSettingsWidget m_ui;
@@ -64,3 +66,15 @@ private:
Ui::ControllerLEDSettingsDialog m_ui;
ControllerSettingsDialog* m_dialog;
};
+
+class ControllerMouseSettingsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ ControllerMouseSettingsDialog(QWidget* parent, ControllerSettingsDialog* dialog);
+ ~ControllerMouseSettingsDialog();
+
+private:
+ Ui::ControllerMouseSettingsDialog m_ui;
+};
diff --git a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui
index e01f940672..f5c1a96bba 100644
--- a/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui
+++ b/pcsx2-qt/Settings/ControllerGlobalSettingsWidget.ui
@@ -7,7 +7,7 @@
0
0
902
- 677
+ 583
@@ -26,6 +26,32 @@
0
+ -
+
+
+ Profile Settings
+
+
+
-
+
+
+ When this option is enabled, hotkeys can be set in this input profile, and will be used instead of the global hotkeys. By default, hotkeys are always shared between all profiles.
+
+
+ true
+
+
+
+ -
+
+
+ Use Per-Profile Hotkeys
+
+
+
+
+
+
-
@@ -65,8 +91,7 @@
- ..
-
+ ..
@@ -75,6 +100,19 @@
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 45
+
+
+
+
-
@@ -101,71 +139,6 @@
- -
-
-
- DInput Source
-
-
-
-
-
-
- The DInput source provides support for legacy controllers which do not support XInput. Accessing these controllers via SDL instead is recommended, but DirectInput can be used if they are not compatible with SDL.
-
-
- true
-
-
-
- -
-
-
- Enable DInput Input Source
-
-
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 45
-
-
-
-
- -
-
-
- Profile Settings
-
-
-
-
-
-
- When this option is enabled, hotkeys can be set in this input profile, and will be used instead of the global hotkeys. By default, hotkeys are always shared between all profiles.
-
-
- true
-
-
-
- -
-
-
- Use Per-Profile Hotkeys
-
-
-
-
-
-
-
@@ -199,146 +172,6 @@
- -
-
-
- Mouse/Pointer Source
-
-
-
-
-
-
- Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used.
-
-
- true
-
-
-
- -
-
-
- Horizontal Sensitivity:
-
-
-
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 150
- 0
-
-
-
- 1
-
-
- 30
-
-
- Qt::Horizontal
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 20
- 0
-
-
-
- 10
-
-
-
-
-
- -
-
-
- Vertical Sensitivity:
-
-
-
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 150
- 0
-
-
-
- 1
-
-
- 30
-
-
- Qt::Horizontal
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 20
- 0
-
-
-
- 10
-
-
-
-
-
- -
-
-
-
-
-
- Enable Mouse Mapping
-
-
-
-
-
-
-
-
-
@@ -364,6 +197,72 @@
+ -
+
+
+ DInput Source
+
+
+
-
+
+
+ The DInput source provides support for legacy controllers which do not support XInput. Accessing these controllers via SDL instead is recommended, but DirectInput can be used if they are not compatible with SDL.
+
+
+ true
+
+
+
+ -
+
+
+ Enable DInput Input Source
+
+
+
+
+
+
+ -
+
+
+ Mouse/Pointer Source
+
+
+
-
+
+
+ PCSX2 allows you to use your mouse to simulate analog stick movement.
+
+
+ true
+
+
+
+ -
+
+
-
+
+
+ Enable Mouse Mapping
+
+
+
+ -
+
+
+ Controller LED Settings
+
+
+ Settings...
+
+
+
+
+
+
+
+
diff --git a/pcsx2-qt/Settings/ControllerMouseSettingsDialog.ui b/pcsx2-qt/Settings/ControllerMouseSettingsDialog.ui
new file mode 100644
index 0000000000..766f3a62d1
--- /dev/null
+++ b/pcsx2-qt/Settings/ControllerMouseSettingsDialog.ui
@@ -0,0 +1,417 @@
+
+
+ ControllerMouseSettingsDialog
+
+
+
+ 0
+ 0
+ 654
+ 169
+
+
+
+ Mouse Mapping Settings
+
+
+ -
+
+
+ QDialogButtonBox::Close
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 70
+ 0
+
+
+
+ Y Speed
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+ 100
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+ 10
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 70
+ 0
+
+
+
+ X Speed
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+ 100
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+ 10
+
+
+
+
+
+ -
+
+
+ 10
+
+
-
+
+
+
+ 32
+ 32
+
+
+
+
+ 32
+ 32
+
+
+
+
+ -
+
+
+ <html><head/><body><p><span style=" font-weight:700;">Mouse Mapping Settings</span><br/>These settings fine-tune the behavior when mapping a mouse to the emulated controller.</p></body></html>
+
+
+ Qt::RichText
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+ true
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 70
+ 0
+
+
+
+ Inertia
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+ 100
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+ 10
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 70
+ 0
+
+
+
+ X Dead Zone
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+ 100
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+ 10
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 70
+ 0
+
+
+
+ Y Dead Zone
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+ 100
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 30
+ 0
+
+
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pcsx2-qt/pcsx2-qt.vcxproj b/pcsx2-qt/pcsx2-qt.vcxproj
index bb9c9341f4..8f11b81e78 100644
--- a/pcsx2-qt/pcsx2-qt.vcxproj
+++ b/pcsx2-qt/pcsx2-qt.vcxproj
@@ -423,6 +423,9 @@
Document
+
+ Document
+
@@ -439,4 +442,4 @@
-
+
\ No newline at end of file
diff --git a/pcsx2-qt/pcsx2-qt.vcxproj.filters b/pcsx2-qt/pcsx2-qt.vcxproj.filters
index 15d9889b58..0049d2e818 100644
--- a/pcsx2-qt/pcsx2-qt.vcxproj.filters
+++ b/pcsx2-qt/pcsx2-qt.vcxproj.filters
@@ -583,6 +583,9 @@
Settings
+
+ Settings
+
diff --git a/pcsx2-qt/resources/icons/black/svg/mouse-line.svg b/pcsx2-qt/resources/icons/black/svg/mouse-line.svg
new file mode 100644
index 0000000000..3826636c94
--- /dev/null
+++ b/pcsx2-qt/resources/icons/black/svg/mouse-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/pcsx2-qt/resources/icons/white/svg/mouse-line.svg b/pcsx2-qt/resources/icons/white/svg/mouse-line.svg
new file mode 100644
index 0000000000..1524cb638e
--- /dev/null
+++ b/pcsx2-qt/resources/icons/white/svg/mouse-line.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/pcsx2-qt/resources/resources.qrc b/pcsx2-qt/resources/resources.qrc
index 676395d341..d9797a5ebe 100644
--- a/pcsx2-qt/resources/resources.qrc
+++ b/pcsx2-qt/resources/resources.qrc
@@ -40,6 +40,7 @@
icons/black/svg/lightbulb-line.svg
icons/black/svg/list-check.svg
icons/black/svg/login-box-line.svg
+ icons/black/svg/mouse-line.svg
icons/black/svg/pause-line.svg
icons/black/svg/play-line.svg
icons/black/svg/price-tag-3-line.svg
@@ -100,6 +101,7 @@
icons/white/svg/lightbulb-line.svg
icons/white/svg/list-check.svg
icons/white/svg/login-box-line.svg
+ icons/white/svg/mouse-line.svg
icons/white/svg/pause-line.svg
icons/white/svg/play-line.svg
icons/white/svg/price-tag-3-line.svg
diff --git a/pcsx2/Frontend/InputManager.cpp b/pcsx2/Frontend/InputManager.cpp
index 7ca89dfecc..be675737a6 100644
--- a/pcsx2/Frontend/InputManager.cpp
+++ b/pcsx2/Frontend/InputManager.cpp
@@ -160,7 +160,11 @@ struct PointerAxisState
static std::array(InputPointerAxis::Count)>, InputManager::MAX_POINTER_DEVICES> s_host_pointer_positions;
static std::array(InputPointerAxis::Count)>, InputManager::MAX_POINTER_DEVICES>
s_pointer_state;
-static std::array(InputPointerAxis::Count)> s_pointer_axis_scale;
+static std::array s_pointer_axis_speed;
+static std::array s_pointer_axis_dead_zone;
+static std::array s_pointer_axis_range;
+static std::array s_pointer_pos = {0.0f, 0.0f};
+static float s_pointer_inertia = 0.0f;
using PointerMoveCallback = std::function;
using KeyboardEventCallback = std::function;
@@ -950,15 +954,30 @@ void InputManager::GenerateRelativeMouseEvents()
{
for (u32 axis = 0; axis < static_cast(static_cast(InputPointerAxis::Count)); axis++)
{
+ const InputBindingKey key(MakePointerAxisKey(device, static_cast(axis)));
+
PointerAxisState& state = s_pointer_state[device][axis];
const float delta = static_cast(state.delta.exchange(0, std::memory_order_acquire)) / 65536.0f;
- const float unclamped_value = delta * s_pointer_axis_scale[axis];
+ float value = 0.0f;
- const InputBindingKey key(MakePointerAxisKey(device, static_cast(axis)));
- if (axis >= static_cast(InputPointerAxis::WheelX) && ImGuiManager::ProcessPointerAxisEvent(key, unclamped_value))
- continue;
+ if (axis < 2)
+ {
+ s_pointer_pos[axis] += delta * s_pointer_axis_speed[axis];
+ value = std::clamp(s_pointer_pos[axis], -1.0f, 1.0f);
+ s_pointer_pos[axis] -= value;
+ s_pointer_pos[axis] *= s_pointer_inertia;
+
+ value *= s_pointer_axis_range[axis];
+ if (value > 0.0f)
+ value += s_pointer_axis_dead_zone[axis];
+ else if (value < 0.0f)
+ value -= s_pointer_axis_dead_zone[axis];
+ }
+ else
+ {
+ value = std::clamp(delta, -1.0f, 1.0f);
+ }
- const float value = std::clamp(unclamped_value, -1.0f, 1.0f);
if (value != state.last_value)
{
state.last_value = value;
@@ -1203,14 +1222,16 @@ void InputManager::ReloadBindings(SettingsInterface& si, SettingsInterface& bind
for (u32 pad = 0; pad < PAD::NUM_CONTROLLER_PORTS; pad++)
AddPadBindings(binding_si, pad, PAD::GetDefaultPadType(pad));
- for (u32 axis = 0; axis < static_cast(InputPointerAxis::Count); axis++)
+ const float ui_ctrl_range = 100.0f;
+ const float pointer_sensitivity = 0.05;
+ for (u32 axis = 0; axis <= static_cast(InputPointerAxis::Y); axis++)
{
- // From lilypad: 1 mouse pixel = 1/8th way down.
- const float default_scale = (axis <= static_cast(InputPointerAxis::Y)) ? 8.0f : 1.0f;
- s_pointer_axis_scale[axis] =
- 1.0f /
- std::max(si.GetFloatValue("Pad", fmt::format("Pointer{}Scale", s_pointer_axis_names[axis]).c_str(), default_scale), 1.0f);
+ s_pointer_axis_speed[axis] = si.GetFloatValue("Pad", fmt::format("Pointer{}Speed", s_pointer_axis_names[axis]).c_str(), 40.0f) / ui_ctrl_range * pointer_sensitivity;
+ s_pointer_axis_dead_zone[axis] = std::min(si.GetFloatValue("Pad", fmt::format("Pointer{}DeadZone", s_pointer_axis_names[axis]).c_str(), 20.0f) / ui_ctrl_range, 1.0f);
+ s_pointer_axis_range[axis] = 1.0f - s_pointer_axis_dead_zone[axis];
}
+ s_pointer_inertia = si.GetFloatValue("Pad", fmt::format("PointerInertia").c_str(), 0.0f) / ui_ctrl_range;
+ s_pointer_pos = {0.0f, 0.0f};
for (u32 port = 0; port < USB::NUM_PORTS; port++)
AddUSBBindings(binding_si, port);
diff --git a/pcsx2/PAD/Host/PAD.cpp b/pcsx2/PAD/Host/PAD.cpp
index 6ddcb1c254..fa13ec7fda 100644
--- a/pcsx2/PAD/Host/PAD.cpp
+++ b/pcsx2/PAD/Host/PAD.cpp
@@ -267,8 +267,11 @@ void PAD::SetDefaultControllerConfig(SettingsInterface& si)
#endif
si.SetBoolValue("Pad", "MultitapPort1", false);
si.SetBoolValue("Pad", "MultitapPort2", false);
- si.SetFloatValue("Pad", "PointerXScale", 8.0f);
- si.SetFloatValue("Pad", "PointerYScale", 8.0f);
+ si.SetFloatValue("Pad", "PointerXSpeed", 40.0f);
+ si.SetFloatValue("Pad", "PointerYSpeed", 40.0f);
+ si.SetFloatValue("Pad", "PointerXDeadZone", 20.0f);
+ si.SetFloatValue("Pad", "PointerYDeadZone", 20.0f);
+ si.SetFloatValue("Pad", "PointerInertia", 10.0f);
// PCSX2 Controller Settings - Default pad types and parameters.
for (u32 i = 0; i < NUM_CONTROLLER_PORTS; i++)
@@ -530,8 +533,11 @@ void PAD::CopyConfiguration(SettingsInterface* dest_si, const SettingsInterface&
dest_si->CopyBoolValue(src_si, "Pad", "MultitapPort2");
dest_si->CopyBoolValue(src_si, "Pad", "MultitapPort1");
dest_si->CopyBoolValue(src_si, "Pad", "MultitapPort2");
- dest_si->CopyFloatValue(src_si, "Pad", "PointerXScale");
- dest_si->CopyFloatValue(src_si, "Pad", "PointerYScale");
+ dest_si->CopyFloatValue(src_si, "Pad", "PointerXSpeed");
+ dest_si->CopyFloatValue(src_si, "Pad", "PointerYSpeed");
+ dest_si->CopyFloatValue(src_si, "Pad", "PointerXDeadZone");
+ dest_si->CopyFloatValue(src_si, "Pad", "PointerYDeadZone");
+ dest_si->CopyFloatValue(src_si, "Pad", "PointerInertia");
for (u32 i = 0; i < static_cast(InputSourceType::Count); i++)
{
dest_si->CopyBoolValue(src_si, "InputSources",