From bca609a2a64ccba836643809a89965ad9b018f8f Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Fri, 21 Aug 2020 00:08:40 +1000 Subject: [PATCH] Qt: Add option to disable per-game settings --- src/core/host_interface.cpp | 1 + src/core/settings.cpp | 2 ++ src/core/settings.h | 1 + src/duckstation-qt/generalsettingswidget.cpp | 22 ++++++++++--- src/duckstation-qt/generalsettingswidget.ui | 33 +++++++++++-------- src/frontend-common/common_host_interface.cpp | 2 +- 6 files changed, 43 insertions(+), 18 deletions(-) diff --git a/src/core/host_interface.cpp b/src/core/host_interface.cpp index 8495212ae..9840e7424 100644 --- a/src/core/host_interface.cpp +++ b/src/core/host_interface.cpp @@ -358,6 +358,7 @@ void HostInterface::SetDefaultSettings(SettingsInterface& si) si.SetBoolValue("Main", "SaveStateOnExit", true); si.SetBoolValue("Main", "ConfirmPowerOff", true); si.SetBoolValue("Main", "LoadDevicesFromSaveStates", false); + si.SetBoolValue("Main", "ApplyGameSettings", true); si.SetStringValue("CPU", "ExecutionMode", Settings::GetCPUExecutionModeName(Settings::DEFAULT_CPU_EXECUTION_MODE)); si.SetBoolValue("CPU", "RecompilerMemoryExceptions", false); diff --git a/src/core/settings.cpp b/src/core/settings.cpp index d3ba9bbee..620df6e02 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -84,6 +84,7 @@ void Settings::Load(SettingsInterface& si) save_state_on_exit = si.GetBoolValue("Main", "SaveStateOnExit", true); confim_power_off = si.GetBoolValue("Main", "ConfirmPowerOff", true); load_devices_from_save_states = si.GetBoolValue("Main", "LoadDevicesFromSaveStates", false); + apply_game_settings = si.GetBoolValue("Main", "ApplyGameSettings", true); cpu_execution_mode = ParseCPUExecutionMode( @@ -200,6 +201,7 @@ void Settings::Save(SettingsInterface& si) const si.SetBoolValue("Main", "SaveStateOnExit", save_state_on_exit); si.SetBoolValue("Main", "ConfirmPowerOff", confim_power_off); si.SetBoolValue("Main", "LoadDevicesFromSaveStates", load_devices_from_save_states); + si.SetBoolValue("Main", "ApplyGameSettings", apply_game_settings); si.SetStringValue("CPU", "ExecutionMode", GetCPUExecutionModeName(cpu_execution_mode)); si.SetBoolValue("CPU", "RecompilerMemoryExceptions", cpu_recompiler_memory_exceptions); diff --git a/src/core/settings.h b/src/core/settings.h index 138e3aa1d..91e26d5b4 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -78,6 +78,7 @@ struct Settings bool save_state_on_exit = true; bool confim_power_off = true; bool load_devices_from_save_states = false; + bool apply_game_settings = true; GPURenderer gpu_renderer = GPURenderer::Software; std::string gpu_adapter; diff --git a/src/duckstation-qt/generalsettingswidget.cpp b/src/duckstation-qt/generalsettingswidget.cpp index 2b7021310..6ed0929a7 100644 --- a/src/duckstation-qt/generalsettingswidget.cpp +++ b/src/duckstation-qt/generalsettingswidget.cpp @@ -16,12 +16,15 @@ GeneralSettingsWidget::GeneralSettingsWidget(QtHostInterface* host_interface, QW SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.confirmPowerOff, "Main", "ConfirmPowerOff", true); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.loadDevicesFromSaveStates, "Main", "LoadDevicesFromSaveStates", false); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.applyGameSettings, "Main", "ApplyGameSettings", + true); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.showOSDMessages, "Display", "ShowOSDMessages", true); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.showFPS, "Display", "ShowFPS", false); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.showVPS, "Display", "ShowVPS", false); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.showSpeed, "Display", "ShowSpeed", false); - SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.showResolution, "Display", "ShowResolution", false); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.showResolution, "Display", "ShowResolution", + false); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.enableSpeedLimiter, "Main", "SpeedLimiterEnabled", true); @@ -57,6 +60,10 @@ GeneralSettingsWidget::GeneralSettingsWidget(QtHostInterface* host_interface, QW tr("When enabled, memory cards and controllers will be overwritten when save states are loaded. This can " "result in lost saves, and controller type mismatches. For deterministic save states, enable this option, " "otherwise leave disabled.")); + dialog->registerWidgetHelp( + m_ui.applyGameSettings, tr("Apply Per-Game Settings"), tr("Checked"), + tr("When enabled, per-game settings will be applied, and incompatible enhancements will be disabled. You should " + "leave this option enabled except when testing enhancements with incompatible games.")); dialog->registerWidgetHelp( m_ui.enableSpeedLimiter, tr("Enable Speed Limiter"), tr("Checked"), tr("Throttles the emulation speed to the chosen speed above. If unchecked, the emulator will " @@ -82,15 +89,19 @@ GeneralSettingsWidget::GeneralSettingsWidget(QtHostInterface* host_interface, QW tr("Shows the current emulation speed of the system in the top-right corner of the display as a percentage.")); // Since this one is compile-time selected, we don't put it in the .ui file. - const int last_row_count = m_ui.formLayout_4->rowCount(); + int current_col = 1; + int current_row = m_ui.formLayout_4->rowCount() - current_col; #ifdef WITH_DISCORD_PRESENCE { QCheckBox* enableDiscordPresence = new QCheckBox(tr("Enable Discord Presence"), m_ui.groupBox_4); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, enableDiscordPresence, "Main", "EnableDiscordPresence"); - m_ui.formLayout_4->addWidget(enableDiscordPresence, last_row_count, 0); + m_ui.formLayout_4->addWidget(enableDiscordPresence, current_row, current_col); dialog->registerWidgetHelp(enableDiscordPresence, tr("Enable Discord Presence"), tr("Unchecked"), tr("Shows the game you are currently playing as part of your profile in Discord.")); + current_col++; + current_row += (current_col / 2); + current_col %= 2; } #endif if (AutoUpdaterDialog::isSupported()) @@ -98,10 +109,13 @@ GeneralSettingsWidget::GeneralSettingsWidget(QtHostInterface* host_interface, QW QCheckBox* enableDiscordPresence = new QCheckBox(tr("Enable Automatic Update Check"), m_ui.groupBox_4); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, enableDiscordPresence, "AutoUpdater", "CheckAtStartup", true); - m_ui.formLayout_4->addWidget(enableDiscordPresence, last_row_count, 1); + m_ui.formLayout_4->addWidget(enableDiscordPresence, current_row, current_col); dialog->registerWidgetHelp(enableDiscordPresence, tr("Enable Automatic Update Check"), tr("Checked"), tr("Automatically checks for updates to the program on startup. Updates can be deferred " "until later or skipped entirely.")); + current_col++; + current_row += (current_col / 2); + current_col %= 2; } } diff --git a/src/duckstation-qt/generalsettingswidget.ui b/src/duckstation-qt/generalsettingswidget.ui index 09b29791c..40489f03d 100644 --- a/src/duckstation-qt/generalsettingswidget.ui +++ b/src/duckstation-qt/generalsettingswidget.ui @@ -32,6 +32,20 @@ Behaviour + + + + Confirm Power Off + + + + + + + Render To Main Window + + + @@ -39,10 +53,10 @@ - - + + - Confirm Power Off + Start Fullscreen @@ -60,17 +74,10 @@ - - - - Start Fullscreen - - - - - + + - Render To Main Window + Apply Per-Game Settings diff --git a/src/frontend-common/common_host_interface.cpp b/src/frontend-common/common_host_interface.cpp index 17badd8c1..470f4718f 100644 --- a/src/frontend-common/common_host_interface.cpp +++ b/src/frontend-common/common_host_interface.cpp @@ -2029,7 +2029,7 @@ bool CommonHostInterface::SaveScreenshot(const char* filename /* = nullptr */, b void CommonHostInterface::ApplyGameSettings(bool display_osd_messages) { // this gets called while booting, so can't use valid - if (System::IsShutdown() || System::GetRunningCode().empty()) + if (System::IsShutdown() || System::GetRunningCode().empty() || !g_settings.apply_game_settings) return; const GameSettings::Entry* gs = m_game_list->GetGameSettings(System::GetRunningPath(), System::GetRunningCode());