From 286f750c6c6b70b48e3fb2fb579e5bfafbf51a69 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 18 Feb 2023 23:24:15 +0100 Subject: [PATCH] citra_qt: Move CPU speed slider to debug tab and Report Comptaibility to help menu (#6250) --- .../configuration/configure_debug.cpp | 63 +++++++++ src/citra_qt/configuration/configure_debug.h | 1 + src/citra_qt/configuration/configure_debug.ui | 89 ++++++++++++- .../configuration/configure_per_game.cpp | 4 + .../configuration/configure_per_game.h | 2 + .../configuration/configure_system.cpp | 48 ------- .../configuration/configure_system.ui | 126 +++--------------- src/citra_qt/main.ui | 4 +- 8 files changed, 173 insertions(+), 164 deletions(-) diff --git a/src/citra_qt/configuration/configure_debug.cpp b/src/citra_qt/configuration/configure_debug.cpp index accc61b65..d08491f04 100644 --- a/src/citra_qt/configuration/configure_debug.cpp +++ b/src/citra_qt/configuration/configure_debug.cpp @@ -4,6 +4,7 @@ #include #include +#include "citra_qt/configuration/configuration_shared.h" #include "citra_qt/configuration/configure_debug.h" #include "citra_qt/debugger/console.h" #include "citra_qt/uisettings.h" @@ -13,6 +14,17 @@ #include "core/core.h" #include "ui_configure_debug.h" +// The QSlider doesn't have an easy way to set a custom step amount, +// so we can just convert from the sliders range (0 - 79) to the expected +// settings range (5 - 400) with simple math. +static constexpr int SliderToSettings(int value) { + return 5 * value + 5; +} + +static constexpr int SettingsToSlider(int value) { + return (value - 5) / 5; +} + ConfigureDebug::ConfigureDebug(QWidget* parent) : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); @@ -25,6 +37,19 @@ ConfigureDebug::ConfigureDebug(QWidget* parent) const bool is_powered_on = Core::System::GetInstance().IsPoweredOn(); ui->toggle_cpu_jit->setEnabled(!is_powered_on); + + // Set a minimum width for the label to prevent the slider from changing size. + // This scales across DPIs. (This value should be enough for "xxx%") + ui->clock_display_label->setMinimumWidth(40); + + connect(ui->slider_clock_speed, &QSlider::valueChanged, this, [&](int value) { + ui->clock_display_label->setText(QStringLiteral("%1%").arg(SliderToSettings(value))); + }); + + ui->clock_speed_label->setVisible(Settings::IsConfiguringGlobal()); + ui->clock_speed_combo->setVisible(!Settings::IsConfiguringGlobal()); + + SetupPerGameUI(); } ConfigureDebug::~ConfigureDebug() = default; @@ -37,6 +62,23 @@ void ConfigureDebug::SetConfiguration() { ui->toggle_console->setChecked(UISettings::values.show_console.GetValue()); ui->log_filter_edit->setText(QString::fromStdString(Settings::values.log_filter.GetValue())); ui->toggle_cpu_jit->setChecked(Settings::values.use_cpu_jit.GetValue()); + + if (!Settings::IsConfiguringGlobal()) { + if (Settings::values.cpu_clock_percentage.UsingGlobal()) { + ui->clock_speed_combo->setCurrentIndex(0); + ui->slider_clock_speed->setEnabled(false); + } else { + ui->clock_speed_combo->setCurrentIndex(1); + ui->slider_clock_speed->setEnabled(true); + } + ConfigurationShared::SetHighlight(ui->clock_speed_widget, + !Settings::values.cpu_clock_percentage.UsingGlobal()); + } + + ui->slider_clock_speed->setValue( + SettingsToSlider(Settings::values.cpu_clock_percentage.GetValue())); + ui->clock_display_label->setText( + QStringLiteral("%1%").arg(Settings::values.cpu_clock_percentage.GetValue())); } void ConfigureDebug::ApplyConfiguration() { @@ -49,6 +91,27 @@ void ConfigureDebug::ApplyConfiguration() { filter.ParseFilterString(Settings::values.log_filter.GetValue()); Log::SetGlobalFilter(filter); Settings::values.use_cpu_jit = ui->toggle_cpu_jit->isChecked(); + + ConfigurationShared::ApplyPerGameSetting( + &Settings::values.cpu_clock_percentage, ui->clock_speed_combo, + [this](s32) { return SliderToSettings(ui->slider_clock_speed->value()); }); +} + +void ConfigureDebug::SetupPerGameUI() { + // Block the global settings if a game is currently running that overrides them + if (Settings::IsConfiguringGlobal()) { + ui->slider_clock_speed->setEnabled(Settings::values.cpu_clock_percentage.UsingGlobal()); + return; + } + + connect(ui->clock_speed_combo, qOverload(&QComboBox::activated), this, [this](int index) { + ui->slider_clock_speed->setEnabled(index == 1); + ConfigurationShared::SetHighlight(ui->clock_speed_widget, index == 1); + }); + + ui->groupBox->setVisible(false); + ui->groupBox_2->setVisible(false); + ui->toggle_cpu_jit->setVisible(false); } void ConfigureDebug::RetranslateUI() { diff --git a/src/citra_qt/configuration/configure_debug.h b/src/citra_qt/configuration/configure_debug.h index c0bae4c3e..59d05f41f 100644 --- a/src/citra_qt/configuration/configure_debug.h +++ b/src/citra_qt/configuration/configure_debug.h @@ -21,6 +21,7 @@ public: void ApplyConfiguration(); void RetranslateUI(); void SetConfiguration(); + void SetupPerGameUI(); std::unique_ptr ui; }; diff --git a/src/citra_qt/configuration/configure_debug.ui b/src/citra_qt/configuration/configure_debug.ui index 2bf1a5f88..6bfb7cb67 100644 --- a/src/citra_qt/configuration/configure_debug.ui +++ b/src/citra_qt/configuration/configure_debug.ui @@ -7,7 +7,7 @@ 0 0 443 - 300 + 358 @@ -107,12 +107,80 @@ - + - Miscellaneous + CPU - - + + + + + + 7 + + + + + + Use global clock speed + + + + + Set clock speed: + + + + + + + + CPU Clock Speed + + + + + + + <html><body>Changes the emulated CPU clock frequency.<br>Underclocking can increase performance but may cause the game to freeze.<br>Overclocking may reduce in game lag but also might cause freezes</body></html> + + + 0 + + + 79 + + + 5 + + + 15 + + + 25 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + <html><head/><body><p>Enables the use of the ARM JIT compiler for emulating the 3DS CPUs. Don't disable unless for debugging purposes</p></body></html> @@ -125,6 +193,16 @@ + + + + <html><head/><body><p>CPU Clock Speed Information<br/>Underclocking can increase performance but may cause the game to freeze.<br/>Overclocking may reduce in game lag but also might cause freezes</p></body></html> + + + Qt::RichText + + + @@ -146,7 +224,6 @@ log_filter_edit toggle_console open_log_button - toggle_cpu_jit diff --git a/src/citra_qt/configuration/configure_per_game.cpp b/src/citra_qt/configuration/configure_per_game.cpp index fc74e9e4c..506b597ec 100644 --- a/src/citra_qt/configuration/configure_per_game.cpp +++ b/src/citra_qt/configuration/configure_per_game.cpp @@ -9,6 +9,7 @@ #include #include "citra_qt/configuration/config.h" #include "citra_qt/configuration/configure_audio.h" +#include "citra_qt/configuration/configure_debug.h" #include "citra_qt/configuration/configure_general.h" #include "citra_qt/configuration/configure_graphics.h" #include "citra_qt/configuration/configure_per_game.h" @@ -31,6 +32,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const QString general_tab = std::make_unique(this); graphics_tab = std::make_unique(this); system_tab = std::make_unique(this); + debug_tab = std::make_unique(this); ui->setupUi(this); @@ -38,6 +40,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const QString ui->tabWidget->addTab(system_tab.get(), tr("System")); ui->tabWidget->addTab(graphics_tab.get(), tr("Graphics")); ui->tabWidget->addTab(audio_tab.get(), tr("Audio")); + ui->tabWidget->addTab(debug_tab.get(), tr("Debug")); setFocusPolicy(Qt::ClickFocus); setWindowTitle(tr("Properties")); @@ -80,6 +83,7 @@ void ConfigurePerGame::ApplyConfiguration() { system_tab->ApplyConfiguration(); graphics_tab->ApplyConfiguration(); audio_tab->ApplyConfiguration(); + debug_tab->ApplyConfiguration(); Settings::LogSettings(); diff --git a/src/citra_qt/configuration/configure_per_game.h b/src/citra_qt/configuration/configure_per_game.h index 3bc2564b4..87addd6e7 100644 --- a/src/citra_qt/configuration/configure_per_game.h +++ b/src/citra_qt/configuration/configure_per_game.h @@ -17,6 +17,7 @@ class ConfigureAudio; class ConfigureGeneral; class ConfigureGraphics; class ConfigureSystem; +class ConfigureDebug; class QGraphicsScene; class QStandardItem; @@ -66,4 +67,5 @@ private: std::unique_ptr general_tab; std::unique_ptr graphics_tab; std::unique_ptr system_tab; + std::unique_ptr debug_tab; }; diff --git a/src/citra_qt/configuration/configure_system.cpp b/src/citra_qt/configuration/configure_system.cpp index 8c4fbe5c5..73afb482a 100644 --- a/src/citra_qt/configuration/configure_system.cpp +++ b/src/citra_qt/configuration/configure_system.cpp @@ -225,17 +225,6 @@ static const std::array country_names = { QT_TRANSLATE_NOOP("ConfigureSystem", "Bermuda"), // 180-186 }; -// The QSlider doesn't have an easy way to set a custom step amount, -// so we can just convert from the sliders range (0 - 79) to the expected -// settings range (5 - 400) with simple math. -static constexpr int SliderToSettings(int value) { - return 5 * value + 5; -} - -static constexpr int SettingsToSlider(int value) { - return (value - 5) / 5; -} - ConfigureSystem::ConfigureSystem(QWidget* parent) : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); @@ -255,17 +244,6 @@ ConfigureSystem::ConfigureSystem(QWidget* parent) } } - // Set a minimum width for the label to prevent the slider from changing size. - // This scales across DPIs. (This value should be enough for "xxx%") - ui->clock_display_label->setMinimumWidth(40); - - connect(ui->slider_clock_speed, &QSlider::valueChanged, this, [&](int value) { - ui->clock_display_label->setText(QStringLiteral("%1%").arg(SliderToSettings(value))); - }); - - ui->clock_speed_label->setVisible(Settings::IsConfiguringGlobal()); - ui->clock_speed_combo->setVisible(!Settings::IsConfiguringGlobal()); - SetupPerGameUI(); ui->combo_download_mode->setCurrentIndex(1); // set to Recommended @@ -325,22 +303,6 @@ void ConfigureSystem::SetConfiguration() { ui->label_disable_info->hide(); } - if (!Settings::IsConfiguringGlobal()) { - if (Settings::values.cpu_clock_percentage.UsingGlobal()) { - ui->clock_speed_combo->setCurrentIndex(0); - ui->slider_clock_speed->setEnabled(false); - } else { - ui->clock_speed_combo->setCurrentIndex(1); - ui->slider_clock_speed->setEnabled(true); - } - ConfigurationShared::SetHighlight(ui->clock_speed_widget, - !Settings::values.cpu_clock_percentage.UsingGlobal()); - } - - ui->slider_clock_speed->setValue( - SettingsToSlider(Settings::values.cpu_clock_percentage.GetValue())); - ui->clock_display_label->setText( - QStringLiteral("%1%").arg(Settings::values.cpu_clock_percentage.GetValue())); ui->toggle_new_3ds->setChecked(Settings::values.is_new_3ds.GetValue()); ui->plugin_loader->setChecked(Settings::values.plugin_loader_enabled.GetValue()); ui->allow_plugin_loader->setChecked(Settings::values.allow_plugin_loader.GetValue()); @@ -452,10 +414,6 @@ void ConfigureSystem::ApplyConfiguration() { Settings::values.plugin_loader_enabled.SetValue(ui->plugin_loader->isChecked()); Settings::values.allow_plugin_loader.SetValue(ui->allow_plugin_loader->isChecked()); } - - ConfigurationShared::ApplyPerGameSetting( - &Settings::values.cpu_clock_percentage, ui->clock_speed_combo, - [this](s32) { return SliderToSettings(ui->slider_clock_speed->value()); }); } void ConfigureSystem::UpdateBirthdayComboBox(int birthmonth_index) { @@ -534,7 +492,6 @@ void ConfigureSystem::SetupPerGameUI() { // Block the global settings if a game is currently running that overrides them if (Settings::IsConfiguringGlobal()) { ui->toggle_new_3ds->setEnabled(Settings::values.is_new_3ds.UsingGlobal()); - ui->slider_clock_speed->setEnabled(Settings::values.cpu_clock_percentage.UsingGlobal()); return; } @@ -568,11 +525,6 @@ void ConfigureSystem::SetupPerGameUI() { ui->plugin_loader->setVisible(false); ui->allow_plugin_loader->setVisible(false); - connect(ui->clock_speed_combo, qOverload(&QComboBox::activated), this, [this](int index) { - ui->slider_clock_speed->setEnabled(index == 1); - ConfigurationShared::SetHighlight(ui->clock_speed_widget, index == 1); - }); - ConfigurationShared::SetColoredTristate(ui->toggle_new_3ds, Settings::values.is_new_3ds, is_new_3ds); } diff --git a/src/citra_qt/configuration/configure_system.ui b/src/citra_qt/configuration/configure_system.ui index 02acf35c5..064ce3835 100644 --- a/src/citra_qt/configuration/configure_system.ui +++ b/src/citra_qt/configuration/configure_system.ui @@ -6,7 +6,7 @@ 0 0 - 525 + 535 619 @@ -274,7 +274,7 @@ - + days @@ -287,7 +287,7 @@ - + HH:mm:ss @@ -341,25 +341,25 @@ - - - 3GX Plugin Loader: - - + + + 3GX Plugin Loader: + + - - - Enable 3GX plugin loader - - + + + Enable 3GX plugin loader + + - - - Allow games to change plugin loader state - - + + + Allow games to change plugin loader state + + @@ -410,86 +410,6 @@ - - - - Advanced - - - - - - - 7 - - - - - - Use global clock speed - - - - - Set clock speed: - - - - - - - - CPU Clock Speed - - - - - - - <html><body>Changes the emulated CPU clock frequency.<br>Underclocking can increase performance but may cause the game to freeze.<br>Overclocking may reduce in game lag but also might cause freezes</body></html> - - - 0 - - - 79 - - - 5 - - - 15 - - - 25 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - @@ -500,16 +420,6 @@ - - - - <html><head/><body><p>CPU Clock Speed Information<br/>Underclocking can increase performance but may cause the game to freeze.<br/>Overclocking may reduce in game lag but also might cause freezes</p></body></html> - - - Qt::RichText - - - diff --git a/src/citra_qt/main.ui b/src/citra_qt/main.ui index b3e36a978..4c88252eb 100644 --- a/src/citra_qt/main.ui +++ b/src/citra_qt/main.ui @@ -100,8 +100,6 @@ - - @@ -189,6 +187,8 @@ + +