From 6316a3d8d9db432eb810c554385837c96037cba5 Mon Sep 17 00:00:00 2001 From: lat9nq Date: Mon, 13 Jul 2020 23:00:56 -0400 Subject: [PATCH] configuration_shared: Add default combobox setup function Not a catch-all, but helps clean up the code for when I do this a lot. Also fixes some bugs caught in configure_graphics. --- .../configuration/configuration_shared.cpp | 42 +++++++++++++++---- src/yuzu/configuration/configuration_shared.h | 7 +++- src/yuzu/configuration/configure_graphics.cpp | 24 +++++------ 3 files changed, 52 insertions(+), 21 deletions(-) diff --git a/src/yuzu/configuration/configuration_shared.cpp b/src/yuzu/configuration/configuration_shared.cpp index a648d339b7..0c7caf8b5a 100644 --- a/src/yuzu/configuration/configuration_shared.cpp +++ b/src/yuzu/configuration/configuration_shared.cpp @@ -88,13 +88,11 @@ void ConfigurationShared::SetPerGameSetting( void ConfigurationShared::SetHighlight(QWidget* widget, const std::string& name, bool highlighted) { if (highlighted) { - widget->setStyleSheet( - QStringLiteral("QWidget#%1 { background-color:rgba(0,203,255,0.5) }") - .arg(QString::fromStdString(name))); + widget->setStyleSheet(QStringLiteral("QWidget#%1 { background-color:rgba(0,203,255,0.5) }") + .arg(QString::fromStdString(name))); } else { - widget->setStyleSheet( - QStringLiteral("QWidget#%1 { background-color:rgba(0,0,0,0) }") - .arg(QString::fromStdString(name))); + widget->setStyleSheet(QStringLiteral("QWidget#%1 { background-color:rgba(0,0,0,0) }") + .arg(QString::fromStdString(name))); } widget->show(); } @@ -119,6 +117,35 @@ void ConfigurationShared::SetColoredTristate(QCheckBox* checkbox, const std::str }); } +void ConfigurationShared::SetColoredTristate(QCheckBox* checkbox, const std::string& name, + bool global, bool state, bool global_state, + ConfigurationShared::CheckState& tracker) { + if (global) { + tracker = CheckState::Global; + } else { + tracker = (state == global_state) ? CheckState::On : CheckState::Off; + } + SetHighlight(checkbox, name, tracker != CheckState::Global); + QObject::connect( + checkbox, &QCheckBox::clicked, checkbox, [checkbox, name, global_state, &tracker]() { + tracker = + static_cast((tracker + 1) % CheckState::Count); + if (tracker == CheckState::Global) { + checkbox->setChecked(global_state); + } + SetHighlight(checkbox, name, tracker != CheckState::Global); + }); +} + +void ConfigurationShared::SetColoredComboBox(QComboBox* combobox, QWidget* target, + const std::string& target_name, int global) { + InsertGlobalItem(combobox, global); + QObject::connect(combobox, static_cast(&QComboBox::activated), + target, [target, target_name](int index) { + ConfigurationShared::SetHighlight(target, target_name, index != 0); + }); +} + void ConfigurationShared::InsertGlobalItem(QComboBox* combobox) { const QString use_global_text = ConfigurePerGame::tr("Use global configuration"); combobox->insertItem(ConfigurationShared::USE_GLOBAL_INDEX, use_global_text); @@ -126,7 +153,8 @@ void ConfigurationShared::InsertGlobalItem(QComboBox* combobox) { } void ConfigurationShared::InsertGlobalItem(QComboBox* combobox, int global_index) { - const QString use_global_text = ConfigurePerGame::tr("Use global configuration (%1)").arg(combobox->itemText(global_index)); + const QString use_global_text = + ConfigurePerGame::tr("Use global configuration (%1)").arg(combobox->itemText(global_index)); combobox->insertItem(ConfigurationShared::USE_GLOBAL_INDEX, use_global_text); combobox->insertSeparator(ConfigurationShared::USE_GLOBAL_SEPARATOR_INDEX); } diff --git a/src/yuzu/configuration/configuration_shared.h b/src/yuzu/configuration/configuration_shared.h index f3676bd3ac..b5d6ea8c88 100644 --- a/src/yuzu/configuration/configuration_shared.h +++ b/src/yuzu/configuration/configuration_shared.h @@ -57,8 +57,13 @@ void SetPerGameSetting(QComboBox* combobox, const Settings::Setting* setting); void SetHighlight(QWidget* widget, const std::string& name, bool highlighted); -void SetColoredTristate(QCheckBox* checkbox, const std::string& name, const Settings::Setting& setting, +void SetColoredTristate(QCheckBox* checkbox, const std::string& name, + const Settings::Setting& setting, ConfigurationShared::CheckState& tracker); +void SetColoredTristate(QCheckBox* checkbox, const std::string& name, bool global, bool state, + bool global_state, ConfigurationShared::CheckState& tracker); +void SetColoredComboBox(QComboBox* combobox, QWidget* target, const std::string& target_name, + int global); void InsertGlobalItem(QComboBox* combobox); void InsertGlobalItem(QComboBox* combobox, int global_index); diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index c1b38728da..c79b256f9c 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -80,6 +80,8 @@ void ConfigureGraphics::SetConfiguration() { ui->aspect_ratio_combobox->setCurrentIndex(Settings::values.aspect_ratio.GetValue()); } else { ConfigurationShared::SetPerGameSetting(ui->api, &Settings::values.renderer_backend); + ConfigurationShared::SetHighlight(ui->api_layout, "api_layout", + !Settings::values.renderer_backend.UsingGlobal()); ConfigurationShared::SetPerGameSetting(ui->aspect_ratio_combobox, &Settings::values.aspect_ratio); @@ -89,8 +91,6 @@ void ConfigureGraphics::SetConfiguration() { !Settings::values.aspect_ratio.UsingGlobal()); ConfigurationShared::SetHighlight(ui->bg_layout, "bg_layout", !Settings::values.bg_red.UsingGlobal()); - // FIXME: ConfigurationShared::SetHighlight(ui->api_layout, "api_layout", - // !Settings::values.renderer_backend.UsingGlobal()); } UpdateBackgroundColorButton(QColor::fromRgbF(Settings::values.bg_red.GetValue(), @@ -141,10 +141,12 @@ void ConfigureGraphics::ApplyConfiguration() { ConfigurationShared::ApplyPerGameSetting(&Settings::values.aspect_ratio, ui->aspect_ratio_combobox); - ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_disk_shader_cache, - ui->use_disk_shader_cache); - ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_gpu_emulation, - ui->use_asynchronous_gpu_emulation); + ConfigurationShared::ApplyPerGameSetting( + &Settings::values.use_disk_shader_cache, ui->use_disk_shader_cache, + ConfigurationShared::trackers.use_disk_shader_cache); + ConfigurationShared::ApplyPerGameSetting( + &Settings::values.use_asynchronous_gpu_emulation, ui->use_asynchronous_gpu_emulation, + ConfigurationShared::trackers.use_asynchronous_gpu_emulation); if (ui->bg_combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { Settings::values.bg_red.SetGlobal(true); @@ -247,11 +249,6 @@ void ConfigureGraphics::SetupPerGameUI() { return; } - connect(ui->aspect_ratio_combobox, static_cast(&QComboBox::activated), - this, [this](int index) { - ConfigurationShared::SetHighlight(ui->aspect_ratio_layout, "aspect_ratio_layout", - index != 0); - }); connect(ui->bg_combobox, static_cast(&QComboBox::activated), this, [this](int index) { ui->bg_button->setEnabled(index == 1); @@ -266,8 +263,9 @@ void ConfigureGraphics::SetupPerGameUI() { Settings::values.use_asynchronous_gpu_emulation, ConfigurationShared::trackers.use_asynchronous_gpu_emulation); - ConfigurationShared::InsertGlobalItem(ui->aspect_ratio_combobox, - Settings::values.aspect_ratio.GetValue(true)); + ConfigurationShared::SetColoredComboBox(ui->aspect_ratio_combobox, ui->aspect_ratio_layout, + "aspect_ratio_layout", + Settings::values.aspect_ratio.GetValue(true)); ConfigurationShared::InsertGlobalItem( ui->api, static_cast(Settings::values.renderer_backend.GetValue(true))); }