From 0689ff5a1c26dc3e0e2577a8347a9351765a0b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joshua=20Vanda=C3=ABle?= Date: Fri, 4 Apr 2025 23:53:07 +0200 Subject: [PATCH] Config/Graphics: Add a reset button for all user-defined configurations --- Source/Core/Core/Config/GraphicsSettings.h | 99 +++++++++++++++++++ .../Config/Graphics/GeneralWidget.cpp | 40 ++++++++ .../DolphinQt/Config/Graphics/GeneralWidget.h | 4 + 3 files changed, 143 insertions(+) diff --git a/Source/Core/Core/Config/GraphicsSettings.h b/Source/Core/Core/Config/GraphicsSettings.h index 431797cefa..d0702308b4 100644 --- a/Source/Core/Core/Config/GraphicsSettings.h +++ b/Source/Core/Core/Config/GraphicsSettings.h @@ -6,6 +6,8 @@ #include #include "Common/Config/Config.h" +#include "Core/Config/MainSettings.h" +#include "Core/Config/SYSCONFSettings.h" enum class AspectMode : int; enum class ShaderCompilationMode : int; @@ -22,6 +24,8 @@ enum class VertexLoaderType : int; namespace Config { // Configuration Information +using InfoVariant = std::variant, Config::Info, Config::Info, + Config::Info, Config::Info>; // Graphics.Hardware @@ -192,4 +196,99 @@ extern const Info GFX_DRIVER_LIB_NAME; extern const Info GFX_VERTEX_LOADER_TYPE; +// Array containing the configuration keys in the "Graphics settings" window. +// We target only these explicitly specified keys rather than every "GFX" key, +// as legacy decisions makes it so we have settings all over the place. +const std::array GRAPHICS_CONFIG_INFO = {GFX_DISABLE_FOG, + GFX_SHOW_SPEED_COLORS, + GFX_FRAME_DUMPS_RESOLUTION_TYPE, + GFX_ENHANCE_HDR_OUTPUT, + GFX_CC_CORRECT_GAMMA, + GFX_ENABLE_PIXEL_LIGHTING, + GFX_ENHANCE_FORCE_TRUE_COLOR, + GFX_STEREO_SWAP_EYES, + MAIN_RENDER_WINDOW_AUTOSIZE, + GFX_CPU_CULL, + GFX_CC_CORRECT_COLOR_SPACE, + GFX_HACK_EFB_ACCESS_ENABLE, + GFX_STEREO_PER_EYE_RESOLUTION_FULL, + GFX_ASPECT_RATIO, + GFX_WIDESCREEN_HACK, + GFX_SHOW_NETPLAY_PING, + SYSCONF_PROGRESSIVE_SCAN, + GFX_HACK_SKIP_EFB_COPY_TO_RAM, + GFX_DUMP_TEXTURES, + MAIN_GFX_BACKEND, + GFX_HACK_EFB_DEFER_INVALIDATION, + GFX_CC_SDR_DISPLAY_CUSTOM_GAMMA, + MAIN_RENDER_TO_MAIN, + GFX_SHOW_FTIMES, + MAIN_FULLSCREEN, + GFX_HACK_FAST_TEXTURE_SAMPLING, + GFX_OVERLAY_PROJ_STATS, + GFX_WAIT_FOR_SHADERS_BEFORE_STARTING, + GFX_STEREO_MODE, + GFX_BACKEND_MULTITHREADING, + GFX_ENHANCE_POST_SHADER, + GFX_USE_LOSSLESS, + GFX_HACK_DEFER_EFB_COPIES, + GFX_ENABLE_WIREFRAME, + GFX_HACK_EFB_EMULATE_FORMAT_CHANGES, + GFX_TEXFMT_OVERLAY_ENABLE, + GFX_SHOW_VTIMES, + GFX_ENHANCE_DISABLE_COPY_FILTER, + GFX_ENABLE_GPU_TEXTURE_DECODING, + GFX_SHOW_GRAPHS, + GFX_SHOW_SPEED, + GFX_PREFER_VS_FOR_LINE_POINT_EXPANSION, + GFX_CC_SDR_DISPLAY_GAMMA_SRGB, + GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION, + GFX_DUMP_XFB_TARGET, + GFX_LOG_RENDER_TIME_TO_FILE, + GFX_OVERLAY_STATS, + GFX_CUSTOM_ASPECT_RATIO_WIDTH, + GFX_SHOW_FPS, + GFX_BITRATE_KBPS, + GFX_ENHANCE_MAX_ANISOTROPY, + GFX_HACK_BBOX_ENABLE, + GFX_HACK_VERTEX_ROUNDING, + GFX_HACK_VI_SKIP, + GFX_ENHANCE_FORCE_TEXTURE_FILTERING, + GFX_CC_GAME_COLOR_SPACE, + GFX_STEREO_DEPTH, + GFX_DUMP_EFB_TARGET, + GFX_HACK_SKIP_XFB_COPY_TO_RAM, + GFX_SSAA, + GFX_PERF_SAMP_WINDOW, + MAIN_PRECISION_FRAME_TIMING, + GFX_SHOW_VPS, + GFX_SHADER_COMPILATION_MODE, + GFX_HACK_SKIP_DUPLICATE_XFBS, + GFX_SAVE_TEXTURE_CACHE_TO_STATE, + GFX_MODS_ENABLE, + GFX_EFB_SCALE, + GFX_DUMP_BASE_TEXTURES, + GFX_SHOW_NETPLAY_MESSAGES, + GFX_FAST_DEPTH_CALC, + GFX_MAX_EFB_SCALE, + GFX_CC_HDR_PAPER_WHITE_NITS, + GFX_SAFE_TEXTURE_CACHE_COLOR_SAMPLES, + GFX_ADAPTER, + GFX_DUMP_MIP_TEXTURES, + GFX_CACHE_HIRES_TEXTURES, + GFX_BORDERLESS_FULLSCREEN, + GFX_MSAA, + GFX_ENABLE_VALIDATION_LAYER, + GFX_STEREO_CONVERGENCE, + GFX_HIRES_TEXTURES, + GFX_CC_GAME_GAMMA, + GFX_HACK_IMMEDIATE_XFB, + GFX_PNG_COMPRESSION_LEVEL, + GFX_ENHANCE_OUTPUT_RESAMPLING, + GFX_VSYNC, + GFX_CROP, + GFX_CUSTOM_ASPECT_RATIO_HEIGHT, + GFX_HACK_DISABLE_COPY_TO_VRAM, + GFX_HACK_COPY_EFB_SCALED}; + } // namespace Config diff --git a/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp b/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp index b698fbdd77..5a6b31e7b1 100644 --- a/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp +++ b/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.cpp @@ -13,6 +13,9 @@ #include #include +#include "Common/Config/Config.h" +#include "Common/Config/ConfigInfo.h" +#include "Common/Config/Layer.h" #include "Core/Config/GraphicsSettings.h" #include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" @@ -26,6 +29,7 @@ #include "DolphinQt/Config/GameConfigWidget.h" #include "DolphinQt/Config/Graphics/GraphicsWindow.h" #include "DolphinQt/Config/ToolTipControls/ToolTipComboBox.h" +#include "DolphinQt/Config/ToolTipControls/ToolTipPushButton.h" #include "DolphinQt/QtUtils/ModalMessageBox.h" #include "DolphinQt/QtUtils/SetWindowDecorations.h" #include "DolphinQt/Settings.h" @@ -122,6 +126,7 @@ void GeneralWidget::CreateWidgets() new ConfigBool(tr("Show NetPlay Messages"), Config::GFX_SHOW_NETPLAY_MESSAGES, m_game_layer); m_render_main_window = new ConfigBool(tr("Render to Main Window"), Config::MAIN_RENDER_TO_MAIN, m_game_layer); + m_reset_settings = new ToolTipPushButton(tr("Reset Graphics Settings")); m_options_box->setLayout(m_options_layout); @@ -131,6 +136,8 @@ void GeneralWidget::CreateWidgets() m_options_layout->addWidget(m_show_messages, 0, 1); m_options_layout->addWidget(m_show_ping, 1, 1); + m_options_layout->addWidget(m_reset_settings, 2, 0, 1, 2); + // Other auto* shader_compilation_box = new QGroupBox(tr("Shader Compilation")); auto* shader_compilation_layout = new QGridLayout(); @@ -177,6 +184,9 @@ void GeneralWidget::ConnectWidgets() m_custom_aspect_height->setHidden(!is_custom_aspect_ratio); }); m_aspect_combo->currentIndexChanged(m_aspect_combo->currentIndex()); + + // Reset + connect(m_reset_settings, &QPushButton::clicked, this, &GeneralWidget::OnResetSettingsClicked); } void GeneralWidget::BackendWarning() @@ -212,6 +222,7 @@ void GeneralWidget::OnEmulationStateChanged(bool running) m_backend_combo->setEnabled(!running); m_render_main_window->setEnabled(!running); m_enable_fullscreen->setEnabled(!running); + m_reset_settings->setEnabled(!running); const bool supports_adapters = !g_backend_info.Adapters.empty(); m_adapter_combo->setEnabled(!running && supports_adapters); @@ -248,6 +259,10 @@ void GeneralWidget::AddDescriptions() QT_TR_NOOP("Uses the main Dolphin window for rendering rather than " "a separate render window.

If unsure, leave " "this unchecked."); + static const char TR_RESET_GRAPHICS_SETTINGS_DESCRIPTION[] = + "Resets ALL graphics settings to their default values.

" + "This action is irreversible—any customizations you've made will be " + "permanently lost."; static const char TR_ASPECT_RATIO_DESCRIPTION[] = QT_TR_NOOP( "Selects which aspect ratio to use for displaying the game." "

The aspect ratio of the image sent out by the original consoles varied depending on " @@ -332,6 +347,8 @@ void GeneralWidget::AddDescriptions() m_render_main_window->SetDescription(tr(TR_RENDER_TO_MAINWINDOW_DESCRIPTION)); + m_reset_settings->SetDescription(tr(TR_RESET_GRAPHICS_SETTINGS_DESCRIPTION)); + m_shader_compilation_mode[0]->SetDescription(tr(TR_SHADER_COMPILE_SPECIALIZED_DESCRIPTION)); m_shader_compilation_mode[1]->SetDescription(tr(TR_SHADER_COMPILE_EXCLUSIVE_UBER_DESCRIPTION)); @@ -375,3 +392,26 @@ void GeneralWidget::OnBackendChanged(const QString& backend_name) tr(TR_ADAPTER_UNAVAILABLE_DESCRIPTION) .arg(tr(g_video_backend->GetDisplayName().c_str()))); } + +void GeneralWidget::OnResetSettingsClicked() +{ + auto response = ModalMessageBox::question( + this, tr("Reset Graphics Settings"), + tr("Are you sure you want to restore all Dolphin graphics settings to their default values? " + "This action is irreversible!\n" + "Any customizations you've made will be permanently lost.\n\n" + "Do you wish to continue?"), + QMessageBox::StandardButton::Yes | QMessageBox::StandardButton::Cancel, + QMessageBox::StandardButton::Cancel); + + if (response != QMessageBox::StandardButton::Yes) + return; + + for (const auto& info_variant : Config::GRAPHICS_CONFIG_INFO) + { + std::visit([](const auto& info) { Config::DeleteKey(GetActiveLayerForConfig(info), info); }, + info_variant); + } + + emit Settings::Instance().ConfigChanged(); +} diff --git a/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.h b/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.h index 42f74229d8..1da75e616a 100644 --- a/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.h +++ b/Source/Core/DolphinQt/Config/Graphics/GeneralWidget.h @@ -7,6 +7,8 @@ #include +#include "DolphinQt/Config/ToolTipControls/ToolTipPushButton.h" + class ConfigBool; class ConfigChoice; class ConfigInteger; @@ -43,6 +45,7 @@ private: void ConnectWidgets(); void AddDescriptions(); + void OnResetSettingsClicked(); void OnBackendChanged(const QString& backend_name); void OnEmulationStateChanged(bool running); @@ -57,6 +60,7 @@ private: ConfigBool* m_enable_fullscreen; // Options + ToolTipPushButton* m_reset_settings; ConfigBool* m_show_ping; ConfigBool* m_autoadjust_window_size; ConfigBool* m_show_messages;