Просмотр исходного кода

yuzu qt: Make most UISettings a BasicSetting

For simple primitive settings, moves their defaults and labels to
definition time.

Also fixes typo and clang-format

yuzu qt: config: Fix rng_seed
lat9nq 5 лет назад
Родитель
Сommit
7a8de138df

+ 9 - 4
src/video_core/renderer_vulkan/renderer_vulkan.cpp

@@ -97,14 +97,19 @@ RendererVulkan::RendererVulkan(Core::TelemetrySession& telemetry_session_,
                                Core::Frontend::EmuWindow& emu_window,
                                Core::Frontend::EmuWindow& emu_window,
                                Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_,
                                Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_,
                                std::unique_ptr<Core::Frontend::GraphicsContext> context_) try
                                std::unique_ptr<Core::Frontend::GraphicsContext> context_) try
-    : RendererBase(emu_window, std::move(context_)), telemetry_session(telemetry_session_),
-      cpu_memory(cpu_memory_), gpu(gpu_), library(OpenLibrary()),
+    : RendererBase(emu_window, std::move(context_)),
+      telemetry_session(telemetry_session_),
+      cpu_memory(cpu_memory_),
+      gpu(gpu_),
+      library(OpenLibrary()),
       instance(CreateInstance(library, dld, VK_API_VERSION_1_1, render_window.GetWindowInfo().type,
       instance(CreateInstance(library, dld, VK_API_VERSION_1_1, render_window.GetWindowInfo().type,
                               true, Settings::values.renderer_debug.GetValue())),
                               true, Settings::values.renderer_debug.GetValue())),
       debug_callback(Settings::values.renderer_debug ? CreateDebugCallback(instance) : nullptr),
       debug_callback(Settings::values.renderer_debug ? CreateDebugCallback(instance) : nullptr),
       surface(CreateSurface(instance, render_window)),
       surface(CreateSurface(instance, render_window)),
-      device(CreateDevice(instance, dld, *surface)), memory_allocator(device, false),
-      state_tracker(gpu), scheduler(device, state_tracker),
+      device(CreateDevice(instance, dld, *surface)),
+      memory_allocator(device, false),
+      state_tracker(gpu),
+      scheduler(device, state_tracker),
       swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width,
       swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width,
                 render_window.GetFramebufferLayout().height, false),
                 render_window.GetFramebufferLayout().height, false),
       blit_screen(cpu_memory, render_window, device, memory_allocator, swapchain, scheduler,
       blit_screen(cpu_memory, render_window, device, memory_allocator, swapchain, scheduler,

+ 29 - 29
src/yuzu/configuration/config.cpp

@@ -272,7 +272,12 @@ void Config::Initialize(const std::string& config_name) {
     }
     }
 }
 }
 
 
-// Explicity std::string definition: Qt can't implicitly convert a std::string to a QVariant, nor
+/* {Read,Write}BasicSetting and WriteGlobalSetting templates must be defined here before their
+ * usages later in this file. This allows explicit definition of some types that don't work
+ * nicely with the general version.
+ */
+
+// Explicit std::string definition: Qt can't implicitly convert a std::string to a QVariant, nor
 // can it implicitly convert a QVariant back to a {std::,Q}string
 // can it implicitly convert a QVariant back to a {std::,Q}string
 template <>
 template <>
 void Config::ReadBasicSetting(Settings::BasicSetting<std::string>& setting) {
 void Config::ReadBasicSetting(Settings::BasicSetting<std::string>& setting) {
@@ -1375,8 +1380,7 @@ void Config::SaveRendererValues() {
 void Config::SaveScreenshotValues() {
 void Config::SaveScreenshotValues() {
     qt_config->beginGroup(QStringLiteral("Screenshots"));
     qt_config->beginGroup(QStringLiteral("Screenshots"));
 
 
-    WriteSetting(QStringLiteral("enable_screenshot_save_as"),
-                 UISettings::values.enable_screenshot_save_as);
+    WriteBasicSetting(UISettings::values.enable_screenshot_save_as);
     WriteSetting(QStringLiteral("screenshot_path"),
     WriteSetting(QStringLiteral("screenshot_path"),
                  QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::ScreenshotsDir)));
                  QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::ScreenshotsDir)));
 
 
@@ -1412,10 +1416,10 @@ void Config::SaveSystemValues() {
     WriteGlobalSetting(Settings::values.time_zone_index);
     WriteGlobalSetting(Settings::values.time_zone_index);
 
 
     WriteSetting(QStringLiteral("rng_seed_enabled"),
     WriteSetting(QStringLiteral("rng_seed_enabled"),
-                 Settings::values.rng_seed.GetValue(global).has_value(),
-                 Settings::values.rng_seed.UsingGlobal(), false);
+                 Settings::values.rng_seed.GetValue(global).has_value(), false,
+                 Settings::values.rng_seed.UsingGlobal());
     WriteSetting(QStringLiteral("rng_seed"), Settings::values.rng_seed.GetValue(global).value_or(0),
     WriteSetting(QStringLiteral("rng_seed"), Settings::values.rng_seed.GetValue(global).value_or(0),
-                 Settings::values.rng_seed.UsingGlobal(), 0);
+                 0, Settings::values.rng_seed.UsingGlobal());
 
 
     if (global) {
     if (global) {
         WriteSetting(QStringLiteral("custom_rtc_enabled"), Settings::values.custom_rtc.has_value(),
         WriteSetting(QStringLiteral("custom_rtc_enabled"), Settings::values.custom_rtc.has_value(),
@@ -1436,10 +1440,8 @@ void Config::SaveUIValues() {
 
 
     WriteSetting(QStringLiteral("theme"), UISettings::values.theme,
     WriteSetting(QStringLiteral("theme"), UISettings::values.theme,
                  QString::fromUtf8(UISettings::themes[0].second));
                  QString::fromUtf8(UISettings::themes[0].second));
-    WriteSetting(QStringLiteral("enable_discord_presence"),
-                 UISettings::values.enable_discord_presence, true);
-    WriteSetting(QStringLiteral("select_user_on_boot"), UISettings::values.select_user_on_boot,
-                 false);
+    WriteBasicSetting(UISettings::values.enable_discord_presence);
+    WriteBasicSetting(UISettings::values.select_user_on_boot);
 
 
     SaveUIGamelistValues();
     SaveUIGamelistValues();
     SaveUILayoutValues();
     SaveUILayoutValues();
@@ -1447,18 +1449,17 @@ void Config::SaveUIValues() {
     SaveScreenshotValues();
     SaveScreenshotValues();
     SaveShortcutValues();
     SaveShortcutValues();
 
 
-    WriteSetting(QStringLiteral("singleWindowMode"), UISettings::values.single_window_mode, true);
-    WriteSetting(QStringLiteral("fullscreen"), UISettings::values.fullscreen, false);
-    WriteSetting(QStringLiteral("displayTitleBars"), UISettings::values.display_titlebar, true);
-    WriteSetting(QStringLiteral("showFilterBar"), UISettings::values.show_filter_bar, true);
-    WriteSetting(QStringLiteral("showStatusBar"), UISettings::values.show_status_bar, true);
-    WriteSetting(QStringLiteral("confirmClose"), UISettings::values.confirm_before_closing, true);
-    WriteSetting(QStringLiteral("firstStart"), UISettings::values.first_start, true);
-    WriteSetting(QStringLiteral("calloutFlags"), UISettings::values.callout_flags, 0);
-    WriteSetting(QStringLiteral("showConsole"), UISettings::values.show_console, false);
-    WriteSetting(QStringLiteral("pauseWhenInBackground"),
-                 UISettings::values.pause_when_in_background, false);
-    WriteSetting(QStringLiteral("hideInactiveMouse"), UISettings::values.hide_mouse, false);
+    WriteBasicSetting(UISettings::values.single_window_mode);
+    WriteBasicSetting(UISettings::values.fullscreen);
+    WriteBasicSetting(UISettings::values.display_titlebar);
+    WriteBasicSetting(UISettings::values.show_filter_bar);
+    WriteBasicSetting(UISettings::values.show_status_bar);
+    WriteBasicSetting(UISettings::values.confirm_before_closing);
+    WriteBasicSetting(UISettings::values.first_start);
+    WriteBasicSetting(UISettings::values.callout_flags);
+    WriteBasicSetting(UISettings::values.show_console);
+    WriteBasicSetting(UISettings::values.pause_when_in_background);
+    WriteBasicSetting(UISettings::values.hide_mouse);
 
 
     qt_config->endGroup();
     qt_config->endGroup();
 }
 }
@@ -1466,11 +1467,11 @@ void Config::SaveUIValues() {
 void Config::SaveUIGamelistValues() {
 void Config::SaveUIGamelistValues() {
     qt_config->beginGroup(QStringLiteral("UIGameList"));
     qt_config->beginGroup(QStringLiteral("UIGameList"));
 
 
-    WriteSetting(QStringLiteral("show_add_ons"), UISettings::values.show_add_ons, true);
-    WriteSetting(QStringLiteral("icon_size"), UISettings::values.icon_size, 64);
-    WriteSetting(QStringLiteral("row_1_text_id"), UISettings::values.row_1_text_id, 3);
-    WriteSetting(QStringLiteral("row_2_text_id"), UISettings::values.row_2_text_id, 2);
-    WriteSetting(QStringLiteral("cache_game_list"), UISettings::values.cache_game_list, true);
+    WriteBasicSetting(UISettings::values.show_add_ons);
+    WriteBasicSetting(UISettings::values.icon_size);
+    WriteBasicSetting(UISettings::values.row_1_text_id);
+    WriteBasicSetting(UISettings::values.row_2_text_id);
+    WriteBasicSetting(UISettings::values.cache_game_list);
     qt_config->beginWriteArray(QStringLiteral("favorites"));
     qt_config->beginWriteArray(QStringLiteral("favorites"));
     for (int i = 0; i < UISettings::values.favorited_ids.size(); i++) {
     for (int i = 0; i < UISettings::values.favorited_ids.size(); i++) {
         qt_config->setArrayIndex(i);
         qt_config->setArrayIndex(i);
@@ -1491,8 +1492,7 @@ void Config::SaveUILayoutValues() {
     WriteSetting(QStringLiteral("gameListHeaderState"), UISettings::values.gamelist_header_state);
     WriteSetting(QStringLiteral("gameListHeaderState"), UISettings::values.gamelist_header_state);
     WriteSetting(QStringLiteral("microProfileDialogGeometry"),
     WriteSetting(QStringLiteral("microProfileDialogGeometry"),
                  UISettings::values.microprofile_geometry);
                  UISettings::values.microprofile_geometry);
-    WriteSetting(QStringLiteral("microProfileDialogVisible"),
-                 UISettings::values.microprofile_visible, false);
+    WriteBasicSetting(UISettings::values.microprofile_visible);
 
 
     qt_config->endGroup();
     qt_config->endGroup();
 }
 }

+ 1 - 1
src/yuzu/configuration/configure_debug.cpp

@@ -31,7 +31,7 @@ void ConfigureDebug::SetConfiguration() {
     const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn();
     const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn();
 
 
     ui->toggle_console->setEnabled(runtime_lock);
     ui->toggle_console->setEnabled(runtime_lock);
-    ui->toggle_console->setChecked(UISettings::values.show_console);
+    ui->toggle_console->setChecked(UISettings::values.show_console.GetValue());
     ui->log_filter_edit->setText(QString::fromStdString(Settings::values.log_filter.GetValue()));
     ui->log_filter_edit->setText(QString::fromStdString(Settings::values.log_filter.GetValue()));
     ui->homebrew_args_edit->setText(
     ui->homebrew_args_edit->setText(
         QString::fromStdString(Settings::values.program_args.GetValue()));
         QString::fromStdString(Settings::values.program_args.GetValue()));

+ 1 - 1
src/yuzu/configuration/configure_filesystem.cpp

@@ -55,7 +55,7 @@ void ConfigureFilesystem::setConfiguration() {
     ui->dump_exefs->setChecked(Settings::values.dump_exefs.GetValue());
     ui->dump_exefs->setChecked(Settings::values.dump_exefs.GetValue());
     ui->dump_nso->setChecked(Settings::values.dump_nso.GetValue());
     ui->dump_nso->setChecked(Settings::values.dump_nso.GetValue());
 
 
-    ui->cache_game_list->setChecked(UISettings::values.cache_game_list);
+    ui->cache_game_list->setChecked(UISettings::values.cache_game_list.GetValue());
 
 
     UpdateEnabledControls();
     UpdateEnabledControls();
 }
 }

+ 4 - 4
src/yuzu/configuration/configure_general.cpp

@@ -40,10 +40,10 @@ void ConfigureGeneral::SetConfiguration() {
     ui->use_multi_core->setEnabled(runtime_lock);
     ui->use_multi_core->setEnabled(runtime_lock);
     ui->use_multi_core->setChecked(Settings::values.use_multi_core.GetValue());
     ui->use_multi_core->setChecked(Settings::values.use_multi_core.GetValue());
 
 
-    ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing);
-    ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot);
-    ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background);
-    ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse);
+    ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing.GetValue());
+    ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot.GetValue());
+    ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background.GetValue());
+    ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse.GetValue());
 
 
     ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue());
     ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue());
     ui->frame_limit->setValue(Settings::values.frame_limit.GetValue());
     ui->frame_limit->setValue(Settings::values.frame_limit.GetValue());

+ 6 - 5
src/yuzu/configuration/configure_ui.cpp

@@ -113,11 +113,12 @@ void ConfigureUi::SetConfiguration() {
     ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme));
     ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme));
     ui->language_combobox->setCurrentIndex(
     ui->language_combobox->setCurrentIndex(
         ui->language_combobox->findData(UISettings::values.language));
         ui->language_combobox->findData(UISettings::values.language));
-    ui->show_add_ons->setChecked(UISettings::values.show_add_ons);
+    ui->show_add_ons->setChecked(UISettings::values.show_add_ons.GetValue());
     ui->icon_size_combobox->setCurrentIndex(
     ui->icon_size_combobox->setCurrentIndex(
-        ui->icon_size_combobox->findData(UISettings::values.icon_size));
+        ui->icon_size_combobox->findData(UISettings::values.icon_size.GetValue()));
 
 
-    ui->enable_screenshot_save_as->setChecked(UISettings::values.enable_screenshot_save_as);
+    ui->enable_screenshot_save_as->setChecked(
+        UISettings::values.enable_screenshot_save_as.GetValue());
     ui->screenshot_path_edit->setText(QString::fromStdString(
     ui->screenshot_path_edit->setText(QString::fromStdString(
         Common::FS::GetYuzuPathString(Common::FS::YuzuPath::ScreenshotsDir)));
         Common::FS::GetYuzuPathString(Common::FS::YuzuPath::ScreenshotsDir)));
 }
 }
@@ -178,7 +179,7 @@ void ConfigureUi::InitializeRowComboBoxes() {
 
 
 void ConfigureUi::UpdateFirstRowComboBox(bool init) {
 void ConfigureUi::UpdateFirstRowComboBox(bool init) {
     const int currentIndex =
     const int currentIndex =
-        init ? UISettings::values.row_1_text_id
+        init ? UISettings::values.row_1_text_id.GetValue()
              : ui->row_1_text_combobox->findData(ui->row_1_text_combobox->currentData());
              : ui->row_1_text_combobox->findData(ui->row_1_text_combobox->currentData());
 
 
     ui->row_1_text_combobox->clear();
     ui->row_1_text_combobox->clear();
@@ -197,7 +198,7 @@ void ConfigureUi::UpdateFirstRowComboBox(bool init) {
 
 
 void ConfigureUi::UpdateSecondRowComboBox(bool init) {
 void ConfigureUi::UpdateSecondRowComboBox(bool init) {
     const int currentIndex =
     const int currentIndex =
-        init ? UISettings::values.row_2_text_id
+        init ? UISettings::values.row_2_text_id.GetValue()
              : ui->row_2_text_combobox->findData(ui->row_2_text_combobox->currentData());
              : ui->row_2_text_combobox->findData(ui->row_2_text_combobox->currentData());
 
 
     ui->row_2_text_combobox->clear();
     ui->row_2_text_combobox->clear();

+ 1 - 1
src/yuzu/configuration/configure_web.cpp

@@ -103,7 +103,7 @@ void ConfigureWeb::SetConfiguration() {
 
 
     user_verified = true;
     user_verified = true;
 
 
-    ui->toggle_discordrpc->setChecked(UISettings::values.enable_discord_presence);
+    ui->toggle_discordrpc->setChecked(UISettings::values.enable_discord_presence.GetValue());
 }
 }
 
 
 void ConfigureWeb::ApplyConfiguration() {
 void ConfigureWeb::ApplyConfiguration() {

+ 2 - 2
src/yuzu/debugger/console.cpp

@@ -15,10 +15,10 @@
 namespace Debugger {
 namespace Debugger {
 void ToggleConsole() {
 void ToggleConsole() {
     static bool console_shown = false;
     static bool console_shown = false;
-    if (console_shown == UISettings::values.show_console) {
+    if (console_shown == UISettings::values.show_console.GetValue()) {
         return;
         return;
     } else {
     } else {
-        console_shown = UISettings::values.show_console;
+        console_shown = UISettings::values.show_console.GetValue();
     }
     }
 
 
 #if defined(_WIN32) && !defined(_DEBUG)
 #if defined(_WIN32) && !defined(_DEBUG)

+ 2 - 1
src/yuzu/game_list.cpp

@@ -244,7 +244,8 @@ void GameList::OnUpdateThemedIcons() {
     for (int i = 0; i < item_model->invisibleRootItem()->rowCount(); i++) {
     for (int i = 0; i < item_model->invisibleRootItem()->rowCount(); i++) {
         QStandardItem* child = item_model->invisibleRootItem()->child(i);
         QStandardItem* child = item_model->invisibleRootItem()->child(i);
 
 
-        const int icon_size = std::min(static_cast<int>(UISettings::values.icon_size), 64);
+        const int icon_size =
+            std::min(static_cast<int>(UISettings::values.icon_size.GetValue()), 64);
         switch (child->data(GameListItem::TypeRole).value<GameListItemType>()) {
         switch (child->data(GameListItem::TypeRole).value<GameListItemType>()) {
         case GameListItemType::SdmcDir:
         case GameListItemType::SdmcDir:
             child->setData(
             child->setData(

+ 9 - 6
src/yuzu/game_list_p.h

@@ -80,7 +80,7 @@ public:
         setData(qulonglong(program_id), ProgramIdRole);
         setData(qulonglong(program_id), ProgramIdRole);
         setData(game_type, FileTypeRole);
         setData(game_type, FileTypeRole);
 
 
-        const u32 size = UISettings::values.icon_size;
+        const u32 size = UISettings::values.icon_size.GetValue();
 
 
         QPixmap picture;
         QPixmap picture;
         if (!picture.loadFromData(picture_data.data(), static_cast<u32>(picture_data.size()))) {
         if (!picture.loadFromData(picture_data.data(), static_cast<u32>(picture_data.size()))) {
@@ -108,8 +108,8 @@ public:
                 data(TitleRole).toString(),
                 data(TitleRole).toString(),
             }};
             }};
 
 
-            const auto& row1 = row_data.at(UISettings::values.row_1_text_id);
-            const int row2_id = UISettings::values.row_2_text_id;
+            const auto& row1 = row_data.at(UISettings::values.row_1_text_id.GetValue());
+            const int row2_id = UISettings::values.row_2_text_id.GetValue();
 
 
             if (role == SortRole) {
             if (role == SortRole) {
                 return row1.toLower();
                 return row1.toLower();
@@ -233,7 +233,8 @@ public:
         UISettings::GameDir* game_dir = &directory;
         UISettings::GameDir* game_dir = &directory;
         setData(QVariant(UISettings::values.game_dirs.indexOf(directory)), GameDirRole);
         setData(QVariant(UISettings::values.game_dirs.indexOf(directory)), GameDirRole);
 
 
-        const int icon_size = std::min(static_cast<int>(UISettings::values.icon_size), 64);
+        const int icon_size =
+            std::min(static_cast<int>(UISettings::values.icon_size.GetValue()), 64);
         switch (dir_type) {
         switch (dir_type) {
         case GameListItemType::SdmcDir:
         case GameListItemType::SdmcDir:
             setData(
             setData(
@@ -294,7 +295,8 @@ public:
     explicit GameListAddDir() {
     explicit GameListAddDir() {
         setData(type(), TypeRole);
         setData(type(), TypeRole);
 
 
-        const int icon_size = std::min(static_cast<int>(UISettings::values.icon_size), 64);
+        const int icon_size =
+            std::min(static_cast<int>(UISettings::values.icon_size.GetValue()), 64);
         setData(QIcon::fromTheme(QStringLiteral("plus"))
         setData(QIcon::fromTheme(QStringLiteral("plus"))
                     .pixmap(icon_size)
                     .pixmap(icon_size)
                     .scaled(icon_size, icon_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation),
                     .scaled(icon_size, icon_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation),
@@ -316,7 +318,8 @@ public:
     explicit GameListFavorites() {
     explicit GameListFavorites() {
         setData(type(), TypeRole);
         setData(type(), TypeRole);
 
 
-        const int icon_size = std::min(static_cast<int>(UISettings::values.icon_size), 64);
+        const int icon_size =
+            std::min(static_cast<int>(UISettings::values.icon_size.GetValue()), 64);
         setData(QIcon::fromTheme(QStringLiteral("star"))
         setData(QIcon::fromTheme(QStringLiteral("star"))
                     .pixmap(icon_size)
                     .pixmap(icon_size)
                     .scaled(icon_size, icon_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation),
                     .scaled(icon_size, icon_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation),

+ 21 - 16
src/yuzu/main.cpp

@@ -155,11 +155,13 @@ enum class CalloutFlag : uint32_t {
 };
 };
 
 
 void GMainWindow::ShowTelemetryCallout() {
 void GMainWindow::ShowTelemetryCallout() {
-    if (UISettings::values.callout_flags & static_cast<uint32_t>(CalloutFlag::Telemetry)) {
+    if (UISettings::values.callout_flags.GetValue() &
+        static_cast<uint32_t>(CalloutFlag::Telemetry)) {
         return;
         return;
     }
     }
 
 
-    UISettings::values.callout_flags |= static_cast<uint32_t>(CalloutFlag::Telemetry);
+    UISettings::values.callout_flags =
+        UISettings::values.callout_flags.GetValue() | static_cast<uint32_t>(CalloutFlag::Telemetry);
     const QString telemetry_message =
     const QString telemetry_message =
         tr("<a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous "
         tr("<a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous "
            "data is collected</a> to help improve yuzu. "
            "data is collected</a> to help improve yuzu. "
@@ -215,7 +217,7 @@ GMainWindow::GMainWindow()
     default_theme_paths = QIcon::themeSearchPaths();
     default_theme_paths = QIcon::themeSearchPaths();
     UpdateUITheme();
     UpdateUITheme();
 
 
-    SetDiscordEnabled(UISettings::values.enable_discord_presence);
+    SetDiscordEnabled(UISettings::values.enable_discord_presence.GetValue());
     discord_rpc->Update();
     discord_rpc->Update();
 
 
     RegisterMetaTypes();
     RegisterMetaTypes();
@@ -1059,23 +1061,24 @@ void GMainWindow::RestoreUIState() {
     render_window->restoreGeometry(UISettings::values.renderwindow_geometry);
     render_window->restoreGeometry(UISettings::values.renderwindow_geometry);
 #if MICROPROFILE_ENABLED
 #if MICROPROFILE_ENABLED
     microProfileDialog->restoreGeometry(UISettings::values.microprofile_geometry);
     microProfileDialog->restoreGeometry(UISettings::values.microprofile_geometry);
-    microProfileDialog->setVisible(UISettings::values.microprofile_visible);
+    microProfileDialog->setVisible(UISettings::values.microprofile_visible.GetValue());
 #endif
 #endif
 
 
     game_list->LoadInterfaceLayout();
     game_list->LoadInterfaceLayout();
 
 
-    ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode);
+    ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode.GetValue());
     ToggleWindowMode();
     ToggleWindowMode();
 
 
-    ui.action_Fullscreen->setChecked(UISettings::values.fullscreen);
+    ui.action_Fullscreen->setChecked(UISettings::values.fullscreen.GetValue());
 
 
-    ui.action_Display_Dock_Widget_Headers->setChecked(UISettings::values.display_titlebar);
+    ui.action_Display_Dock_Widget_Headers->setChecked(
+        UISettings::values.display_titlebar.GetValue());
     OnDisplayTitleBars(ui.action_Display_Dock_Widget_Headers->isChecked());
     OnDisplayTitleBars(ui.action_Display_Dock_Widget_Headers->isChecked());
 
 
-    ui.action_Show_Filter_Bar->setChecked(UISettings::values.show_filter_bar);
+    ui.action_Show_Filter_Bar->setChecked(UISettings::values.show_filter_bar.GetValue());
     game_list->SetFilterVisible(ui.action_Show_Filter_Bar->isChecked());
     game_list->SetFilterVisible(ui.action_Show_Filter_Bar->isChecked());
 
 
-    ui.action_Show_Status_Bar->setChecked(UISettings::values.show_status_bar);
+    ui.action_Show_Status_Bar->setChecked(UISettings::values.show_status_bar.GetValue());
     statusBar()->setVisible(ui.action_Show_Status_Bar->isChecked());
     statusBar()->setVisible(ui.action_Show_Status_Bar->isChecked());
     Debugger::ToggleConsole();
     Debugger::ToggleConsole();
 }
 }
@@ -1242,13 +1245,14 @@ bool GMainWindow::LoadROM(const QString& filename, std::size_t program_index) {
     const Core::System::ResultStatus result{
     const Core::System::ResultStatus result{
         system.Load(*render_window, filename.toStdString(), program_index)};
         system.Load(*render_window, filename.toStdString(), program_index)};
 
 
-    const auto drd_callout =
-        (UISettings::values.callout_flags & static_cast<u32>(CalloutFlag::DRDDeprecation)) == 0;
+    const auto drd_callout = (UISettings::values.callout_flags.GetValue() &
+                              static_cast<u32>(CalloutFlag::DRDDeprecation)) == 0;
 
 
     if (result == Core::System::ResultStatus::Success &&
     if (result == Core::System::ResultStatus::Success &&
         system.GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory &&
         system.GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory &&
         drd_callout) {
         drd_callout) {
-        UISettings::values.callout_flags |= static_cast<u32>(CalloutFlag::DRDDeprecation);
+        UISettings::values.callout_flags = UISettings::values.callout_flags.GetValue() |
+                                           static_cast<u32>(CalloutFlag::DRDDeprecation);
         QMessageBox::warning(
         QMessageBox::warning(
             this, tr("Warning Outdated Game Format"),
             this, tr("Warning Outdated Game Format"),
             tr("You are using the deconstructed ROM directory format for this game, which is an "
             tr("You are using the deconstructed ROM directory format for this game, which is an "
@@ -2609,7 +2613,7 @@ void GMainWindow::ResetWindowSize1080() {
 
 
 void GMainWindow::OnConfigure() {
 void GMainWindow::OnConfigure() {
     const auto old_theme = UISettings::values.theme;
     const auto old_theme = UISettings::values.theme;
-    const bool old_discord_presence = UISettings::values.enable_discord_presence;
+    const bool old_discord_presence = UISettings::values.enable_discord_presence.GetValue();
 
 
     ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get());
     ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get());
     connect(&configure_dialog, &ConfigureDialog::LanguageChanged, this,
     connect(&configure_dialog, &ConfigureDialog::LanguageChanged, this,
@@ -2666,8 +2670,8 @@ void GMainWindow::OnConfigure() {
     if (UISettings::values.theme != old_theme) {
     if (UISettings::values.theme != old_theme) {
         UpdateUITheme();
         UpdateUITheme();
     }
     }
-    if (UISettings::values.enable_discord_presence != old_discord_presence) {
-        SetDiscordEnabled(UISettings::values.enable_discord_presence);
+    if (UISettings::values.enable_discord_presence.GetValue() != old_discord_presence) {
+        SetDiscordEnabled(UISettings::values.enable_discord_presence.GetValue());
     }
     }
     emit UpdateThemedIcons();
     emit UpdateThemedIcons();
 
 
@@ -2823,7 +2827,8 @@ void GMainWindow::OnCaptureScreenshot() {
         }
         }
     }
     }
 #endif
 #endif
-    render_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor, filename);
+    render_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor.GetValue(),
+                                     filename);
     OnStartGame();
     OnStartGame();
 }
 }
 
 

+ 22 - 21
src/yuzu/uisettings.h

@@ -13,6 +13,7 @@
 #include <QStringList>
 #include <QStringList>
 #include <QVector>
 #include <QVector>
 #include "common/common_types.h"
 #include "common/common_types.h"
+#include "common/settings.h"
 
 
 namespace UISettings {
 namespace UISettings {
 
 
@@ -48,26 +49,26 @@ struct Values {
     QByteArray gamelist_header_state;
     QByteArray gamelist_header_state;
 
 
     QByteArray microprofile_geometry;
     QByteArray microprofile_geometry;
-    bool microprofile_visible;
+    Settings::BasicSetting<bool> microprofile_visible{false, "microProfileDialogVisible"};
 
 
-    bool single_window_mode;
-    bool fullscreen;
-    bool display_titlebar;
-    bool show_filter_bar;
-    bool show_status_bar;
+    Settings::BasicSetting<bool> single_window_mode{true, "singleWindowMode"};
+    Settings::BasicSetting<bool> fullscreen{false, "fullscreen"};
+    Settings::BasicSetting<bool> display_titlebar{true, "displayTitleBars"};
+    Settings::BasicSetting<bool> show_filter_bar{true, "showFilterBar"};
+    Settings::BasicSetting<bool> show_status_bar{true, "showStatusBar"};
 
 
-    bool confirm_before_closing;
-    bool first_start;
-    bool pause_when_in_background;
-    bool hide_mouse;
+    Settings::BasicSetting<bool> confirm_before_closing{true, "confirmClose"};
+    Settings::BasicSetting<bool> first_start{true, "firstStart"};
+    Settings::BasicSetting<bool> pause_when_in_background{false, "pauseWhenInBackground"};
+    Settings::BasicSetting<bool> hide_mouse{false, "hideInactiveMouse"};
 
 
-    bool select_user_on_boot;
+    Settings::BasicSetting<bool> select_user_on_boot{false, "select_user_on_boot"};
 
 
     // Discord RPC
     // Discord RPC
-    bool enable_discord_presence;
+    Settings::BasicSetting<bool> enable_discord_presence{true, "enable_discord_presence"};
 
 
-    bool enable_screenshot_save_as;
-    u16 screenshot_resolution_factor;
+    Settings::BasicSetting<bool> enable_screenshot_save_as{true, "enable_screenshot_save_as"};
+    Settings::BasicSetting<u16> screenshot_resolution_factor{0, "screenshot_resolution_factor"};
 
 
     QString roms_path;
     QString roms_path;
     QString symbols_path;
     QString symbols_path;
@@ -83,18 +84,18 @@ struct Values {
     // Shortcut name <Shortcut, context>
     // Shortcut name <Shortcut, context>
     std::vector<Shortcut> shortcuts;
     std::vector<Shortcut> shortcuts;
 
 
-    uint32_t callout_flags;
+    Settings::BasicSetting<uint32_t> callout_flags{0, "calloutFlags"};
 
 
     // logging
     // logging
-    bool show_console;
+    Settings::BasicSetting<bool> show_console{false, "showConsole"};
 
 
     // Game List
     // Game List
-    bool show_add_ons;
-    uint32_t icon_size;
-    uint8_t row_1_text_id;
-    uint8_t row_2_text_id;
+    Settings::BasicSetting<bool> show_add_ons{true, "show_add_ons"};
+    Settings::BasicSetting<uint32_t> icon_size{64, "icon_size"};
+    Settings::BasicSetting<uint8_t> row_1_text_id{3, "row_1_text_id"};
+    Settings::BasicSetting<uint8_t> row_2_text_id{2, "row_2_text_id"};
     std::atomic_bool is_game_list_reload_pending{false};
     std::atomic_bool is_game_list_reload_pending{false};
-    bool cache_game_list;
+    Settings::BasicSetting<bool> cache_game_list{true, "cache_game_list"};
 
 
     bool configuration_applied;
     bool configuration_applied;
     bool reset_to_defaults;
     bool reset_to_defaults;