From 141d9add2e4c47603ee00ea2bdd2e89901a588b8 Mon Sep 17 00:00:00 2001 From: Collecting Date: Fri, 31 Oct 2025 05:33:41 +0000 Subject: [PATCH] Feat: Custom Controller Colors & Toggle Gyro Signed-off-by: Collecting --- .../configuration/configure_input_player.cpp | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/citron/configuration/configure_input_player.cpp b/src/citron/configuration/configure_input_player.cpp index 3a85fbef3..511ac5fe8 100644 --- a/src/citron/configuration/configure_input_player.cpp +++ b/src/citron/configuration/configure_input_player.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: 2016 Citra Emulator Project +// SPDX-FileCopyrightText: 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -27,6 +28,7 @@ #include "citron/configuration/configure_mouse_panning.h" #include "citron/configuration/input_profiles.h" #include "citron/util/limitable_input_dialog.h" +#include "common/settings_input.h" const std::array ConfigureInputPlayer::analog_sub_buttons{{ @@ -361,6 +363,11 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i analog_map_range_spinbox = {ui->spinboxLStickRange, ui->spinboxRStickRange}; ui->controllerFrame->SetController(emulated_controller); + ui->controllerFrame->SetRawJoystickVisible(true); + connect(ui->buttonChooseColor, &QPushButton::clicked, this, + &ConfigureInputPlayer::OnButtonChooseColor); + connect(ui->buttonToggleGyro, &QPushButton::clicked, this, + &ConfigureInputPlayer::OnButtonToggleGyro); for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; ++button_id) { auto* const button = button_map[button_id]; @@ -1668,3 +1675,24 @@ void ConfigureInputPlayer::UpdateInputProfiles() { LOG_DEBUG(Frontend, "Setting the current input profile to index {}", profile_index); ui->comboProfiles->setCurrentIndex(profile_index); } + +void ConfigureInputPlayer::OnButtonChooseColor() { + const u32 current_color_val = emulated_controller->GetBodyColor(); + const QColor initial_color = + QColor(current_color_val != 0 ? current_color_val : Settings::DEFAULT_CONTROLLER_COLOR); + + const QColor color = QColorDialog::getColor(initial_color, this, tr("Choose Controller Color")); + + if (color.isValid()) { + emulated_controller->SetBodyColor(color.rgb()); + // The update call must be on the UI widget, not the controller object. + ui->controllerFrame->ControllerUpdate(Core::HID::ControllerTriggerType::Color); + } +} + +void ConfigureInputPlayer::OnButtonToggleGyro() { + bool current_visibility = emulated_controller->IsGyroOverlayVisible(); + emulated_controller->SetGyroOverlayVisible(!current_visibility); + // We can just re-draw everything to apply the change + ui->controllerFrame->ControllerUpdate(Core::HID::ControllerTriggerType::All); +}