configure_mouse_panning.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // SPDX-FileCopyrightText: 2023 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include <QCloseEvent>
  4. #include <QMessageBox>
  5. #include "common/settings.h"
  6. #include "ui_configure_mouse_panning.h"
  7. #include "yuzu/configuration/configure_mouse_panning.h"
  8. ConfigureMousePanning::ConfigureMousePanning(QWidget* parent,
  9. InputCommon::InputSubsystem* input_subsystem_,
  10. float right_stick_deadzone, float right_stick_range)
  11. : QDialog(parent), input_subsystem{input_subsystem_},
  12. ui(std::make_unique<Ui::ConfigureMousePanning>()) {
  13. ui->setupUi(this);
  14. SetConfiguration(right_stick_deadzone, right_stick_range);
  15. ConnectEvents();
  16. }
  17. ConfigureMousePanning::~ConfigureMousePanning() = default;
  18. void ConfigureMousePanning::closeEvent(QCloseEvent* event) {
  19. event->accept();
  20. }
  21. void ConfigureMousePanning::SetConfiguration(float right_stick_deadzone, float right_stick_range) {
  22. ui->enable->setChecked(Settings::values.mouse_panning.GetValue());
  23. ui->x_sensitivity->setValue(Settings::values.mouse_panning_x_sensitivity.GetValue());
  24. ui->y_sensitivity->setValue(Settings::values.mouse_panning_y_sensitivity.GetValue());
  25. ui->deadzone_counterweight->setValue(
  26. Settings::values.mouse_panning_deadzone_counterweight.GetValue());
  27. ui->decay_strength->setValue(Settings::values.mouse_panning_decay_strength.GetValue());
  28. ui->min_decay->setValue(Settings::values.mouse_panning_min_decay.GetValue());
  29. if (right_stick_deadzone > 0.0f || right_stick_range != 1.0f) {
  30. const QString right_stick_deadzone_str =
  31. QString::fromStdString(std::to_string(static_cast<int>(right_stick_deadzone * 100.0f)));
  32. const QString right_stick_range_str =
  33. QString::fromStdString(std::to_string(static_cast<int>(right_stick_range * 100.0f)));
  34. ui->warning_label->setText(
  35. tr("Mouse panning works better with a deadzone of 0% and a range of 100%.\nCurrent "
  36. "values are %1% and %2% respectively.")
  37. .arg(right_stick_deadzone_str, right_stick_range_str));
  38. }
  39. if (Settings::values.mouse_enabled) {
  40. ui->warning_label->setText(
  41. tr("Emulated mouse is enabled. This is incompatible with mouse panning."));
  42. }
  43. }
  44. void ConfigureMousePanning::SetDefaultConfiguration() {
  45. ui->x_sensitivity->setValue(Settings::values.mouse_panning_x_sensitivity.GetDefault());
  46. ui->y_sensitivity->setValue(Settings::values.mouse_panning_y_sensitivity.GetDefault());
  47. ui->deadzone_counterweight->setValue(
  48. Settings::values.mouse_panning_deadzone_counterweight.GetDefault());
  49. ui->decay_strength->setValue(Settings::values.mouse_panning_decay_strength.GetDefault());
  50. ui->min_decay->setValue(Settings::values.mouse_panning_min_decay.GetDefault());
  51. }
  52. void ConfigureMousePanning::ConnectEvents() {
  53. connect(ui->default_button, &QPushButton::clicked, this,
  54. &ConfigureMousePanning::SetDefaultConfiguration);
  55. connect(ui->button_box, &QDialogButtonBox::accepted, this,
  56. &ConfigureMousePanning::ApplyConfiguration);
  57. connect(ui->button_box, &QDialogButtonBox::rejected, this, [this] { reject(); });
  58. }
  59. void ConfigureMousePanning::ApplyConfiguration() {
  60. Settings::values.mouse_panning = ui->enable->isChecked();
  61. Settings::values.mouse_panning_x_sensitivity = static_cast<float>(ui->x_sensitivity->value());
  62. Settings::values.mouse_panning_y_sensitivity = static_cast<float>(ui->y_sensitivity->value());
  63. Settings::values.mouse_panning_deadzone_counterweight =
  64. static_cast<float>(ui->deadzone_counterweight->value());
  65. Settings::values.mouse_panning_decay_strength = static_cast<float>(ui->decay_strength->value());
  66. Settings::values.mouse_panning_min_decay = static_cast<float>(ui->min_decay->value());
  67. if (Settings::values.mouse_enabled && Settings::values.mouse_panning) {
  68. Settings::values.mouse_panning = false;
  69. QMessageBox::critical(
  70. this, tr("Emulated mouse is enabled"),
  71. tr("Real mouse input and mouse panning are incompatible. Please disable the "
  72. "emulated mouse in input advanced settings to allow mouse panning."));
  73. return;
  74. }
  75. accept();
  76. }