diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/config.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_camera.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.cpp | 18 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.ui | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.cpp | 61 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.h | 9 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_advanced.cpp | 8 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_advanced.h | 8 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_player.h | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_per_game.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_profile_manager.cpp | 6 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_ringcon.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_tas.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_touchscreen_advanced.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/shared_translation.cpp | 1 | 
15 files changed, 66 insertions, 71 deletions
| diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h index 74ec4f771..1589ba057 100644 --- a/src/yuzu/configuration/config.h +++ b/src/yuzu/configuration/config.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2014 Citra Emulator Project +// SPDX-FileCopyrightText: 2014 Citra Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later  #pragma once diff --git a/src/yuzu/configuration/configure_camera.h b/src/yuzu/configuration/configure_camera.h index 9a90512b3..3d822da7b 100644 --- a/src/yuzu/configuration/configure_camera.h +++ b/src/yuzu/configuration/configure_camera.h @@ -1,4 +1,4 @@ -// Text : Copyright 2022 yuzu Emulator Project +// Text : Copyright 2022 yuzu Emulator Project  // SPDX-License-Identifier: GPL-3.0-or-later  #pragma once diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp index b22fda746..ef421c754 100644 --- a/src/yuzu/configuration/configure_debug.cpp +++ b/src/yuzu/configuration/configure_debug.cpp @@ -27,16 +27,6 @@ ConfigureDebug::ConfigureDebug(const Core::System& system_, QWidget* parent)      connect(ui->toggle_gdbstub, &QCheckBox::toggled,              [&]() { ui->gdbport_spinbox->setEnabled(ui->toggle_gdbstub->isChecked()); }); - -    connect(ui->create_crash_dumps, &QCheckBox::stateChanged, [&](int) { -        if (crash_dump_warning_shown) { -            return; -        } -        QMessageBox::warning(this, tr("Restart Required"), -                             tr("yuzu is required to restart in order to apply this setting."), -                             QMessageBox::Ok, QMessageBox::Ok); -        crash_dump_warning_shown = true; -    });  }  ConfigureDebug::~ConfigureDebug() = default; @@ -89,13 +79,6 @@ void ConfigureDebug::SetConfiguration() {      ui->disable_web_applet->setEnabled(false);      ui->disable_web_applet->setText(tr("Web applet not compiled"));  #endif - -#ifdef YUZU_DBGHELP -    ui->create_crash_dumps->setChecked(Settings::values.create_crash_dumps.GetValue()); -#else -    ui->create_crash_dumps->setEnabled(false); -    ui->create_crash_dumps->setText(tr("MiniDump creation not compiled")); -#endif  }  void ConfigureDebug::ApplyConfiguration() { @@ -107,7 +90,6 @@ void ConfigureDebug::ApplyConfiguration() {      Settings::values.enable_fs_access_log = ui->fs_access_log->isChecked();      Settings::values.reporting_services = ui->reporting_services->isChecked();      Settings::values.dump_audio_commands = ui->dump_audio_commands->isChecked(); -    Settings::values.create_crash_dumps = ui->create_crash_dumps->isChecked();      Settings::values.quest_flag = ui->quest_flag->isChecked();      Settings::values.use_debug_asserts = ui->use_debug_asserts->isChecked();      Settings::values.use_auto_stub = ui->use_auto_stub->isChecked(); diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui index 66b8b7459..76fe98924 100644 --- a/src/yuzu/configuration/configure_debug.ui +++ b/src/yuzu/configuration/configure_debug.ui @@ -471,13 +471,6 @@             </property>            </widget>           </item> -         <item row="4" column="0"> -          <widget class="QCheckBox" name="create_crash_dumps"> -           <property name="text"> -            <string>Create Minidump After Crash</string> -           </property> -          </widget> -         </item>           <item row="3" column="0">            <widget class="QCheckBox" name="dump_audio_commands">             <property name="toolTip"> diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index 5a48e388b..02e23cce6 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -101,13 +101,13 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem,          ui->tabPlayer5, ui->tabPlayer6, ui->tabPlayer7, ui->tabPlayer8,      }; -    player_connected = { +    connected_controller_checkboxes = {          ui->checkboxPlayer1Connected, ui->checkboxPlayer2Connected, ui->checkboxPlayer3Connected,          ui->checkboxPlayer4Connected, ui->checkboxPlayer5Connected, ui->checkboxPlayer6Connected,          ui->checkboxPlayer7Connected, ui->checkboxPlayer8Connected,      }; -    std::array<QLabel*, 8> player_connected_labels = { +    std::array<QLabel*, 8> connected_controller_labels = {          ui->label,   ui->label_3, ui->label_4, ui->label_5,          ui->label_6, ui->label_7, ui->label_8, ui->label_9,      }; @@ -115,30 +115,44 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem,      for (std::size_t i = 0; i < player_tabs.size(); ++i) {          player_tabs[i]->setLayout(new QHBoxLayout(player_tabs[i]));          player_tabs[i]->layout()->addWidget(player_controllers[i]); -        connect(player_connected[i], &QCheckBox::clicked, [this, i](int checked) { -            // Ensures that the controllers are always connected in sequential order -            this->propagateMouseClickOnPlayers(i, checked, true); +        connect(player_controllers[i], &ConfigureInputPlayer::Connected, [this, i](bool checked) { +            // Ensures that connecting a controller changes the number of players +            if (connected_controller_checkboxes[i]->isChecked() != checked) { +                // Ensures that the players are always connected in sequential order +                PropagatePlayerNumberChanged(i, checked); +            } +        }); +        connect(connected_controller_checkboxes[i], &QCheckBox::clicked, [this, i](bool checked) { +            // Reconnect current controller if it was the last one checked +            // (player number was reduced by more than one) +            const bool reconnect_first = !checked && +                                         i < connected_controller_checkboxes.size() - 1 && +                                         connected_controller_checkboxes[i + 1]->isChecked(); + +            // Ensures that the players are always connected in sequential order +            PropagatePlayerNumberChanged(i, checked, reconnect_first);          });          connect(player_controllers[i], &ConfigureInputPlayer::RefreshInputDevices, this,                  &ConfigureInput::UpdateAllInputDevices);          connect(player_controllers[i], &ConfigureInputPlayer::RefreshInputProfiles, this,                  &ConfigureInput::UpdateAllInputProfiles, Qt::QueuedConnection); -        connect(player_connected[i], &QCheckBox::stateChanged, [this, i](int state) { +        connect(connected_controller_checkboxes[i], &QCheckBox::stateChanged, [this, i](int state) { +            // Keep activated controllers synced with the "Connected Controllers" checkboxes              player_controllers[i]->ConnectPlayer(state == Qt::Checked);          });          // Remove/hide all the elements that exceed max_players, if applicable.          if (i >= max_players) {              ui->tabWidget->removeTab(static_cast<int>(max_players)); -            player_connected[i]->hide(); -            player_connected_labels[i]->hide(); +            connected_controller_checkboxes[i]->hide(); +            connected_controller_labels[i]->hide();          }      }      // Only the first player can choose handheld mode so connect the signal just to player 1      connect(player_controllers[0], &ConfigureInputPlayer::HandheldStateChanged,              [this](bool is_handheld) { UpdateDockedState(is_handheld); }); -    advanced = new ConfigureInputAdvanced(this); +    advanced = new ConfigureInputAdvanced(hid_core, this);      ui->tabAdvanced->setLayout(new QHBoxLayout(ui->tabAdvanced));      ui->tabAdvanced->layout()->addWidget(advanced); @@ -175,28 +189,25 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem,      LoadConfiguration();  } -void ConfigureInput::propagateMouseClickOnPlayers(size_t player_index, bool checked, bool origin) { -    // Origin has already been toggled -    if (!origin) { -        player_connected[player_index]->setChecked(checked); -    } +void ConfigureInput::PropagatePlayerNumberChanged(size_t player_index, bool checked, +                                                  bool reconnect_current) { +    connected_controller_checkboxes[player_index]->setChecked(checked);      if (checked) {          // Check all previous buttons when checked          if (player_index > 0) { -            propagateMouseClickOnPlayers(player_index - 1, checked, false); +            PropagatePlayerNumberChanged(player_index - 1, checked);          }      } else {          // Unchecked all following buttons when unchecked -        if (player_index < player_tabs.size() - 1) { -            // Reconnect current player if it was the last one checked -            // (player number was reduced by more than one) -            if (origin && player_connected[player_index + 1]->checkState() == Qt::Checked) { -                player_connected[player_index]->setCheckState(Qt::Checked); -            } -            propagateMouseClickOnPlayers(player_index + 1, checked, false); +        if (player_index < connected_controller_checkboxes.size() - 1) { +            PropagatePlayerNumberChanged(player_index + 1, checked);          }      } + +    if (reconnect_current) { +        connected_controller_checkboxes[player_index]->setCheckState(Qt::Checked); +    }  }  QList<QWidget*> ConfigureInput::GetSubTabs() const { @@ -249,17 +260,17 @@ void ConfigureInput::LoadConfiguration() {  }  void ConfigureInput::LoadPlayerControllerIndices() { -    for (std::size_t i = 0; i < player_connected.size(); ++i) { +    for (std::size_t i = 0; i < connected_controller_checkboxes.size(); ++i) {          if (i == 0) {              auto* handheld =                  system.HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld);              if (handheld->IsConnected()) { -                player_connected[i]->setChecked(true); +                connected_controller_checkboxes[i]->setChecked(true);                  continue;              }          }          const auto* controller = system.HIDCore().GetEmulatedControllerByIndex(i); -        player_connected[i]->setChecked(controller->IsConnected()); +        connected_controller_checkboxes[i]->setChecked(controller->IsConnected());      }  } diff --git a/src/yuzu/configuration/configure_input.h b/src/yuzu/configuration/configure_input.h index abb7f7089..beb503dae 100644 --- a/src/yuzu/configuration/configure_input.h +++ b/src/yuzu/configuration/configure_input.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2016 Citra Emulator Project +// SPDX-FileCopyrightText: 2016 Citra Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later  #pragma once @@ -56,7 +56,9 @@ private:      void UpdateDockedState(bool is_handheld);      void UpdateAllInputDevices();      void UpdateAllInputProfiles(std::size_t player_index); -    void propagateMouseClickOnPlayers(size_t player_index, bool origin, bool checked); +    // Enable preceding controllers or disable following ones +    void PropagatePlayerNumberChanged(size_t player_index, bool checked, +                                      bool reconnect_current = false);      /// Load configuration settings.      void LoadConfiguration(); @@ -71,7 +73,8 @@ private:      std::array<ConfigureInputPlayer*, 8> player_controllers;      std::array<QWidget*, 8> player_tabs; -    std::array<QCheckBox*, 8> player_connected; +    // Checkboxes representing the "Connected Controllers". +    std::array<QCheckBox*, 8> connected_controller_checkboxes;      ConfigureInputAdvanced* advanced;      Core::System& system; diff --git a/src/yuzu/configuration/configure_input_advanced.cpp b/src/yuzu/configuration/configure_input_advanced.cpp index 3cfd5d439..441cea3f6 100644 --- a/src/yuzu/configuration/configure_input_advanced.cpp +++ b/src/yuzu/configuration/configure_input_advanced.cpp @@ -4,11 +4,13 @@  #include <QColorDialog>  #include "common/settings.h"  #include "core/core.h" +#include "core/hid/emulated_controller.h" +#include "core/hid/hid_core.h"  #include "ui_configure_input_advanced.h"  #include "yuzu/configuration/configure_input_advanced.h" -ConfigureInputAdvanced::ConfigureInputAdvanced(QWidget* parent) -    : QWidget(parent), ui(std::make_unique<Ui::ConfigureInputAdvanced>()) { +ConfigureInputAdvanced::ConfigureInputAdvanced(Core::HID::HIDCore& hid_core_, QWidget* parent) +    : QWidget(parent), ui(std::make_unique<Ui::ConfigureInputAdvanced>()), hid_core{hid_core_} {      ui->setupUi(this);      controllers_color_buttons = {{ @@ -123,6 +125,8 @@ void ConfigureInputAdvanced::ApplyConfiguration() {          player.button_color_left = colors[1];          player.body_color_right = colors[2];          player.button_color_right = colors[3]; + +        hid_core.GetEmulatedControllerByIndex(player_idx)->ReloadColorsFromSettings();      }      Settings::values.debug_pad_enabled = ui->debug_enabled->isChecked(); diff --git a/src/yuzu/configuration/configure_input_advanced.h b/src/yuzu/configuration/configure_input_advanced.h index fc1230284..41f822c4a 100644 --- a/src/yuzu/configuration/configure_input_advanced.h +++ b/src/yuzu/configuration/configure_input_advanced.h @@ -14,11 +14,15 @@ namespace Ui {  class ConfigureInputAdvanced;  } +namespace Core::HID { +class HIDCore; +} // namespace Core::HID +  class ConfigureInputAdvanced : public QWidget {      Q_OBJECT  public: -    explicit ConfigureInputAdvanced(QWidget* parent = nullptr); +    explicit ConfigureInputAdvanced(Core::HID::HIDCore& hid_core_, QWidget* parent = nullptr);      ~ConfigureInputAdvanced() override;      void ApplyConfiguration(); @@ -44,4 +48,6 @@ private:      std::array<std::array<QColor, 4>, 8> controllers_colors;      std::array<std::array<QPushButton*, 4>, 8> controllers_color_buttons; + +    Core::HID::HIDCore& hid_core;  }; diff --git a/src/yuzu/configuration/configure_input_player.h b/src/yuzu/configuration/configure_input_player.h index d4df43d73..fda09e925 100644 --- a/src/yuzu/configuration/configure_input_player.h +++ b/src/yuzu/configuration/configure_input_player.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2016 Citra Emulator Project +// SPDX-FileCopyrightText: 2016 Citra Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later  #pragma once @@ -75,7 +75,7 @@ public:      void ClearAll();  signals: -    /// Emitted when this controller is connected by the user. +    /// Emitted when this controller is (dis)connected by the user.      void Connected(bool connected);      /// Emitted when the Handheld mode is selected (undocked with dual joycons attached).      void HandheldStateChanged(bool is_handheld); @@ -183,9 +183,6 @@ private:      /// Stores a pair of "Connected Controllers" combobox index and Controller Type enum.      std::vector<std::pair<int, Core::HID::NpadStyleIndex>> index_controller_type_pairs; -    static constexpr int PLAYER_COUNT = 8; -    std::array<QCheckBox*, PLAYER_COUNT> player_connected_checkbox; -      /// This will be the the setting function when an input is awaiting configuration.      std::optional<std::function<void(const Common::ParamPackage&)>> input_setter; diff --git a/src/yuzu/configuration/configure_per_game.h b/src/yuzu/configuration/configure_per_game.h index 1a727f32c..cc2513001 100644 --- a/src/yuzu/configuration/configure_per_game.h +++ b/src/yuzu/configuration/configure_per_game.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later  #pragma once diff --git a/src/yuzu/configuration/configure_profile_manager.cpp b/src/yuzu/configuration/configure_profile_manager.cpp index a47089988..6d2219bf5 100644 --- a/src/yuzu/configuration/configure_profile_manager.cpp +++ b/src/yuzu/configuration/configure_profile_manager.cpp @@ -306,10 +306,10 @@ void ConfigureProfileManager::SetUserImage() {          return;      } -    // Some games crash when the profile image is too big. Resize any image bigger than 256x256 +    // Profile image must be 256x256      QImage image(image_path); -    if (image.width() > 256 || image.height() > 256) { -        image = image.scaled(256, 256, Qt::KeepAspectRatio); +    if (image.width() != 256 || image.height() != 256) { +        image = image.scaled(256, 256, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);          if (!image.save(image_path)) {              QMessageBox::warning(this, tr("Error resizing user image"),                                   tr("Unable to resize image")); diff --git a/src/yuzu/configuration/configure_ringcon.h b/src/yuzu/configuration/configure_ringcon.h index b23c27906..6fd95e2b8 100644 --- a/src/yuzu/configuration/configure_ringcon.h +++ b/src/yuzu/configuration/configure_ringcon.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later  #pragma once diff --git a/src/yuzu/configuration/configure_tas.h b/src/yuzu/configuration/configure_tas.h index 4a6b0ba4e..a91891906 100644 --- a/src/yuzu/configuration/configure_tas.h +++ b/src/yuzu/configuration/configure_tas.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later  #pragma once diff --git a/src/yuzu/configuration/configure_touchscreen_advanced.h b/src/yuzu/configuration/configure_touchscreen_advanced.h index 034dc0d46..b6fdffdc8 100644 --- a/src/yuzu/configuration/configure_touchscreen_advanced.h +++ b/src/yuzu/configuration/configure_touchscreen_advanced.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2016 Citra Emulator Project +// SPDX-FileCopyrightText: 2016 Citra Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later  #pragma once diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp index 3fe448f27..1434b1a56 100644 --- a/src/yuzu/configuration/shared_translation.cpp +++ b/src/yuzu/configuration/shared_translation.cpp @@ -156,7 +156,6 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent) {      // Ui General      INSERT(UISettings, select_user_on_boot, "Prompt for user on game boot", "");      INSERT(UISettings, pause_when_in_background, "Pause emulation when in background", ""); -    INSERT(UISettings, confirm_before_closing, "Confirm exit while emulation is running", "");      INSERT(UISettings, confirm_before_stopping, "Confirm before stopping emulation", "");      INSERT(UISettings, hide_mouse, "Hide mouse on inactivity", "");      INSERT(UISettings, controller_applet_disabled, "Disable controller applet", ""); | 
