diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index b8725e9af3..7bad2c45be 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp @@ -118,37 +118,38 @@ std::vector GetInputDevices() { std::unordered_map GetButtonMappingForDevice( const Common::ParamPackage& params) { - std::unordered_map mappings{}; + std::unordered_map mappings; if (!params.Has("class") || params.Get("class", "") == "any") { - return mappings; + return {}; } if (params.Get("class", "") == "key") { // TODO consider returning the SDL key codes for the default keybindings + return {}; } #ifdef HAVE_SDL2 if (params.Get("class", "") == "sdl") { return sdl->GetButtonMappingForDevice(params); } #endif - return mappings; + return {}; } std::unordered_map GetAnalogMappingForDevice( const Common::ParamPackage& params) { - std::unordered_map mappings{}; + std::unordered_map mappings; if (!params.Has("class") || params.Get("class", "") == "any") { - return mappings; + return {}; } if (params.Get("class", "") == "key") { // TODO consider returning the SDL key codes for the default keybindings - return mappings; + return {}; } #ifdef HAVE_SDL2 if (params.Get("class", "") == "sdl") { return sdl->GetAnalogMappingForDevice(params); } #endif - return mappings; + return {}; } namespace Polling { diff --git a/src/input_common/main.h b/src/input_common/main.h index ebc7f95333..e706c37507 100644 --- a/src/input_common/main.h +++ b/src/input_common/main.h @@ -76,7 +76,7 @@ public: /// Setup and start polling for inputs, should be called before GetNextInput /// If a device_id is provided, events should be filtered to only include events from this /// device id - virtual void Start(std::string device_id = "") = 0; + virtual void Start(const std::string& device_id = "") = 0; /// Stop polling virtual void Stop() = 0; /** diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index 35a9d45ec7..dec7540e2f 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp @@ -545,17 +545,16 @@ SDLState::~SDLState() { std::vector SDLState::GetInputDevices() { std::scoped_lock lock(joystick_map_mutex); - std::vector devices = {}; + std::vector devices; for (const auto& [key, value] : joystick_map) { for (const auto& joystick : value) { - auto controller = joystick->GetSDLGameController(); auto joy = joystick->GetSDLJoystick(); - if (controller) { + if (auto controller = joystick->GetSDLGameController()) { std::string name = fmt::format("{} {}", SDL_GameControllerName(controller), joystick->GetPort()); devices.emplace_back(Common::ParamPackage{ {"class", "sdl"}, - {"display", name}, + {"display", std::move(name)}, {"guid", joystick->GetGUID()}, {"port", std::to_string(joystick->GetPort())}, }); @@ -563,7 +562,7 @@ std::vector SDLState::GetInputDevices() { std::string name = fmt::format("{} {}", SDL_JoystickName(joy), joystick->GetPort()); devices.emplace_back(Common::ParamPackage{ {"class", "sdl"}, - {"display", name}, + {"display", std::move(name)}, {"guid", joystick->GetGUID()}, {"port", std::to_string(joystick->GetPort())}, }); @@ -624,54 +623,43 @@ Common::ParamPackage BuildHatParamPackageForButton(int port, std::string guid, u } Common::ParamPackage SDLEventToButtonParamPackage(SDLState& state, const SDL_Event& event) { - Common::ParamPackage params{}; - switch (event.type) { case SDL_JOYAXISMOTION: { const auto joystick = state.GetSDLJoystickBySDLID(event.jaxis.which); - params = BuildAnalogParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), - event.jaxis.axis, event.jaxis.value); - break; + return BuildAnalogParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jaxis.axis, event.jaxis.value); } case SDL_JOYBUTTONUP: { const auto joystick = state.GetSDLJoystickBySDLID(event.jbutton.which); - params = BuildButtonParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), - event.jbutton.button); - break; + return BuildButtonParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jbutton.button); } case SDL_JOYHATMOTION: { const auto joystick = state.GetSDLJoystickBySDLID(event.jhat.which); - params = BuildHatParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), - event.jhat.hat, event.jhat.value); - break; + return BuildHatParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jhat.hat, event.jhat.value); } } - return params; + return {}; } Common::ParamPackage BuildParamPackageForBinding(int port, const std::string& guid, const SDL_GameControllerButtonBind& binding) { - Common::ParamPackage out{}; switch (binding.bindType) { case SDL_CONTROLLER_BINDTYPE_AXIS: - out = BuildAnalogParamPackageForButton(port, guid, binding.value.axis); - break; + return BuildAnalogParamPackageForButton(port, guid, binding.value.axis); case SDL_CONTROLLER_BINDTYPE_BUTTON: - out = BuildButtonParamPackageForButton(port, guid, binding.value.button); - break; + return BuildButtonParamPackageForButton(port, guid, binding.value.button); case SDL_CONTROLLER_BINDTYPE_HAT: - out = BuildHatParamPackageForButton(port, guid, binding.value.hat.hat, - binding.value.hat.hat_mask); - break; - default: - break; + return BuildHatParamPackageForButton(port, guid, binding.value.hat.hat, + binding.value.hat.hat_mask); } - return out; -}; + return {}; +} Common::ParamPackage BuildParamPackageForAnalog(int port, const std::string& guid, int axis_x, int axis_y) { - Common::ParamPackage params{}; + Common::ParamPackage params; params.Set("engine", "sdl"); params.Set("port", port); params.Set("guid", guid); @@ -769,7 +757,7 @@ class SDLPoller : public InputCommon::Polling::DevicePoller { public: explicit SDLPoller(SDLState& state_) : state(state_) {} - void Start(std::string device_id) override { + void Start(const std::string& device_id) override { state.event_queue.Clear(); state.polling = true; } @@ -821,7 +809,7 @@ public: explicit SDLAnalogPreferredPoller(SDLState& state_) : SDLPoller(state_), button_poller(state_) {} - void Start(std::string device_id) override { + void Start(const std::string& device_id) override { SDLPoller::Start(device_id); // Load the game controller // Reset stored axes diff --git a/src/input_common/udp/udp.cpp b/src/input_common/udp/udp.cpp index 60cf471236..4b347e47e9 100644 --- a/src/input_common/udp/udp.cpp +++ b/src/input_common/udp/udp.cpp @@ -89,10 +89,9 @@ State::~State() { Input::UnregisterFactory("cemuhookudp"); } -std::vector State::GetInputDevices() { - std::vector devices = {}; +std::vector State::GetInputDevices() const { // TODO support binding udp devices - return devices; + return {}; } void State::ReloadUDPClient() { diff --git a/src/input_common/udp/udp.h b/src/input_common/udp/udp.h index 24f6e0857a..672a5c812e 100644 --- a/src/input_common/udp/udp.h +++ b/src/input_common/udp/udp.h @@ -19,7 +19,7 @@ public: State(); ~State(); void ReloadUDPClient(); - std::vector GetInputDevices(); + std::vector GetInputDevices() const; private: std::unique_ptr client; diff --git a/src/yuzu/configuration/configure_debug_controller.cpp b/src/yuzu/configuration/configure_debug_controller.cpp index 45996b73f4..72885b4b88 100644 --- a/src/yuzu/configuration/configure_debug_controller.cpp +++ b/src/yuzu/configuration/configure_debug_controller.cpp @@ -6,10 +6,10 @@ #include "yuzu/configuration/configure_debug_controller.h" ConfigureDebugController::ConfigureDebugController(QWidget* parent) - : QDialog(parent), ui(std::make_unique()) { + : QDialog(parent), ui(std::make_unique()), + debug_controller(new ConfigureInputPlayer(this, 9, nullptr, true)) { ui->setupUi(this); - debug_controller = new ConfigureInputPlayer(this, 9, nullptr, true); ui->controllerLayout->addWidget(debug_controller); connect(ui->clear_all_button, &QPushButton::clicked, this, diff --git a/src/yuzu/configuration/configure_debug_controller.h b/src/yuzu/configuration/configure_debug_controller.h index df359a4f34..36475bbea2 100644 --- a/src/yuzu/configuration/configure_debug_controller.h +++ b/src/yuzu/configuration/configure_debug_controller.h @@ -27,7 +27,7 @@ private: void changeEvent(QEvent* event) override; void RetranslateUI(); - ConfigureInputPlayer* debug_controller; - std::unique_ptr ui; + + ConfigureInputPlayer* debug_controller; }; diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index 5200d2d0e3..0d004c2f70 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -103,13 +103,14 @@ ConfigureInput::ConfigureInput(QWidget* parent) } }); connect(player_controllers[i], &ConfigureInputPlayer::RefreshInputDevices, - [&] { UpdateAllInputDevices(); }); - connect(player_connected[i], &QCheckBox::stateChanged, - [&, i](int state) { player_controllers[i]->ConnectPlayer(state == Qt::Checked); }); + [this] { UpdateAllInputDevices(); }); + connect(player_connected[i], &QCheckBox::stateChanged, [this, i](int state) { + player_controllers[i]->ConnectPlayer(state == Qt::Checked); + }); } // Only the first player can choose handheld mode so connect the signal just to player 1 connect(player_controllers[0], &ConfigureInputPlayer::HandheldStateChanged, - [&](bool is_handheld) { UpdateDockedState(is_handheld); }); + [this](bool is_handheld) { UpdateDockedState(is_handheld); }); advanced = new ConfigureInputAdvanced(this); ui->tabAdvanced->setLayout(new QHBoxLayout(ui->tabAdvanced)); @@ -182,14 +183,14 @@ void ConfigureInput::LoadPlayerControllerIndices() { void ConfigureInput::ClearAll() { // We don't have a good way to know what tab is active, but we can find out by getting the // parent of the consoleInputSettings - auto player_tab = static_cast(ui->consoleInputSettings->parent()); + auto* player_tab = static_cast(ui->consoleInputSettings->parent()); player_tab->ClearAll(); } void ConfigureInput::RestoreDefaults() { // We don't have a good way to know what tab is active, but we can find out by getting the // parent of the consoleInputSettings - auto player_tab = static_cast(ui->consoleInputSettings->parent()); + auto* player_tab = static_cast(ui->consoleInputSettings->parent()); player_tab->RestoreDefaults(); ui->radioDocked->setChecked(true); diff --git a/src/yuzu/configuration/configure_input.h b/src/yuzu/configuration/configure_input.h index 8241d23efe..78ca659dac 100644 --- a/src/yuzu/configuration/configure_input.h +++ b/src/yuzu/configuration/configure_input.h @@ -15,9 +15,9 @@ #include "ui_configure_input.h" +class QCheckBox; class QString; class QTimer; -class QCheckBox; namespace Ui { class ConfigureInput; diff --git a/src/yuzu/configuration/configure_input_advanced.cpp b/src/yuzu/configuration/configure_input_advanced.cpp index 18db04e7ea..db42b826bd 100644 --- a/src/yuzu/configuration/configure_input_advanced.cpp +++ b/src/yuzu/configuration/configure_input_advanced.cpp @@ -9,7 +9,7 @@ #include "yuzu/configuration/configure_input_advanced.h" ConfigureInputAdvanced::ConfigureInputAdvanced(QWidget* parent) - : QWidget(parent), ui(new Ui::ConfigureInputAdvanced) { + : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); controllers_color_buttons = {{ diff --git a/src/yuzu/configuration/configure_input_advanced.h b/src/yuzu/configuration/configure_input_advanced.h index d6e913675d..d8fcec52d9 100644 --- a/src/yuzu/configuration/configure_input_advanced.h +++ b/src/yuzu/configuration/configure_input_advanced.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index 4d79a51f3c..68d0d5db72 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp @@ -348,22 +348,22 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i // Player Connected checkbox connect(ui->groupConnectedController, &QGroupBox::toggled, - [&](bool checked) { emit Connected(checked); }); + [this](bool checked) { emit Connected(checked); }); // Set up controller type. Only Player 1 can choose Handheld. ui->comboControllerType->clear(); QStringList controller_types = { - QStringLiteral("Pro Controller"), - QStringLiteral("Dual Joycons"), - QStringLiteral("Left Joycon"), - QStringLiteral("Right Joycon"), + tr("Pro Controller"), + tr("Dual Joycons"), + tr("Left Joycon"), + tr("Right Joycon"), }; if (player_index == 0) { - controller_types.append(QStringLiteral("Handheld")); + controller_types.append(tr("Handheld")); connect(ui->comboControllerType, qOverload(&QComboBox::currentIndexChanged), - [&](int index) { + [this](int index) { emit HandheldStateChanged(GetControllerTypeFromIndex(index) == Settings::ControllerType::Handheld); }); @@ -375,7 +375,7 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i ui->buttonHome->setEnabled(false); ui->groupConnectedController->setCheckable(false); QStringList debug_controller_types = { - QStringLiteral("Pro Controller"), + tr("Pro Controller"), }; ui->comboControllerType->addItems(debug_controller_types); } else { @@ -384,17 +384,18 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i UpdateControllerIcon(); UpdateControllerAvailableButtons(); - connect(ui->comboControllerType, qOverload(&QComboBox::currentIndexChanged), [&](int) { + connect(ui->comboControllerType, qOverload(&QComboBox::currentIndexChanged), [this](int) { UpdateControllerIcon(); UpdateControllerAvailableButtons(); }); - connect(ui->comboDevices, qOverload(&QComboBox::currentIndexChanged), - [&] { UpdateMappingWithDefaults(); }); + connect(ui->comboDevices, qOverload(&QComboBox::currentIndexChanged), this, + &ConfigureInputPlayer::UpdateMappingWithDefaults); ui->buttonRefreshDevices->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"))); UpdateInputDevices(); - connect(ui->buttonRefreshDevices, &QPushButton::clicked, [&] { emit RefreshInputDevices(); }); + connect(ui->buttonRefreshDevices, &QPushButton::clicked, + [this] { emit RefreshInputDevices(); }); timeout_timer->setSingleShot(true); connect(timeout_timer.get(), &QTimer::timeout, [this] { SetPollingResult({}, true); }); @@ -707,26 +708,22 @@ void ConfigureInputPlayer::keyPressEvent(QKeyEvent* event) { void ConfigureInputPlayer::UpdateControllerIcon() { // We aren't using Qt's built in theme support here since we aren't drawing an icon (and its // "nonstandard" to use an image through the icon support) - QString stylesheet{}; - switch (GetControllerTypeFromIndex(ui->comboControllerType->currentIndex())) { - case Settings::ControllerType::ProController: - stylesheet = QStringLiteral("image: url(:/controller/pro_controller%0)"); - break; - case Settings::ControllerType::DualJoyconDetached: - stylesheet = QStringLiteral("image: url(:/controller/dual_joycon%0)"); - break; - case Settings::ControllerType::LeftJoycon: - stylesheet = QStringLiteral("image: url(:/controller/single_joycon_left_vertical%0)"); - break; - case Settings::ControllerType::RightJoycon: - stylesheet = QStringLiteral("image: url(:/controller/single_joycon_right_vertical%0)"); - break; - case Settings::ControllerType::Handheld: - stylesheet = QStringLiteral("image: url(:/controller/handheld%0)"); - break; - default: - break; - } + const QString stylesheet = [this] { + switch (GetControllerTypeFromIndex(ui->comboControllerType->currentIndex())) { + case Settings::ControllerType::ProController: + return QStringLiteral("image: url(:/controller/pro_controller%0)"); + case Settings::ControllerType::DualJoyconDetached: + return QStringLiteral("image: url(:/controller/dual_joycon%0)"); + case Settings::ControllerType::LeftJoycon: + return QStringLiteral("image: url(:/controller/single_joycon_left_vertical%0)"); + case Settings::ControllerType::RightJoycon: + return QStringLiteral("image: url(:/controller/single_joycon_right_vertical%0)"); + case Settings::ControllerType::Handheld: + return QStringLiteral("image: url(:/controller/handheld%0)"); + default: + return QString{}; + } + }(); const QString theme = [this] { if (QIcon::themeName().contains(QStringLiteral("dark"))) { @@ -744,12 +741,12 @@ void ConfigureInputPlayer::UpdateControllerIcon() { void ConfigureInputPlayer::UpdateControllerAvailableButtons() { auto layout = GetControllerTypeFromIndex(ui->comboControllerType->currentIndex()); if (debug) { - layout = Settings::ControllerType::DualJoyconDetached; + layout = Settings::ControllerType::ProController; } // List of all the widgets that will be hidden by any of the following layouts that need // "unhidden" after the controller type changes - const std::vector layout_show = { + const std::array layout_show = { ui->buttonShoulderButtonsSLSR, ui->horizontalSpacerShoulderButtonsWidget, ui->horizontalSpacerShoulderButtonsWidget2, @@ -768,11 +765,6 @@ void ConfigureInputPlayer::UpdateControllerAvailableButtons() { std::vector layout_hidden; switch (layout) { case Settings::ControllerType::ProController: - layout_hidden = { - ui->buttonShoulderButtonsSLSR, - ui->horizontalSpacerShoulderButtonsWidget2, - }; - break; case Settings::ControllerType::DualJoyconDetached: case Settings::ControllerType::Handheld: layout_hidden = { diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index 533815098d..ce3945485f 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h @@ -13,7 +13,6 @@ #include #include #include "common/common_types.h" -#include "core/settings.h" namespace UISettings {