summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_vulkan/renderer_vulkan.cpp13
-rw-r--r--src/yuzu/configuration/config.cpp58
-rw-r--r--src/yuzu/configuration/configure_debug.cpp2
-rw-r--r--src/yuzu/configuration/configure_filesystem.cpp2
-rw-r--r--src/yuzu/configuration/configure_general.cpp8
-rw-r--r--src/yuzu/configuration/configure_ui.cpp11
-rw-r--r--src/yuzu/configuration/configure_web.cpp2
-rw-r--r--src/yuzu/debugger/console.cpp4
-rw-r--r--src/yuzu/game_list.cpp3
-rw-r--r--src/yuzu/game_list_p.h15
-rw-r--r--src/yuzu/main.cpp37
-rw-r--r--src/yuzu/uisettings.h43
12 files changed, 107 insertions, 91 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
index 2bab2b4f5..bec3a81d9 100644
--- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp
+++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
@@ -97,14 +97,19 @@ RendererVulkan::RendererVulkan(Core::TelemetrySession& telemetry_session_,
97 Core::Frontend::EmuWindow& emu_window, 97 Core::Frontend::EmuWindow& emu_window,
98 Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_, 98 Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_,
99 std::unique_ptr<Core::Frontend::GraphicsContext> context_) try 99 std::unique_ptr<Core::Frontend::GraphicsContext> context_) try
100 : RendererBase(emu_window, std::move(context_)), telemetry_session(telemetry_session_), 100 : RendererBase(emu_window, std::move(context_)),
101 cpu_memory(cpu_memory_), gpu(gpu_), library(OpenLibrary()), 101 telemetry_session(telemetry_session_),
102 cpu_memory(cpu_memory_),
103 gpu(gpu_),
104 library(OpenLibrary()),
102 instance(CreateInstance(library, dld, VK_API_VERSION_1_1, render_window.GetWindowInfo().type, 105 instance(CreateInstance(library, dld, VK_API_VERSION_1_1, render_window.GetWindowInfo().type,
103 true, Settings::values.renderer_debug.GetValue())), 106 true, Settings::values.renderer_debug.GetValue())),
104 debug_callback(Settings::values.renderer_debug ? CreateDebugCallback(instance) : nullptr), 107 debug_callback(Settings::values.renderer_debug ? CreateDebugCallback(instance) : nullptr),
105 surface(CreateSurface(instance, render_window)), 108 surface(CreateSurface(instance, render_window)),
106 device(CreateDevice(instance, dld, *surface)), memory_allocator(device, false), 109 device(CreateDevice(instance, dld, *surface)),
107 state_tracker(gpu), scheduler(device, state_tracker), 110 memory_allocator(device, false),
111 state_tracker(gpu),
112 scheduler(device, state_tracker),
108 swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width, 113 swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width,
109 render_window.GetFramebufferLayout().height, false), 114 render_window.GetFramebufferLayout().height, false),
110 blit_screen(cpu_memory, render_window, device, memory_allocator, swapchain, scheduler, 115 blit_screen(cpu_memory, render_window, device, memory_allocator, swapchain, scheduler,
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index d36aaade2..0802b14a1 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -272,7 +272,12 @@ void Config::Initialize(const std::string& config_name) {
272 } 272 }
273} 273}
274 274
275// Explicity std::string definition: Qt can't implicitly convert a std::string to a QVariant, nor 275/* {Read,Write}BasicSetting and WriteGlobalSetting templates must be defined here before their
276 * usages later in this file. This allows explicit definition of some types that don't work
277 * nicely with the general version.
278 */
279
280// Explicit std::string definition: Qt can't implicitly convert a std::string to a QVariant, nor
276// can it implicitly convert a QVariant back to a {std::,Q}string 281// can it implicitly convert a QVariant back to a {std::,Q}string
277template <> 282template <>
278void Config::ReadBasicSetting(Settings::BasicSetting<std::string>& setting) { 283void Config::ReadBasicSetting(Settings::BasicSetting<std::string>& setting) {
@@ -1375,8 +1380,7 @@ void Config::SaveRendererValues() {
1375void Config::SaveScreenshotValues() { 1380void Config::SaveScreenshotValues() {
1376 qt_config->beginGroup(QStringLiteral("Screenshots")); 1381 qt_config->beginGroup(QStringLiteral("Screenshots"));
1377 1382
1378 WriteSetting(QStringLiteral("enable_screenshot_save_as"), 1383 WriteBasicSetting(UISettings::values.enable_screenshot_save_as);
1379 UISettings::values.enable_screenshot_save_as);
1380 WriteSetting(QStringLiteral("screenshot_path"), 1384 WriteSetting(QStringLiteral("screenshot_path"),
1381 QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::ScreenshotsDir))); 1385 QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::ScreenshotsDir)));
1382 1386
@@ -1412,10 +1416,10 @@ void Config::SaveSystemValues() {
1412 WriteGlobalSetting(Settings::values.time_zone_index); 1416 WriteGlobalSetting(Settings::values.time_zone_index);
1413 1417
1414 WriteSetting(QStringLiteral("rng_seed_enabled"), 1418 WriteSetting(QStringLiteral("rng_seed_enabled"),
1415 Settings::values.rng_seed.GetValue(global).has_value(), 1419 Settings::values.rng_seed.GetValue(global).has_value(), false,
1416 Settings::values.rng_seed.UsingGlobal(), false); 1420 Settings::values.rng_seed.UsingGlobal());
1417 WriteSetting(QStringLiteral("rng_seed"), Settings::values.rng_seed.GetValue(global).value_or(0), 1421 WriteSetting(QStringLiteral("rng_seed"), Settings::values.rng_seed.GetValue(global).value_or(0),
1418 Settings::values.rng_seed.UsingGlobal(), 0); 1422 0, Settings::values.rng_seed.UsingGlobal());
1419 1423
1420 if (global) { 1424 if (global) {
1421 WriteSetting(QStringLiteral("custom_rtc_enabled"), Settings::values.custom_rtc.has_value(), 1425 WriteSetting(QStringLiteral("custom_rtc_enabled"), Settings::values.custom_rtc.has_value(),
@@ -1436,10 +1440,8 @@ void Config::SaveUIValues() {
1436 1440
1437 WriteSetting(QStringLiteral("theme"), UISettings::values.theme, 1441 WriteSetting(QStringLiteral("theme"), UISettings::values.theme,
1438 QString::fromUtf8(UISettings::themes[0].second)); 1442 QString::fromUtf8(UISettings::themes[0].second));
1439 WriteSetting(QStringLiteral("enable_discord_presence"), 1443 WriteBasicSetting(UISettings::values.enable_discord_presence);
1440 UISettings::values.enable_discord_presence, true); 1444 WriteBasicSetting(UISettings::values.select_user_on_boot);
1441 WriteSetting(QStringLiteral("select_user_on_boot"), UISettings::values.select_user_on_boot,
1442 false);
1443 1445
1444 SaveUIGamelistValues(); 1446 SaveUIGamelistValues();
1445 SaveUILayoutValues(); 1447 SaveUILayoutValues();
@@ -1447,18 +1449,17 @@ void Config::SaveUIValues() {
1447 SaveScreenshotValues(); 1449 SaveScreenshotValues();
1448 SaveShortcutValues(); 1450 SaveShortcutValues();
1449 1451
1450 WriteSetting(QStringLiteral("singleWindowMode"), UISettings::values.single_window_mode, true); 1452 WriteBasicSetting(UISettings::values.single_window_mode);
1451 WriteSetting(QStringLiteral("fullscreen"), UISettings::values.fullscreen, false); 1453 WriteBasicSetting(UISettings::values.fullscreen);
1452 WriteSetting(QStringLiteral("displayTitleBars"), UISettings::values.display_titlebar, true); 1454 WriteBasicSetting(UISettings::values.display_titlebar);
1453 WriteSetting(QStringLiteral("showFilterBar"), UISettings::values.show_filter_bar, true); 1455 WriteBasicSetting(UISettings::values.show_filter_bar);
1454 WriteSetting(QStringLiteral("showStatusBar"), UISettings::values.show_status_bar, true); 1456 WriteBasicSetting(UISettings::values.show_status_bar);
1455 WriteSetting(QStringLiteral("confirmClose"), UISettings::values.confirm_before_closing, true); 1457 WriteBasicSetting(UISettings::values.confirm_before_closing);
1456 WriteSetting(QStringLiteral("firstStart"), UISettings::values.first_start, true); 1458 WriteBasicSetting(UISettings::values.first_start);
1457 WriteSetting(QStringLiteral("calloutFlags"), UISettings::values.callout_flags, 0); 1459 WriteBasicSetting(UISettings::values.callout_flags);
1458 WriteSetting(QStringLiteral("showConsole"), UISettings::values.show_console, false); 1460 WriteBasicSetting(UISettings::values.show_console);
1459 WriteSetting(QStringLiteral("pauseWhenInBackground"), 1461 WriteBasicSetting(UISettings::values.pause_when_in_background);
1460 UISettings::values.pause_when_in_background, false); 1462 WriteBasicSetting(UISettings::values.hide_mouse);
1461 WriteSetting(QStringLiteral("hideInactiveMouse"), UISettings::values.hide_mouse, false);
1462 1463
1463 qt_config->endGroup(); 1464 qt_config->endGroup();
1464} 1465}
@@ -1466,11 +1467,11 @@ void Config::SaveUIValues() {
1466void Config::SaveUIGamelistValues() { 1467void Config::SaveUIGamelistValues() {
1467 qt_config->beginGroup(QStringLiteral("UIGameList")); 1468 qt_config->beginGroup(QStringLiteral("UIGameList"));
1468 1469
1469 WriteSetting(QStringLiteral("show_add_ons"), UISettings::values.show_add_ons, true); 1470 WriteBasicSetting(UISettings::values.show_add_ons);
1470 WriteSetting(QStringLiteral("icon_size"), UISettings::values.icon_size, 64); 1471 WriteBasicSetting(UISettings::values.icon_size);
1471 WriteSetting(QStringLiteral("row_1_text_id"), UISettings::values.row_1_text_id, 3); 1472 WriteBasicSetting(UISettings::values.row_1_text_id);
1472 WriteSetting(QStringLiteral("row_2_text_id"), UISettings::values.row_2_text_id, 2); 1473 WriteBasicSetting(UISettings::values.row_2_text_id);
1473 WriteSetting(QStringLiteral("cache_game_list"), UISettings::values.cache_game_list, true); 1474 WriteBasicSetting(UISettings::values.cache_game_list);
1474 qt_config->beginWriteArray(QStringLiteral("favorites")); 1475 qt_config->beginWriteArray(QStringLiteral("favorites"));
1475 for (int i = 0; i < UISettings::values.favorited_ids.size(); i++) { 1476 for (int i = 0; i < UISettings::values.favorited_ids.size(); i++) {
1476 qt_config->setArrayIndex(i); 1477 qt_config->setArrayIndex(i);
@@ -1491,8 +1492,7 @@ void Config::SaveUILayoutValues() {
1491 WriteSetting(QStringLiteral("gameListHeaderState"), UISettings::values.gamelist_header_state); 1492 WriteSetting(QStringLiteral("gameListHeaderState"), UISettings::values.gamelist_header_state);
1492 WriteSetting(QStringLiteral("microProfileDialogGeometry"), 1493 WriteSetting(QStringLiteral("microProfileDialogGeometry"),
1493 UISettings::values.microprofile_geometry); 1494 UISettings::values.microprofile_geometry);
1494 WriteSetting(QStringLiteral("microProfileDialogVisible"), 1495 WriteBasicSetting(UISettings::values.microprofile_visible);
1495 UISettings::values.microprofile_visible, false);
1496 1496
1497 qt_config->endGroup(); 1497 qt_config->endGroup();
1498} 1498}
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp
index 7d15d54b8..cbe45a305 100644
--- a/src/yuzu/configuration/configure_debug.cpp
+++ b/src/yuzu/configuration/configure_debug.cpp
@@ -31,7 +31,7 @@ void ConfigureDebug::SetConfiguration() {
31 const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn(); 31 const bool runtime_lock = !Core::System::GetInstance().IsPoweredOn();
32 32
33 ui->toggle_console->setEnabled(runtime_lock); 33 ui->toggle_console->setEnabled(runtime_lock);
34 ui->toggle_console->setChecked(UISettings::values.show_console); 34 ui->toggle_console->setChecked(UISettings::values.show_console.GetValue());
35 ui->log_filter_edit->setText(QString::fromStdString(Settings::values.log_filter.GetValue())); 35 ui->log_filter_edit->setText(QString::fromStdString(Settings::values.log_filter.GetValue()));
36 ui->homebrew_args_edit->setText( 36 ui->homebrew_args_edit->setText(
37 QString::fromStdString(Settings::values.program_args.GetValue())); 37 QString::fromStdString(Settings::values.program_args.GetValue()));
diff --git a/src/yuzu/configuration/configure_filesystem.cpp b/src/yuzu/configuration/configure_filesystem.cpp
index d0b5c6efe..9cb317822 100644
--- a/src/yuzu/configuration/configure_filesystem.cpp
+++ b/src/yuzu/configuration/configure_filesystem.cpp
@@ -55,7 +55,7 @@ void ConfigureFilesystem::setConfiguration() {
55 ui->dump_exefs->setChecked(Settings::values.dump_exefs.GetValue()); 55 ui->dump_exefs->setChecked(Settings::values.dump_exefs.GetValue());
56 ui->dump_nso->setChecked(Settings::values.dump_nso.GetValue()); 56 ui->dump_nso->setChecked(Settings::values.dump_nso.GetValue());
57 57
58 ui->cache_game_list->setChecked(UISettings::values.cache_game_list); 58 ui->cache_game_list->setChecked(UISettings::values.cache_game_list.GetValue());
59 59
60 UpdateEnabledControls(); 60 UpdateEnabledControls();
61} 61}
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index 38edb4d8d..18f25def6 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -40,10 +40,10 @@ void ConfigureGeneral::SetConfiguration() {
40 ui->use_multi_core->setEnabled(runtime_lock); 40 ui->use_multi_core->setEnabled(runtime_lock);
41 ui->use_multi_core->setChecked(Settings::values.use_multi_core.GetValue()); 41 ui->use_multi_core->setChecked(Settings::values.use_multi_core.GetValue());
42 42
43 ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing); 43 ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing.GetValue());
44 ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot); 44 ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot.GetValue());
45 ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background); 45 ui->toggle_background_pause->setChecked(UISettings::values.pause_when_in_background.GetValue());
46 ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse); 46 ui->toggle_hide_mouse->setChecked(UISettings::values.hide_mouse.GetValue());
47 47
48 ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue()); 48 ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue());
49 ui->frame_limit->setValue(Settings::values.frame_limit.GetValue()); 49 ui->frame_limit->setValue(Settings::values.frame_limit.GetValue());
diff --git a/src/yuzu/configuration/configure_ui.cpp b/src/yuzu/configuration/configure_ui.cpp
index 9674119e1..e8f41bf65 100644
--- a/src/yuzu/configuration/configure_ui.cpp
+++ b/src/yuzu/configuration/configure_ui.cpp
@@ -113,11 +113,12 @@ void ConfigureUi::SetConfiguration() {
113 ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); 113 ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme));
114 ui->language_combobox->setCurrentIndex( 114 ui->language_combobox->setCurrentIndex(
115 ui->language_combobox->findData(UISettings::values.language)); 115 ui->language_combobox->findData(UISettings::values.language));
116 ui->show_add_ons->setChecked(UISettings::values.show_add_ons); 116 ui->show_add_ons->setChecked(UISettings::values.show_add_ons.GetValue());
117 ui->icon_size_combobox->setCurrentIndex( 117 ui->icon_size_combobox->setCurrentIndex(
118 ui->icon_size_combobox->findData(UISettings::values.icon_size)); 118 ui->icon_size_combobox->findData(UISettings::values.icon_size.GetValue()));
119 119
120 ui->enable_screenshot_save_as->setChecked(UISettings::values.enable_screenshot_save_as); 120 ui->enable_screenshot_save_as->setChecked(
121 UISettings::values.enable_screenshot_save_as.GetValue());
121 ui->screenshot_path_edit->setText(QString::fromStdString( 122 ui->screenshot_path_edit->setText(QString::fromStdString(
122 Common::FS::GetYuzuPathString(Common::FS::YuzuPath::ScreenshotsDir))); 123 Common::FS::GetYuzuPathString(Common::FS::YuzuPath::ScreenshotsDir)));
123} 124}
@@ -178,7 +179,7 @@ void ConfigureUi::InitializeRowComboBoxes() {
178 179
179void ConfigureUi::UpdateFirstRowComboBox(bool init) { 180void ConfigureUi::UpdateFirstRowComboBox(bool init) {
180 const int currentIndex = 181 const int currentIndex =
181 init ? UISettings::values.row_1_text_id 182 init ? UISettings::values.row_1_text_id.GetValue()
182 : ui->row_1_text_combobox->findData(ui->row_1_text_combobox->currentData()); 183 : ui->row_1_text_combobox->findData(ui->row_1_text_combobox->currentData());
183 184
184 ui->row_1_text_combobox->clear(); 185 ui->row_1_text_combobox->clear();
@@ -197,7 +198,7 @@ void ConfigureUi::UpdateFirstRowComboBox(bool init) {
197 198
198void ConfigureUi::UpdateSecondRowComboBox(bool init) { 199void ConfigureUi::UpdateSecondRowComboBox(bool init) {
199 const int currentIndex = 200 const int currentIndex =
200 init ? UISettings::values.row_2_text_id 201 init ? UISettings::values.row_2_text_id.GetValue()
201 : ui->row_2_text_combobox->findData(ui->row_2_text_combobox->currentData()); 202 : ui->row_2_text_combobox->findData(ui->row_2_text_combobox->currentData());
202 203
203 ui->row_2_text_combobox->clear(); 204 ui->row_2_text_combobox->clear();
diff --git a/src/yuzu/configuration/configure_web.cpp b/src/yuzu/configuration/configure_web.cpp
index 0fd76dc2c..d779251b4 100644
--- a/src/yuzu/configuration/configure_web.cpp
+++ b/src/yuzu/configuration/configure_web.cpp
@@ -103,7 +103,7 @@ void ConfigureWeb::SetConfiguration() {
103 103
104 user_verified = true; 104 user_verified = true;
105 105
106 ui->toggle_discordrpc->setChecked(UISettings::values.enable_discord_presence); 106 ui->toggle_discordrpc->setChecked(UISettings::values.enable_discord_presence.GetValue());
107} 107}
108 108
109void ConfigureWeb::ApplyConfiguration() { 109void ConfigureWeb::ApplyConfiguration() {
diff --git a/src/yuzu/debugger/console.cpp b/src/yuzu/debugger/console.cpp
index c11a326ac..22ca1285d 100644
--- a/src/yuzu/debugger/console.cpp
+++ b/src/yuzu/debugger/console.cpp
@@ -15,10 +15,10 @@
15namespace Debugger { 15namespace Debugger {
16void ToggleConsole() { 16void ToggleConsole() {
17 static bool console_shown = false; 17 static bool console_shown = false;
18 if (console_shown == UISettings::values.show_console) { 18 if (console_shown == UISettings::values.show_console.GetValue()) {
19 return; 19 return;
20 } else { 20 } else {
21 console_shown = UISettings::values.show_console; 21 console_shown = UISettings::values.show_console.GetValue();
22 } 22 }
23 23
24#if defined(_WIN32) && !defined(_DEBUG) 24#if defined(_WIN32) && !defined(_DEBUG)
diff --git a/src/yuzu/game_list.cpp b/src/yuzu/game_list.cpp
index da956c99b..9c5aeb833 100644
--- a/src/yuzu/game_list.cpp
+++ b/src/yuzu/game_list.cpp
@@ -244,7 +244,8 @@ void GameList::OnUpdateThemedIcons() {
244 for (int i = 0; i < item_model->invisibleRootItem()->rowCount(); i++) { 244 for (int i = 0; i < item_model->invisibleRootItem()->rowCount(); i++) {
245 QStandardItem* child = item_model->invisibleRootItem()->child(i); 245 QStandardItem* child = item_model->invisibleRootItem()->child(i);
246 246
247 const int icon_size = std::min(static_cast<int>(UISettings::values.icon_size), 64); 247 const int icon_size =
248 std::min(static_cast<int>(UISettings::values.icon_size.GetValue()), 64);
248 switch (child->data(GameListItem::TypeRole).value<GameListItemType>()) { 249 switch (child->data(GameListItem::TypeRole).value<GameListItemType>()) {
249 case GameListItemType::SdmcDir: 250 case GameListItemType::SdmcDir:
250 child->setData( 251 child->setData(
diff --git a/src/yuzu/game_list_p.h b/src/yuzu/game_list_p.h
index 978d27325..982c0789d 100644
--- a/src/yuzu/game_list_p.h
+++ b/src/yuzu/game_list_p.h
@@ -80,7 +80,7 @@ public:
80 setData(qulonglong(program_id), ProgramIdRole); 80 setData(qulonglong(program_id), ProgramIdRole);
81 setData(game_type, FileTypeRole); 81 setData(game_type, FileTypeRole);
82 82
83 const u32 size = UISettings::values.icon_size; 83 const u32 size = UISettings::values.icon_size.GetValue();
84 84
85 QPixmap picture; 85 QPixmap picture;
86 if (!picture.loadFromData(picture_data.data(), static_cast<u32>(picture_data.size()))) { 86 if (!picture.loadFromData(picture_data.data(), static_cast<u32>(picture_data.size()))) {
@@ -108,8 +108,8 @@ public:
108 data(TitleRole).toString(), 108 data(TitleRole).toString(),
109 }}; 109 }};
110 110
111 const auto& row1 = row_data.at(UISettings::values.row_1_text_id); 111 const auto& row1 = row_data.at(UISettings::values.row_1_text_id.GetValue());
112 const int row2_id = UISettings::values.row_2_text_id; 112 const int row2_id = UISettings::values.row_2_text_id.GetValue();
113 113
114 if (role == SortRole) { 114 if (role == SortRole) {
115 return row1.toLower(); 115 return row1.toLower();
@@ -233,7 +233,8 @@ public:
233 UISettings::GameDir* game_dir = &directory; 233 UISettings::GameDir* game_dir = &directory;
234 setData(QVariant(UISettings::values.game_dirs.indexOf(directory)), GameDirRole); 234 setData(QVariant(UISettings::values.game_dirs.indexOf(directory)), GameDirRole);
235 235
236 const int icon_size = std::min(static_cast<int>(UISettings::values.icon_size), 64); 236 const int icon_size =
237 std::min(static_cast<int>(UISettings::values.icon_size.GetValue()), 64);
237 switch (dir_type) { 238 switch (dir_type) {
238 case GameListItemType::SdmcDir: 239 case GameListItemType::SdmcDir:
239 setData( 240 setData(
@@ -294,7 +295,8 @@ public:
294 explicit GameListAddDir() { 295 explicit GameListAddDir() {
295 setData(type(), TypeRole); 296 setData(type(), TypeRole);
296 297
297 const int icon_size = std::min(static_cast<int>(UISettings::values.icon_size), 64); 298 const int icon_size =
299 std::min(static_cast<int>(UISettings::values.icon_size.GetValue()), 64);
298 setData(QIcon::fromTheme(QStringLiteral("plus")) 300 setData(QIcon::fromTheme(QStringLiteral("plus"))
299 .pixmap(icon_size) 301 .pixmap(icon_size)
300 .scaled(icon_size, icon_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), 302 .scaled(icon_size, icon_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation),
@@ -316,7 +318,8 @@ public:
316 explicit GameListFavorites() { 318 explicit GameListFavorites() {
317 setData(type(), TypeRole); 319 setData(type(), TypeRole);
318 320
319 const int icon_size = std::min(static_cast<int>(UISettings::values.icon_size), 64); 321 const int icon_size =
322 std::min(static_cast<int>(UISettings::values.icon_size.GetValue()), 64);
320 setData(QIcon::fromTheme(QStringLiteral("star")) 323 setData(QIcon::fromTheme(QStringLiteral("star"))
321 .pixmap(icon_size) 324 .pixmap(icon_size)
322 .scaled(icon_size, icon_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation), 325 .scaled(icon_size, icon_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation),
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index d9375fc77..cb9d7a863 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -155,11 +155,13 @@ enum class CalloutFlag : uint32_t {
155}; 155};
156 156
157void GMainWindow::ShowTelemetryCallout() { 157void GMainWindow::ShowTelemetryCallout() {
158 if (UISettings::values.callout_flags & static_cast<uint32_t>(CalloutFlag::Telemetry)) { 158 if (UISettings::values.callout_flags.GetValue() &
159 static_cast<uint32_t>(CalloutFlag::Telemetry)) {
159 return; 160 return;
160 } 161 }
161 162
162 UISettings::values.callout_flags |= static_cast<uint32_t>(CalloutFlag::Telemetry); 163 UISettings::values.callout_flags =
164 UISettings::values.callout_flags.GetValue() | static_cast<uint32_t>(CalloutFlag::Telemetry);
163 const QString telemetry_message = 165 const QString telemetry_message =
164 tr("<a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous " 166 tr("<a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous "
165 "data is collected</a> to help improve yuzu. " 167 "data is collected</a> to help improve yuzu. "
@@ -215,7 +217,7 @@ GMainWindow::GMainWindow()
215 default_theme_paths = QIcon::themeSearchPaths(); 217 default_theme_paths = QIcon::themeSearchPaths();
216 UpdateUITheme(); 218 UpdateUITheme();
217 219
218 SetDiscordEnabled(UISettings::values.enable_discord_presence); 220 SetDiscordEnabled(UISettings::values.enable_discord_presence.GetValue());
219 discord_rpc->Update(); 221 discord_rpc->Update();
220 222
221 RegisterMetaTypes(); 223 RegisterMetaTypes();
@@ -1059,23 +1061,24 @@ void GMainWindow::RestoreUIState() {
1059 render_window->restoreGeometry(UISettings::values.renderwindow_geometry); 1061 render_window->restoreGeometry(UISettings::values.renderwindow_geometry);
1060#if MICROPROFILE_ENABLED 1062#if MICROPROFILE_ENABLED
1061 microProfileDialog->restoreGeometry(UISettings::values.microprofile_geometry); 1063 microProfileDialog->restoreGeometry(UISettings::values.microprofile_geometry);
1062 microProfileDialog->setVisible(UISettings::values.microprofile_visible); 1064 microProfileDialog->setVisible(UISettings::values.microprofile_visible.GetValue());
1063#endif 1065#endif
1064 1066
1065 game_list->LoadInterfaceLayout(); 1067 game_list->LoadInterfaceLayout();
1066 1068
1067 ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode); 1069 ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode.GetValue());
1068 ToggleWindowMode(); 1070 ToggleWindowMode();
1069 1071
1070 ui.action_Fullscreen->setChecked(UISettings::values.fullscreen); 1072 ui.action_Fullscreen->setChecked(UISettings::values.fullscreen.GetValue());
1071 1073
1072 ui.action_Display_Dock_Widget_Headers->setChecked(UISettings::values.display_titlebar); 1074 ui.action_Display_Dock_Widget_Headers->setChecked(
1075 UISettings::values.display_titlebar.GetValue());
1073 OnDisplayTitleBars(ui.action_Display_Dock_Widget_Headers->isChecked()); 1076 OnDisplayTitleBars(ui.action_Display_Dock_Widget_Headers->isChecked());
1074 1077
1075 ui.action_Show_Filter_Bar->setChecked(UISettings::values.show_filter_bar); 1078 ui.action_Show_Filter_Bar->setChecked(UISettings::values.show_filter_bar.GetValue());
1076 game_list->SetFilterVisible(ui.action_Show_Filter_Bar->isChecked()); 1079 game_list->SetFilterVisible(ui.action_Show_Filter_Bar->isChecked());
1077 1080
1078 ui.action_Show_Status_Bar->setChecked(UISettings::values.show_status_bar); 1081 ui.action_Show_Status_Bar->setChecked(UISettings::values.show_status_bar.GetValue());
1079 statusBar()->setVisible(ui.action_Show_Status_Bar->isChecked()); 1082 statusBar()->setVisible(ui.action_Show_Status_Bar->isChecked());
1080 Debugger::ToggleConsole(); 1083 Debugger::ToggleConsole();
1081} 1084}
@@ -1242,13 +1245,14 @@ bool GMainWindow::LoadROM(const QString& filename, std::size_t program_index) {
1242 const Core::System::ResultStatus result{ 1245 const Core::System::ResultStatus result{
1243 system.Load(*render_window, filename.toStdString(), program_index)}; 1246 system.Load(*render_window, filename.toStdString(), program_index)};
1244 1247
1245 const auto drd_callout = 1248 const auto drd_callout = (UISettings::values.callout_flags.GetValue() &
1246 (UISettings::values.callout_flags & static_cast<u32>(CalloutFlag::DRDDeprecation)) == 0; 1249 static_cast<u32>(CalloutFlag::DRDDeprecation)) == 0;
1247 1250
1248 if (result == Core::System::ResultStatus::Success && 1251 if (result == Core::System::ResultStatus::Success &&
1249 system.GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory && 1252 system.GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory &&
1250 drd_callout) { 1253 drd_callout) {
1251 UISettings::values.callout_flags |= static_cast<u32>(CalloutFlag::DRDDeprecation); 1254 UISettings::values.callout_flags = UISettings::values.callout_flags.GetValue() |
1255 static_cast<u32>(CalloutFlag::DRDDeprecation);
1252 QMessageBox::warning( 1256 QMessageBox::warning(
1253 this, tr("Warning Outdated Game Format"), 1257 this, tr("Warning Outdated Game Format"),
1254 tr("You are using the deconstructed ROM directory format for this game, which is an " 1258 tr("You are using the deconstructed ROM directory format for this game, which is an "
@@ -2609,7 +2613,7 @@ void GMainWindow::ResetWindowSize1080() {
2609 2613
2610void GMainWindow::OnConfigure() { 2614void GMainWindow::OnConfigure() {
2611 const auto old_theme = UISettings::values.theme; 2615 const auto old_theme = UISettings::values.theme;
2612 const bool old_discord_presence = UISettings::values.enable_discord_presence; 2616 const bool old_discord_presence = UISettings::values.enable_discord_presence.GetValue();
2613 2617
2614 ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get()); 2618 ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get());
2615 connect(&configure_dialog, &ConfigureDialog::LanguageChanged, this, 2619 connect(&configure_dialog, &ConfigureDialog::LanguageChanged, this,
@@ -2666,8 +2670,8 @@ void GMainWindow::OnConfigure() {
2666 if (UISettings::values.theme != old_theme) { 2670 if (UISettings::values.theme != old_theme) {
2667 UpdateUITheme(); 2671 UpdateUITheme();
2668 } 2672 }
2669 if (UISettings::values.enable_discord_presence != old_discord_presence) { 2673 if (UISettings::values.enable_discord_presence.GetValue() != old_discord_presence) {
2670 SetDiscordEnabled(UISettings::values.enable_discord_presence); 2674 SetDiscordEnabled(UISettings::values.enable_discord_presence.GetValue());
2671 } 2675 }
2672 emit UpdateThemedIcons(); 2676 emit UpdateThemedIcons();
2673 2677
@@ -2823,7 +2827,8 @@ void GMainWindow::OnCaptureScreenshot() {
2823 } 2827 }
2824 } 2828 }
2825#endif 2829#endif
2826 render_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor, filename); 2830 render_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor.GetValue(),
2831 filename);
2827 OnStartGame(); 2832 OnStartGame();
2828} 2833}
2829 2834
diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h
index cdcb83f9f..7b9d2dd53 100644
--- a/src/yuzu/uisettings.h
+++ b/src/yuzu/uisettings.h
@@ -13,6 +13,7 @@
13#include <QStringList> 13#include <QStringList>
14#include <QVector> 14#include <QVector>
15#include "common/common_types.h" 15#include "common/common_types.h"
16#include "common/settings.h"
16 17
17namespace UISettings { 18namespace UISettings {
18 19
@@ -48,26 +49,26 @@ struct Values {
48 QByteArray gamelist_header_state; 49 QByteArray gamelist_header_state;
49 50
50 QByteArray microprofile_geometry; 51 QByteArray microprofile_geometry;
51 bool microprofile_visible; 52 Settings::BasicSetting<bool> microprofile_visible{false, "microProfileDialogVisible"};
52 53
53 bool single_window_mode; 54 Settings::BasicSetting<bool> single_window_mode{true, "singleWindowMode"};
54 bool fullscreen; 55 Settings::BasicSetting<bool> fullscreen{false, "fullscreen"};
55 bool display_titlebar; 56 Settings::BasicSetting<bool> display_titlebar{true, "displayTitleBars"};
56 bool show_filter_bar; 57 Settings::BasicSetting<bool> show_filter_bar{true, "showFilterBar"};
57 bool show_status_bar; 58 Settings::BasicSetting<bool> show_status_bar{true, "showStatusBar"};
58 59
59 bool confirm_before_closing; 60 Settings::BasicSetting<bool> confirm_before_closing{true, "confirmClose"};
60 bool first_start; 61 Settings::BasicSetting<bool> first_start{true, "firstStart"};
61 bool pause_when_in_background; 62 Settings::BasicSetting<bool> pause_when_in_background{false, "pauseWhenInBackground"};
62 bool hide_mouse; 63 Settings::BasicSetting<bool> hide_mouse{false, "hideInactiveMouse"};
63 64
64 bool select_user_on_boot; 65 Settings::BasicSetting<bool> select_user_on_boot{false, "select_user_on_boot"};
65 66
66 // Discord RPC 67 // Discord RPC
67 bool enable_discord_presence; 68 Settings::BasicSetting<bool> enable_discord_presence{true, "enable_discord_presence"};
68 69
69 bool enable_screenshot_save_as; 70 Settings::BasicSetting<bool> enable_screenshot_save_as{true, "enable_screenshot_save_as"};
70 u16 screenshot_resolution_factor; 71 Settings::BasicSetting<u16> screenshot_resolution_factor{0, "screenshot_resolution_factor"};
71 72
72 QString roms_path; 73 QString roms_path;
73 QString symbols_path; 74 QString symbols_path;
@@ -83,18 +84,18 @@ struct Values {
83 // Shortcut name <Shortcut, context> 84 // Shortcut name <Shortcut, context>
84 std::vector<Shortcut> shortcuts; 85 std::vector<Shortcut> shortcuts;
85 86
86 uint32_t callout_flags; 87 Settings::BasicSetting<uint32_t> callout_flags{0, "calloutFlags"};
87 88
88 // logging 89 // logging
89 bool show_console; 90 Settings::BasicSetting<bool> show_console{false, "showConsole"};
90 91
91 // Game List 92 // Game List
92 bool show_add_ons; 93 Settings::BasicSetting<bool> show_add_ons{true, "show_add_ons"};
93 uint32_t icon_size; 94 Settings::BasicSetting<uint32_t> icon_size{64, "icon_size"};
94 uint8_t row_1_text_id; 95 Settings::BasicSetting<uint8_t> row_1_text_id{3, "row_1_text_id"};
95 uint8_t row_2_text_id; 96 Settings::BasicSetting<uint8_t> row_2_text_id{2, "row_2_text_id"};
96 std::atomic_bool is_game_list_reload_pending{false}; 97 std::atomic_bool is_game_list_reload_pending{false};
97 bool cache_game_list; 98 Settings::BasicSetting<bool> cache_game_list{true, "cache_game_list"};
98 99
99 bool configuration_applied; 100 bool configuration_applied;
100 bool reset_to_defaults; 101 bool reset_to_defaults;