From 82de139be5ece8a046d184b365e77fef81d69303 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Mon, 22 Jul 2024 22:38:38 +0200 Subject: [PATCH] Qt: Fix resolution dropdown if resolution flags of game are empty Fixes custom config creation error for games that have no resolution. Fixes empty dropdowns if resolution flags are 0 by adding all resolutions. Make sure to keep 720p as option if the dropdown would be empty after all. --- rpcs3/rpcs3qt/config_adapter.cpp | 4 ++-- rpcs3/rpcs3qt/emu_settings.cpp | 3 ++- rpcs3/rpcs3qt/emu_settings.h | 2 +- rpcs3/rpcs3qt/settings_dialog.cpp | 21 ++++++++++++++++++++- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/rpcs3/rpcs3qt/config_adapter.cpp b/rpcs3/rpcs3qt/config_adapter.cpp index b4a4708097..e945652268 100644 --- a/rpcs3/rpcs3qt/config_adapter.cpp +++ b/rpcs3/rpcs3qt/config_adapter.cpp @@ -51,9 +51,9 @@ namespace cfg_adapter QStringList get_options(const cfg_location& location) { QStringList values; - for (const auto& v : cfg_adapter::get_cfg(g_cfg, location.cbegin(), location.cend()).to_list()) + for (const std::string& value : cfg_adapter::get_cfg(g_cfg, location.cbegin(), location.cend()).to_list()) { - values.append(QString::fromStdString(v)); + values.append(QString::fromStdString(value)); } return values; } diff --git a/rpcs3/rpcs3qt/emu_settings.cpp b/rpcs3/rpcs3qt/emu_settings.cpp index 1aacb39b9f..2965c4664c 100644 --- a/rpcs3/rpcs3qt/emu_settings.cpp +++ b/rpcs3/rpcs3qt/emu_settings.cpp @@ -275,7 +275,7 @@ void emu_settings::RestoreDefaults() Q_EMIT RestoreDefaultsSignal(); } -void emu_settings::SaveSettings() +void emu_settings::SaveSettings() const { YAML::Emitter out; emit_data(out, m_current_settings); @@ -1345,6 +1345,7 @@ QString emu_settings::GetLocalizedSetting(const QString& original, emu_settings_ case xfloat_accuracy::relaxed: return tr("Relaxed XFloat"); case xfloat_accuracy::inaccurate: return tr("Inaccurate XFloat"); } + break; default: break; } diff --git a/rpcs3/rpcs3qt/emu_settings.h b/rpcs3/rpcs3qt/emu_settings.h index fc25fb0c7d..c533d35e96 100644 --- a/rpcs3/rpcs3qt/emu_settings.h +++ b/rpcs3/rpcs3qt/emu_settings.h @@ -104,7 +104,7 @@ Q_SIGNALS: public Q_SLOTS: /** Writes the unsaved settings to file. Used in settings dialog on accept.*/ - void SaveSettings(); + void SaveSettings() const; private: YAML::Node m_default_settings; // The default settings as a YAML node. diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index a9adcb8254..8ee45e5aee 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -479,6 +479,7 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std }; const int saved_index = ui->resBox->currentIndex(); + bool remove_720p = false; for (int i = ui->resBox->count() - 1; i >= 0; i--) { @@ -489,18 +490,36 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std const bool is_interlaced = (resolution == video_resolution::_1080i || resolution == video_resolution::_480i || resolution == video_resolution::_576i); - const bool supported_by_game = !game || (game && game->resolution > 0 && resolutions.contains(resolution) && (game->resolution & resolutions.at(resolution))); + const bool supported_by_game = !game || !game->resolution || (resolutions.contains(resolution) && (game->resolution & resolutions.at(resolution))); if (!supported_by_game || is_interlaced) { + // Don't remove 720p yet. We may need it as fallback if no other resolution is supported. + if (resolution == video_resolution::_720p) + { + remove_720p = true; + continue; + } + ui->resBox->removeItem(i); + if (i == saved_index) { saved_index_removed = true; } } } + + // Remove 720p if unsupported unless it's the only option + if (remove_720p && ui->resBox->count() > 1) + { + if (const int index = find_item(ui->resBox, static_cast(video_resolution::_720p)); index >= 0) + { + ui->resBox->removeItem(index); + } + } } + for (int i = 0; i < ui->resBox->count(); i++) { const auto [text, value] = get_data(ui->resBox, i);