Browse Source
Merge pull request #10495 from bm01/master
Merge pull request #10495 from bm01/master
input_common: Redesign mouse panningnce_cpp
committed by
GitHub
14 changed files with 581 additions and 103 deletions
-
11src/common/settings.h
-
99src/input_common/drivers/mouse.cpp
-
2src/input_common/drivers/mouse.h
-
3src/yuzu/CMakeLists.txt
-
33src/yuzu/configuration/config.cpp
-
2src/yuzu/configuration/config.h
-
7src/yuzu/configuration/configure_input_advanced.cpp
-
37src/yuzu/configuration/configure_input_advanced.ui
-
16src/yuzu/configuration/configure_input_player.cpp
-
96src/yuzu/configuration/configure_input_player.ui
-
79src/yuzu/configuration/configure_mouse_panning.cpp
-
35src/yuzu/configuration/configure_mouse_panning.h
-
238src/yuzu/configuration/configure_mouse_panning.ui
-
26src/yuzu_cmd/default_ini.h
@ -0,0 +1,79 @@ |
|||||
|
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
|
||||
|
#include <QCloseEvent>
|
||||
|
|
||||
|
#include "common/settings.h"
|
||||
|
#include "ui_configure_mouse_panning.h"
|
||||
|
#include "yuzu/configuration/configure_mouse_panning.h"
|
||||
|
|
||||
|
ConfigureMousePanning::ConfigureMousePanning(QWidget* parent, |
||||
|
InputCommon::InputSubsystem* input_subsystem_, |
||||
|
float right_stick_deadzone, float right_stick_range) |
||||
|
: QDialog(parent), input_subsystem{input_subsystem_}, |
||||
|
ui(std::make_unique<Ui::ConfigureMousePanning>()) { |
||||
|
ui->setupUi(this); |
||||
|
SetConfiguration(right_stick_deadzone, right_stick_range); |
||||
|
ConnectEvents(); |
||||
|
} |
||||
|
|
||||
|
ConfigureMousePanning::~ConfigureMousePanning() = default; |
||||
|
|
||||
|
void ConfigureMousePanning::closeEvent(QCloseEvent* event) { |
||||
|
event->accept(); |
||||
|
} |
||||
|
|
||||
|
void ConfigureMousePanning::SetConfiguration(float right_stick_deadzone, float right_stick_range) { |
||||
|
ui->enable->setChecked(Settings::values.mouse_panning.GetValue()); |
||||
|
ui->x_sensitivity->setValue(Settings::values.mouse_panning_x_sensitivity.GetValue()); |
||||
|
ui->y_sensitivity->setValue(Settings::values.mouse_panning_y_sensitivity.GetValue()); |
||||
|
ui->deadzone_x_counterweight->setValue( |
||||
|
Settings::values.mouse_panning_deadzone_x_counterweight.GetValue()); |
||||
|
ui->deadzone_y_counterweight->setValue( |
||||
|
Settings::values.mouse_panning_deadzone_y_counterweight.GetValue()); |
||||
|
ui->decay_strength->setValue(Settings::values.mouse_panning_decay_strength.GetValue()); |
||||
|
ui->min_decay->setValue(Settings::values.mouse_panning_min_decay.GetValue()); |
||||
|
|
||||
|
if (right_stick_deadzone > 0.0f || right_stick_range != 1.0f) { |
||||
|
ui->warning_label->setText(QString::fromStdString( |
||||
|
"Mouse panning works better with a deadzone of 0% and a range of 100%.\n" |
||||
|
"Current values are " + |
||||
|
std::to_string(static_cast<int>(right_stick_deadzone * 100.0f)) + "% and " + |
||||
|
std::to_string(static_cast<int>(right_stick_range * 100.0f)) + "% respectively.")); |
||||
|
} else { |
||||
|
ui->warning_label->hide(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void ConfigureMousePanning::SetDefaultConfiguration() { |
||||
|
ui->x_sensitivity->setValue(Settings::values.mouse_panning_x_sensitivity.GetDefault()); |
||||
|
ui->y_sensitivity->setValue(Settings::values.mouse_panning_y_sensitivity.GetDefault()); |
||||
|
ui->deadzone_x_counterweight->setValue( |
||||
|
Settings::values.mouse_panning_deadzone_x_counterweight.GetDefault()); |
||||
|
ui->deadzone_y_counterweight->setValue( |
||||
|
Settings::values.mouse_panning_deadzone_y_counterweight.GetDefault()); |
||||
|
ui->decay_strength->setValue(Settings::values.mouse_panning_decay_strength.GetDefault()); |
||||
|
ui->min_decay->setValue(Settings::values.mouse_panning_min_decay.GetDefault()); |
||||
|
} |
||||
|
|
||||
|
void ConfigureMousePanning::ConnectEvents() { |
||||
|
connect(ui->default_button, &QPushButton::clicked, this, |
||||
|
&ConfigureMousePanning::SetDefaultConfiguration); |
||||
|
connect(ui->button_box, &QDialogButtonBox::accepted, this, |
||||
|
&ConfigureMousePanning::ApplyConfiguration); |
||||
|
connect(ui->button_box, &QDialogButtonBox::rejected, this, [this] { reject(); }); |
||||
|
} |
||||
|
|
||||
|
void ConfigureMousePanning::ApplyConfiguration() { |
||||
|
Settings::values.mouse_panning = ui->enable->isChecked(); |
||||
|
Settings::values.mouse_panning_x_sensitivity = static_cast<float>(ui->x_sensitivity->value()); |
||||
|
Settings::values.mouse_panning_y_sensitivity = static_cast<float>(ui->y_sensitivity->value()); |
||||
|
Settings::values.mouse_panning_deadzone_x_counterweight = |
||||
|
static_cast<float>(ui->deadzone_x_counterweight->value()); |
||||
|
Settings::values.mouse_panning_deadzone_y_counterweight = |
||||
|
static_cast<float>(ui->deadzone_y_counterweight->value()); |
||||
|
Settings::values.mouse_panning_decay_strength = static_cast<float>(ui->decay_strength->value()); |
||||
|
Settings::values.mouse_panning_min_decay = static_cast<float>(ui->min_decay->value()); |
||||
|
|
||||
|
accept(); |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <memory> |
||||
|
#include <QDialog> |
||||
|
|
||||
|
namespace InputCommon { |
||||
|
class InputSubsystem; |
||||
|
} |
||||
|
|
||||
|
namespace Ui { |
||||
|
class ConfigureMousePanning; |
||||
|
} |
||||
|
|
||||
|
class ConfigureMousePanning : public QDialog { |
||||
|
Q_OBJECT |
||||
|
public: |
||||
|
explicit ConfigureMousePanning(QWidget* parent, InputCommon::InputSubsystem* input_subsystem_, |
||||
|
float right_stick_deadzone, float right_stick_range); |
||||
|
~ConfigureMousePanning() override; |
||||
|
|
||||
|
public slots: |
||||
|
void ApplyConfiguration(); |
||||
|
|
||||
|
private: |
||||
|
void closeEvent(QCloseEvent* event) override; |
||||
|
void SetConfiguration(float right_stick_deadzone, float right_stick_range); |
||||
|
void SetDefaultConfiguration(); |
||||
|
void ConnectEvents(); |
||||
|
|
||||
|
InputCommon::InputSubsystem* input_subsystem; |
||||
|
std::unique_ptr<Ui::ConfigureMousePanning> ui; |
||||
|
}; |
||||
@ -0,0 +1,238 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<ui version="4.0"> |
||||
|
<class>ConfigureMousePanning</class> |
||||
|
<widget class="QDialog" name="configure_mouse_panning"> |
||||
|
<property name="windowTitle"> |
||||
|
<string>Configure mouse panning</string> |
||||
|
</property> |
||||
|
<layout class="QVBoxLayout"> |
||||
|
<item> |
||||
|
<widget class="QCheckBox" name="enable"> |
||||
|
<property name="text"> |
||||
|
<string>Enable</string> |
||||
|
</property> |
||||
|
<property name="toolTip"> |
||||
|
<string>Can be toggled via a hotkey</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item> |
||||
|
<layout class="QHBoxLayout"> |
||||
|
<item> |
||||
|
<widget class="QGroupBox" name="sensitivity_box"> |
||||
|
<property name="title"> |
||||
|
<string>Sensitivity</string> |
||||
|
</property> |
||||
|
<layout class="QGridLayout"> |
||||
|
<item row="0" column="0"> |
||||
|
<widget class="QLabel" name="x_sensitivity_label"> |
||||
|
<property name="text"> |
||||
|
<string>Horizontal</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="0" column="1"> |
||||
|
<widget class="QSpinBox" name="x_sensitivity"> |
||||
|
<property name="alignment"> |
||||
|
<set>Qt::AlignCenter</set> |
||||
|
</property> |
||||
|
<property name="suffix"> |
||||
|
<string>%</string> |
||||
|
</property> |
||||
|
<property name="minimum"> |
||||
|
<number>1</number> |
||||
|
</property> |
||||
|
<property name="maximum"> |
||||
|
<number>100</number> |
||||
|
</property> |
||||
|
<property name="value"> |
||||
|
<number>50</number> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="1" column="0"> |
||||
|
<widget class="QLabel" name="y_sensitivity_label"> |
||||
|
<property name="text"> |
||||
|
<string>Vertical</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="1" column="1"> |
||||
|
<widget class="QSpinBox" name="y_sensitivity"> |
||||
|
<property name="alignment"> |
||||
|
<set>Qt::AlignCenter</set> |
||||
|
</property> |
||||
|
<property name="suffix"> |
||||
|
<string>%</string> |
||||
|
</property> |
||||
|
<property name="minimum"> |
||||
|
<number>1</number> |
||||
|
</property> |
||||
|
<property name="maximum"> |
||||
|
<number>100</number> |
||||
|
</property> |
||||
|
<property name="value"> |
||||
|
<number>50</number> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
</layout> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item> |
||||
|
<widget class="QGroupBox" name="deadzone_counterweight_box"> |
||||
|
<property name="title"> |
||||
|
<string>Deadzone counterweight</string> |
||||
|
</property> |
||||
|
<property name="toolTip"> |
||||
|
<string>Counteracts a game's built-in deadzone</string> |
||||
|
</property> |
||||
|
<layout class="QGridLayout"> |
||||
|
<item row="0" column="0"> |
||||
|
<widget class="QLabel" name="deadzone_x_counterweight_label"> |
||||
|
<property name="text"> |
||||
|
<string>Horizontal</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="0" column="1"> |
||||
|
<widget class="QSpinBox" name="deadzone_x_counterweight"> |
||||
|
<property name="alignment"> |
||||
|
<set>Qt::AlignCenter</set> |
||||
|
</property> |
||||
|
<property name="suffix"> |
||||
|
<string>%</string> |
||||
|
</property> |
||||
|
<property name="minimum"> |
||||
|
<number>0</number> |
||||
|
</property> |
||||
|
<property name="maximum"> |
||||
|
<number>100</number> |
||||
|
</property> |
||||
|
<property name="value"> |
||||
|
<number>0</number> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="1" column="0"> |
||||
|
<widget class="QLabel" name="deadzone_y_counterweight_label"> |
||||
|
<property name="text"> |
||||
|
<string>Vertical</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="1" column="1"> |
||||
|
<widget class="QSpinBox" name="deadzone_y_counterweight"> |
||||
|
<property name="alignment"> |
||||
|
<set>Qt::AlignCenter</set> |
||||
|
</property> |
||||
|
<property name="suffix"> |
||||
|
<string>%</string> |
||||
|
</property> |
||||
|
<property name="minimum"> |
||||
|
<number>0</number> |
||||
|
</property> |
||||
|
<property name="maximum"> |
||||
|
<number>100</number> |
||||
|
</property> |
||||
|
<property name="value"> |
||||
|
<number>0</number> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
</layout> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item> |
||||
|
<widget class="QGroupBox" name="decay_box"> |
||||
|
<property name="title"> |
||||
|
<string>Stick decay</string> |
||||
|
</property> |
||||
|
<layout class="QGridLayout"> |
||||
|
<item row="0" column="0"> |
||||
|
<widget class="QLabel" name="decay_strength_label"> |
||||
|
<property name="text"> |
||||
|
<string>Strength</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="0" column="1"> |
||||
|
<widget class="QSpinBox" name="decay_strength"> |
||||
|
<property name="alignment"> |
||||
|
<set>Qt::AlignCenter</set> |
||||
|
</property> |
||||
|
<property name="suffix"> |
||||
|
<string>%</string> |
||||
|
</property> |
||||
|
<property name="minimum"> |
||||
|
<number>0</number> |
||||
|
</property> |
||||
|
<property name="maximum"> |
||||
|
<number>100</number> |
||||
|
</property> |
||||
|
<property name="value"> |
||||
|
<number>22</number> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="1" column="0"> |
||||
|
<widget class="QLabel" name="min_decay_label"> |
||||
|
<property name="text"> |
||||
|
<string>Minimum</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item row="1" column="1"> |
||||
|
<widget class="QSpinBox" name="min_decay"> |
||||
|
<property name="alignment"> |
||||
|
<set>Qt::AlignCenter</set> |
||||
|
</property> |
||||
|
<property name="suffix"> |
||||
|
<string>%</string> |
||||
|
</property> |
||||
|
<property name="minimum"> |
||||
|
<number>0</number> |
||||
|
</property> |
||||
|
<property name="maximum"> |
||||
|
<number>100</number> |
||||
|
</property> |
||||
|
<property name="value"> |
||||
|
<number>5</number> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
</layout> |
||||
|
</widget> |
||||
|
</item> |
||||
|
</layout> |
||||
|
</item> |
||||
|
<item> |
||||
|
<widget class="QLabel" name="warning_label"> |
||||
|
<property name="text"> |
||||
|
<string/> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item> |
||||
|
<layout class="QHBoxLayout"> |
||||
|
<item> |
||||
|
<widget class="QPushButton" name="default_button"> |
||||
|
<property name="text"> |
||||
|
<string>Default</string> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
<item> |
||||
|
<widget class="QDialogButtonBox" name="button_box"> |
||||
|
<property name="standardButtons"> |
||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
||||
|
</property> |
||||
|
</widget> |
||||
|
</item> |
||||
|
</layout> |
||||
|
</item> |
||||
|
</layout> |
||||
|
</widget> |
||||
|
<resources/> |
||||
|
<connections/> |
||||
|
</ui> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue