From 35b17fa5e0a69c019852fed9ede9b64f08dd21a0 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Sat, 26 Jun 2021 02:45:14 -0400 Subject: configuration: Defer to common/settings for per-game settings defaults Avoids double-setting defaults, and avoids potential accidents when inconsistently setting the default on new settings. --- src/yuzu/configuration/config.cpp | 221 +++++++++++++++++--------------------- 1 file changed, 97 insertions(+), 124 deletions(-) (limited to 'src/yuzu/configuration/config.cpp') diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 62bafc453..2ad0ac32e 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -491,8 +491,8 @@ void Config::ReadAudioValues() { .toStdString(); } ReadSettingGlobal(Settings::values.enable_audio_stretching, - QStringLiteral("enable_audio_stretching"), true); - ReadSettingGlobal(Settings::values.volume, QStringLiteral("volume"), 1); + QStringLiteral("enable_audio_stretching")); + ReadSettingGlobal(Settings::values.volume, QStringLiteral("volume")); qt_config->endGroup(); } @@ -515,7 +515,7 @@ void Config::ReadControlValues() { Settings::values.mouse_panning_sensitivity = ReadSetting(QStringLiteral("mouse_panning_sensitivity"), 1).toFloat(); - ReadSettingGlobal(Settings::values.use_docked_mode, QStringLiteral("use_docked_mode"), true); + ReadSettingGlobal(Settings::values.use_docked_mode, QStringLiteral("use_docked_mode")); // Disable docked mode if handheld is selected const auto controller_type = Settings::values.players.GetValue()[0].controller_type; @@ -523,11 +523,10 @@ void Config::ReadControlValues() { Settings::values.use_docked_mode.SetValue(false); } - ReadSettingGlobal(Settings::values.vibration_enabled, QStringLiteral("vibration_enabled"), - true); + ReadSettingGlobal(Settings::values.vibration_enabled, QStringLiteral("vibration_enabled")); ReadSettingGlobal(Settings::values.enable_accurate_vibrations, - QStringLiteral("enable_accurate_vibrations"), false); - ReadSettingGlobal(Settings::values.motion_enabled, QStringLiteral("motion_enabled"), true); + QStringLiteral("enable_accurate_vibrations")); + ReadSettingGlobal(Settings::values.motion_enabled, QStringLiteral("motion_enabled")); qt_config->endGroup(); } @@ -591,7 +590,7 @@ void Config::ReadMotionTouchValues() { void Config::ReadCoreValues() { qt_config->beginGroup(QStringLiteral("Core")); - ReadSettingGlobal(Settings::values.use_multi_core, QStringLiteral("use_multi_core"), true); + ReadSettingGlobal(Settings::values.use_multi_core, QStringLiteral("use_multi_core")); qt_config->endGroup(); } @@ -751,18 +750,18 @@ void Config::ReadPathValues() { void Config::ReadCpuValues() { qt_config->beginGroup(QStringLiteral("Cpu")); - ReadSettingGlobal(Settings::values.cpu_accuracy, QStringLiteral("cpu_accuracy"), 0); + ReadSettingGlobal(Settings::values.cpu_accuracy, QStringLiteral("cpu_accuracy")); ReadSettingGlobal(Settings::values.cpuopt_unsafe_unfuse_fma, - QStringLiteral("cpuopt_unsafe_unfuse_fma"), true); + QStringLiteral("cpuopt_unsafe_unfuse_fma")); ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error, - QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true); + QStringLiteral("cpuopt_unsafe_reduce_fp_error")); ReadSettingGlobal(Settings::values.cpuopt_unsafe_ignore_standard_fpcr, - QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"), true); + QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr")); ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan, - QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true); + QStringLiteral("cpuopt_unsafe_inaccurate_nan")); ReadSettingGlobal(Settings::values.cpuopt_unsafe_fastmem_check, - QStringLiteral("cpuopt_unsafe_fastmem_check"), true); + QStringLiteral("cpuopt_unsafe_fastmem_check")); if (global) { Settings::values.cpuopt_page_tables = @@ -791,41 +790,32 @@ void Config::ReadCpuValues() { void Config::ReadRendererValues() { qt_config->beginGroup(QStringLiteral("Renderer")); - ReadSettingGlobal(Settings::values.renderer_backend, QStringLiteral("backend"), 0); + ReadSettingGlobal(Settings::values.renderer_backend, QStringLiteral("backend")); ReadSettingGlobal(Settings::values.renderer_debug, QStringLiteral("debug"), false); - ReadSettingGlobal(Settings::values.vulkan_device, QStringLiteral("vulkan_device"), 0); -#ifdef _WIN32 - ReadSettingGlobal(Settings::values.fullscreen_mode, QStringLiteral("fullscreen_mode"), 0); -#else - // *nix platforms may have issues with the borderless windowed fullscreen mode. - // Default to exclusive fullscreen on these platforms for now. - ReadSettingGlobal(Settings::values.fullscreen_mode, QStringLiteral("fullscreen_mode"), 1); -#endif - ReadSettingGlobal(Settings::values.aspect_ratio, QStringLiteral("aspect_ratio"), 0); - ReadSettingGlobal(Settings::values.max_anisotropy, QStringLiteral("max_anisotropy"), 0); - ReadSettingGlobal(Settings::values.use_frame_limit, QStringLiteral("use_frame_limit"), true); - ReadSettingGlobal(Settings::values.frame_limit, QStringLiteral("frame_limit"), 100); + ReadSettingGlobal(Settings::values.vulkan_device, QStringLiteral("vulkan_device")); + ReadSettingGlobal(Settings::values.fullscreen_mode, QStringLiteral("fullscreen_mode")); + ReadSettingGlobal(Settings::values.aspect_ratio, QStringLiteral("aspect_ratio")); + ReadSettingGlobal(Settings::values.max_anisotropy, QStringLiteral("max_anisotropy")); + ReadSettingGlobal(Settings::values.use_frame_limit, QStringLiteral("use_frame_limit")); + ReadSettingGlobal(Settings::values.frame_limit, QStringLiteral("frame_limit")); ReadSettingGlobal(Settings::values.use_disk_shader_cache, - QStringLiteral("use_disk_shader_cache"), true); - ReadSettingGlobal(Settings::values.gpu_accuracy, QStringLiteral("gpu_accuracy"), 1); + QStringLiteral("use_disk_shader_cache")); + ReadSettingGlobal(Settings::values.gpu_accuracy, QStringLiteral("gpu_accuracy")); ReadSettingGlobal(Settings::values.use_asynchronous_gpu_emulation, - QStringLiteral("use_asynchronous_gpu_emulation"), true); - ReadSettingGlobal(Settings::values.use_nvdec_emulation, QStringLiteral("use_nvdec_emulation"), - true); - ReadSettingGlobal(Settings::values.accelerate_astc, QStringLiteral("accelerate_astc"), true); - ReadSettingGlobal(Settings::values.use_vsync, QStringLiteral("use_vsync"), true); - ReadSettingGlobal(Settings::values.disable_fps_limit, QStringLiteral("disable_fps_limit"), - false); - ReadSettingGlobal(Settings::values.use_assembly_shaders, QStringLiteral("use_assembly_shaders"), - false); + QStringLiteral("use_asynchronous_gpu_emulation")); + ReadSettingGlobal(Settings::values.use_nvdec_emulation, QStringLiteral("use_nvdec_emulation")); + ReadSettingGlobal(Settings::values.accelerate_astc, QStringLiteral("accelerate_astc")); + ReadSettingGlobal(Settings::values.use_vsync, QStringLiteral("use_vsync")); + ReadSettingGlobal(Settings::values.disable_fps_limit, QStringLiteral("disable_fps_limit")); + ReadSettingGlobal(Settings::values.use_assembly_shaders, + QStringLiteral("use_assembly_shaders")); ReadSettingGlobal(Settings::values.use_asynchronous_shaders, - QStringLiteral("use_asynchronous_shaders"), false); - ReadSettingGlobal(Settings::values.use_fast_gpu_time, QStringLiteral("use_fast_gpu_time"), - true); - ReadSettingGlobal(Settings::values.use_caches_gc, QStringLiteral("use_caches_gc"), false); - ReadSettingGlobal(Settings::values.bg_red, QStringLiteral("bg_red"), 0.0); - ReadSettingGlobal(Settings::values.bg_green, QStringLiteral("bg_green"), 0.0); - ReadSettingGlobal(Settings::values.bg_blue, QStringLiteral("bg_blue"), 0.0); + QStringLiteral("use_asynchronous_shaders")); + ReadSettingGlobal(Settings::values.use_fast_gpu_time, QStringLiteral("use_fast_gpu_time")); + ReadSettingGlobal(Settings::values.use_caches_gc, QStringLiteral("use_caches_gc")); + ReadSettingGlobal(Settings::values.bg_red, QStringLiteral("bg_red")); + ReadSettingGlobal(Settings::values.bg_green, QStringLiteral("bg_green")); + ReadSettingGlobal(Settings::values.bg_blue, QStringLiteral("bg_blue")); qt_config->endGroup(); } @@ -874,11 +864,11 @@ void Config::ReadSystemValues() { Settings::values.current_user = std::clamp(Settings::values.current_user, 0, Service::Account::MAX_USERS - 1); - ReadSettingGlobal(Settings::values.language_index, QStringLiteral("language_index"), 1); + ReadSettingGlobal(Settings::values.language_index, QStringLiteral("language_index")); - ReadSettingGlobal(Settings::values.region_index, QStringLiteral("region_index"), 1); + ReadSettingGlobal(Settings::values.region_index, QStringLiteral("region_index")); - ReadSettingGlobal(Settings::values.time_zone_index, QStringLiteral("time_zone_index"), 0); + ReadSettingGlobal(Settings::values.time_zone_index, QStringLiteral("time_zone_index")); bool rng_seed_enabled; ReadSettingGlobal(rng_seed_enabled, QStringLiteral("rng_seed_enabled"), false); @@ -904,7 +894,7 @@ void Config::ReadSystemValues() { } } - ReadSettingGlobal(Settings::values.sound_index, QStringLiteral("sound_index"), 1); + ReadSettingGlobal(Settings::values.sound_index, QStringLiteral("sound_index")); qt_config->endGroup(); } @@ -1188,8 +1178,8 @@ void Config::SaveAudioValues() { QStringLiteral("auto")); } WriteSettingGlobal(QStringLiteral("enable_audio_stretching"), - Settings::values.enable_audio_stretching, true); - WriteSettingGlobal(QStringLiteral("volume"), Settings::values.volume, 1.0f); + Settings::values.enable_audio_stretching); + WriteSettingGlobal(QStringLiteral("volume"), Settings::values.volume); qt_config->endGroup(); } @@ -1205,12 +1195,11 @@ void Config::SaveControlValues() { SaveTouchscreenValues(); SaveMotionTouchValues(); - WriteSettingGlobal(QStringLiteral("use_docked_mode"), Settings::values.use_docked_mode, true); - WriteSettingGlobal(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled, - true); + WriteSettingGlobal(QStringLiteral("use_docked_mode"), Settings::values.use_docked_mode); + WriteSettingGlobal(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled); WriteSettingGlobal(QStringLiteral("enable_accurate_vibrations"), - Settings::values.enable_accurate_vibrations, false); - WriteSettingGlobal(QStringLiteral("motion_enabled"), Settings::values.motion_enabled, true); + Settings::values.enable_accurate_vibrations); + WriteSettingGlobal(QStringLiteral("motion_enabled"), Settings::values.motion_enabled); WriteSetting(QStringLiteral("motion_device"), QString::fromStdString(Settings::values.motion_device), QStringLiteral("engine:motion_emu,update_period:100,sensitivity:0.01")); @@ -1228,7 +1217,7 @@ void Config::SaveControlValues() { void Config::SaveCoreValues() { qt_config->beginGroup(QStringLiteral("Core")); - WriteSettingGlobal(QStringLiteral("use_multi_core"), Settings::values.use_multi_core, true); + WriteSettingGlobal(QStringLiteral("use_multi_core"), Settings::values.use_multi_core); qt_config->endGroup(); } @@ -1339,18 +1328,18 @@ void Config::SaveCpuValues() { WriteSettingGlobal(QStringLiteral("cpu_accuracy"), static_cast(Settings::values.cpu_accuracy.GetValue(global)), Settings::values.cpu_accuracy.UsingGlobal(), - static_cast(Settings::CPUAccuracy::Accurate)); + static_cast(Settings::values.cpu_accuracy.GetDefault())); WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_unfuse_fma"), - Settings::values.cpuopt_unsafe_unfuse_fma, true); + Settings::values.cpuopt_unsafe_unfuse_fma); WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), - Settings::values.cpuopt_unsafe_reduce_fp_error, true); + Settings::values.cpuopt_unsafe_reduce_fp_error); WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"), - Settings::values.cpuopt_unsafe_ignore_standard_fpcr, true); + Settings::values.cpuopt_unsafe_ignore_standard_fpcr); WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), - Settings::values.cpuopt_unsafe_inaccurate_nan, true); + Settings::values.cpuopt_unsafe_inaccurate_nan); WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_fastmem_check"), - Settings::values.cpuopt_unsafe_fastmem_check, true); + Settings::values.cpuopt_unsafe_fastmem_check); if (global) { WriteSetting(QStringLiteral("cpuopt_page_tables"), Settings::values.cpuopt_page_tables, @@ -1377,45 +1366,37 @@ void Config::SaveRendererValues() { qt_config->beginGroup(QStringLiteral("Renderer")); WriteSettingGlobal(QStringLiteral("backend"), - static_cast(Settings::values.renderer_backend.GetValue(global)), - Settings::values.renderer_backend.UsingGlobal(), 0); - WriteSetting(QStringLiteral("debug"), Settings::values.renderer_debug, false); - WriteSettingGlobal(QStringLiteral("vulkan_device"), Settings::values.vulkan_device, 0); -#ifdef _WIN32 - WriteSettingGlobal(QStringLiteral("fullscreen_mode"), Settings::values.fullscreen_mode, 0); -#else - // *nix platforms may have issues with the borderless windowed fullscreen mode. - // Default to exclusive fullscreen on these platforms for now. - WriteSettingGlobal(QStringLiteral("fullscreen_mode"), Settings::values.fullscreen_mode, 1); -#endif - WriteSettingGlobal(QStringLiteral("aspect_ratio"), Settings::values.aspect_ratio, 0); - WriteSettingGlobal(QStringLiteral("max_anisotropy"), Settings::values.max_anisotropy, 0); - WriteSettingGlobal(QStringLiteral("use_frame_limit"), Settings::values.use_frame_limit, true); - WriteSettingGlobal(QStringLiteral("frame_limit"), Settings::values.frame_limit, 100); + static_cast(Settings::values.renderer_backend.GetValue(global)), + Settings::values.renderer_backend.UsingGlobal(), + static_cast(Settings::values.renderer_backend.GetDefault())); + WriteSetting(QStringLiteral("debug"), Settings::values.renderer_debug); + WriteSettingGlobal(QStringLiteral("vulkan_device"), Settings::values.vulkan_device); + WriteSettingGlobal(QStringLiteral("fullscreen_mode"), Settings::values.fullscreen_mode); + WriteSettingGlobal(QStringLiteral("aspect_ratio"), Settings::values.aspect_ratio); + WriteSettingGlobal(QStringLiteral("max_anisotropy"), Settings::values.max_anisotropy); + WriteSettingGlobal(QStringLiteral("use_frame_limit"), Settings::values.use_frame_limit); + WriteSettingGlobal(QStringLiteral("frame_limit"), Settings::values.frame_limit); WriteSettingGlobal(QStringLiteral("use_disk_shader_cache"), - Settings::values.use_disk_shader_cache, true); + Settings::values.use_disk_shader_cache); WriteSettingGlobal(QStringLiteral("gpu_accuracy"), - static_cast(Settings::values.gpu_accuracy.GetValue(global)), - Settings::values.gpu_accuracy.UsingGlobal(), 1); + static_cast(Settings::values.gpu_accuracy.GetValue(global)), + Settings::values.gpu_accuracy.UsingGlobal(), + static_cast(Settings::values.gpu_accuracy.GetDefault())); WriteSettingGlobal(QStringLiteral("use_asynchronous_gpu_emulation"), - Settings::values.use_asynchronous_gpu_emulation, true); - WriteSettingGlobal(QStringLiteral("use_nvdec_emulation"), Settings::values.use_nvdec_emulation, - true); - WriteSettingGlobal(QStringLiteral("accelerate_astc"), Settings::values.accelerate_astc, true); - WriteSettingGlobal(QStringLiteral("use_vsync"), Settings::values.use_vsync, true); - WriteSettingGlobal(QStringLiteral("disable_fps_limit"), Settings::values.disable_fps_limit, - false); + Settings::values.use_asynchronous_gpu_emulation); + WriteSettingGlobal(QStringLiteral("use_nvdec_emulation"), Settings::values.use_nvdec_emulation); + WriteSettingGlobal(QStringLiteral("accelerate_astc"), Settings::values.accelerate_astc); + WriteSettingGlobal(QStringLiteral("use_vsync"), Settings::values.use_vsync); + WriteSettingGlobal(QStringLiteral("disable_fps_limit"), Settings::values.disable_fps_limit); WriteSettingGlobal(QStringLiteral("use_assembly_shaders"), - Settings::values.use_assembly_shaders, false); + Settings::values.use_assembly_shaders); WriteSettingGlobal(QStringLiteral("use_asynchronous_shaders"), - Settings::values.use_asynchronous_shaders, false); - WriteSettingGlobal(QStringLiteral("use_fast_gpu_time"), Settings::values.use_fast_gpu_time, - true); - WriteSettingGlobal(QStringLiteral("use_caches_gc"), Settings::values.use_caches_gc, false); - // Cast to double because Qt's written float values are not human-readable - WriteSettingGlobal(QStringLiteral("bg_red"), Settings::values.bg_red, 0.0); - WriteSettingGlobal(QStringLiteral("bg_green"), Settings::values.bg_green, 0.0); - WriteSettingGlobal(QStringLiteral("bg_blue"), Settings::values.bg_blue, 0.0); + Settings::values.use_asynchronous_shaders); + WriteSettingGlobal(QStringLiteral("use_fast_gpu_time"), Settings::values.use_fast_gpu_time); + WriteSettingGlobal(QStringLiteral("use_caches_gc"), Settings::values.use_caches_gc); + WriteSettingGlobal(QStringLiteral("bg_red"), Settings::values.bg_red); + WriteSettingGlobal(QStringLiteral("bg_green"), Settings::values.bg_green); + WriteSettingGlobal(QStringLiteral("bg_blue"), Settings::values.bg_blue); qt_config->endGroup(); } @@ -1454,10 +1435,10 @@ void Config::SaveShortcutValues() { void Config::SaveSystemValues() { qt_config->beginGroup(QStringLiteral("System")); - WriteSetting(QStringLiteral("current_user"), Settings::values.current_user, 0); - WriteSettingGlobal(QStringLiteral("language_index"), Settings::values.language_index, 1); - WriteSettingGlobal(QStringLiteral("region_index"), Settings::values.region_index, 1); - WriteSettingGlobal(QStringLiteral("time_zone_index"), Settings::values.time_zone_index, 0); + WriteSetting(QStringLiteral("current_user"), Settings::values.current_user); + WriteSettingGlobal(QStringLiteral("language_index"), Settings::values.language_index); + WriteSettingGlobal(QStringLiteral("region_index"), Settings::values.region_index); + WriteSettingGlobal(QStringLiteral("time_zone_index"), Settings::values.time_zone_index); WriteSettingGlobal(QStringLiteral("rng_seed_enabled"), Settings::values.rng_seed.GetValue(global).has_value(), @@ -1475,7 +1456,7 @@ void Config::SaveSystemValues() { 0); } - WriteSettingGlobal(QStringLiteral("sound_index"), Settings::values.sound_index, 1); + WriteSettingGlobal(QStringLiteral("sound_index"), Settings::values.sound_index); qt_config->endGroup(); } @@ -1574,22 +1555,25 @@ QVariant Config::ReadSetting(const QString& name, const QVariant& default_value) return result; } -template -void Config::ReadSettingGlobal(Settings::Setting& setting, const QString& name) { - const bool use_global = qt_config->value(name + QStringLiteral("/use_global"), true).toBool(); - setting.SetGlobal(use_global); - if (global || !use_global) { - setting.SetValue(ReadSetting(name).value()); - } +QVariant Config::ReadSetting(const QString& name, Settings::CPUAccuracy default_value) const { + return ReadSetting(name, static_cast(default_value)); +} + +QVariant Config::ReadSetting(const QString& name, Settings::GPUAccuracy default_value) const { + return ReadSetting(name, static_cast(default_value)); +} + +QVariant Config::ReadSetting(const QString& name, Settings::RendererBackend default_value) const { + return ReadSetting(name, static_cast(default_value)); } template -void Config::ReadSettingGlobal(Settings::Setting& setting, const QString& name, - const QVariant& default_value) { +void Config::ReadSettingGlobal(Settings::Setting& setting, const QString& name) { const bool use_global = qt_config->value(name + QStringLiteral("/use_global"), true).toBool(); setting.SetGlobal(use_global); + const Type& default_value = setting.GetDefault(); if (global || !use_global) { - setting.SetValue(ReadSetting(name, default_value).value()); + setting.SetValue(static_cast(ReadSetting(name, default_value)).value()); } } @@ -1617,20 +1601,9 @@ void Config::WriteSettingGlobal(const QString& name, const Settings::SettingsetValue(name + QStringLiteral("/use_global"), setting.UsingGlobal()); } - if (global || !setting.UsingGlobal()) { - qt_config->setValue(name, setting.GetValue(global)); - } -} - -template -void Config::WriteSettingGlobal(const QString& name, const Settings::Setting& setting, - const QVariant& default_value) { - if (!global) { - qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal()); - } if (global || !setting.UsingGlobal()) { qt_config->setValue(name + QStringLiteral("/default"), - setting.GetValue(global) == default_value.value()); + setting.GetValue(global) == setting.GetDefault()); qt_config->setValue(name, setting.GetValue(global)); } } -- cgit v1.2.3 From b91b76df4fe27d781bd95ddb89b78ff54df57029 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Mon, 28 Jun 2021 15:58:16 -0400 Subject: general: Make most settings a BasicSetting Creates a new BasicSettings class in common/settings, and forces setting a default and label for each setting that uses it in common/settings. Moves defaults and labels from both frontends into common settings. Creates a helper function in each frontend to facillitate reading the settings now with the new default and label properties. Settings::Setting is also now a subclass of Settings::BasicSetting. Also adds documentation for both Setting and BasicSetting. --- src/yuzu/configuration/config.cpp | 591 +++++++++++++++++--------------------- 1 file changed, 268 insertions(+), 323 deletions(-) (limited to 'src/yuzu/configuration/config.cpp') diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 2ad0ac32e..d36aaade2 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -272,6 +272,82 @@ void Config::Initialize(const std::string& config_name) { } } +// Explicity 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 +template <> +void Config::ReadBasicSetting(Settings::BasicSetting& setting) { + const QString name = QString::fromStdString(setting.GetLabel()); + if (qt_config->value(name + QStringLiteral("/default"), false).toBool()) { + setting.SetValue(setting.GetDefault()); + } else { + setting.SetValue(qt_config->value(name, QString::fromStdString(setting.GetDefault())) + .toString() + .toStdString()); + } +} +template +void Config::ReadBasicSetting(Settings::BasicSetting& setting) { + const QString name = QString::fromStdString(setting.GetLabel()); + if (qt_config->value(name + QStringLiteral("/default"), false).toBool()) { + setting.SetValue(setting.GetDefault()); + } else { + setting.SetValue( + static_cast(qt_config->value(name, setting.GetDefault())).value()); + } +} + +// Explicit std::string definition: Qt can't implicitly convert a std::string to a QVariant +template <> +void Config::WriteBasicSetting(const Settings::BasicSetting& setting) { + const QString name = QString::fromStdString(setting.GetLabel()); + qt_config->setValue(name + QStringLiteral("/default"), + setting.GetValue() == setting.GetDefault()); + qt_config->setValue(name, QString::fromStdString(setting.GetValue())); +} +// Explicit float definition: use a double as Qt doesn't write legible floats to config files +template <> +void Config::WriteBasicSetting(const Settings::BasicSetting& setting) { + const QString name = QString::fromStdString(setting.GetLabel()); + const double value = setting.GetValue(); + qt_config->setValue(name + QStringLiteral("/default"), + setting.GetValue() == setting.GetDefault()); + qt_config->setValue(name, value); +} +template +void Config::WriteBasicSetting(const Settings::BasicSetting& setting) { + const QString name = QString::fromStdString(setting.GetLabel()); + qt_config->setValue(name + QStringLiteral("/default"), + setting.GetValue() == setting.GetDefault()); + qt_config->setValue(name, setting.GetValue()); +} + +// Explicit float definition: use a double as Qt doesn't write legible floats to config files +template <> +void Config::WriteGlobalSetting(const Settings::Setting& setting) { + const QString name = QString::fromStdString(setting.GetLabel()); + const double value = setting.GetValue(global); + if (!global) { + qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal()); + } + if (global || !setting.UsingGlobal()) { + qt_config->setValue(name + QStringLiteral("/default"), + setting.GetValue(global) == setting.GetDefault()); + qt_config->setValue(name, value); + } +} +template +void Config::WriteGlobalSetting(const Settings::Setting& setting) { + QString name = QString::fromStdString(setting.GetLabel()); + if (!global) { + qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal()); + } + if (global || !setting.UsingGlobal()) { + qt_config->setValue(name + QStringLiteral("/default"), + setting.GetValue(global) == setting.GetDefault()); + qt_config->setValue(name, setting.GetValue(global)); + } +} + void Config::ReadPlayerValue(std::size_t player_index) { const QString player_prefix = [this, player_index] { if (type == ConfigType::InputProfile) { @@ -395,8 +471,7 @@ void Config::ReadPlayerValue(std::size_t player_index) { } void Config::ReadDebugValues() { - Settings::values.debug_pad_enabled = - ReadSetting(QStringLiteral("debug_pad_enabled"), false).toBool(); + ReadBasicSetting(Settings::values.debug_pad_enabled); for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { const std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); @@ -432,8 +507,7 @@ void Config::ReadDebugValues() { } void Config::ReadKeyboardValues() { - Settings::values.keyboard_enabled = - ReadSetting(QStringLiteral("keyboard_enabled"), false).toBool(); + ReadBasicSetting(Settings::values.keyboard_enabled); std::transform(default_keyboard_keys.begin(), default_keyboard_keys.end(), Settings::values.keyboard_keys.begin(), InputCommon::GenerateKeyboardParam); @@ -446,7 +520,7 @@ void Config::ReadKeyboardValues() { } void Config::ReadMouseValues() { - Settings::values.mouse_enabled = ReadSetting(QStringLiteral("mouse_enabled"), false).toBool(); + ReadBasicSetting(Settings::values.mouse_enabled); for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) { const std::string default_param = @@ -481,18 +555,11 @@ void Config::ReadAudioValues() { qt_config->beginGroup(QStringLiteral("Audio")); if (global) { - Settings::values.sink_id = - ReadSetting(QStringLiteral("output_engine"), QStringLiteral("auto")) - .toString() - .toStdString(); - Settings::values.audio_device_id = - ReadSetting(QStringLiteral("output_device"), QStringLiteral("auto")) - .toString() - .toStdString(); + ReadBasicSetting(Settings::values.audio_device_id); + ReadBasicSetting(Settings::values.sink_id); } - ReadSettingGlobal(Settings::values.enable_audio_stretching, - QStringLiteral("enable_audio_stretching")); - ReadSettingGlobal(Settings::values.volume, QStringLiteral("volume")); + ReadGlobalSetting(Settings::values.enable_audio_stretching); + ReadGlobalSetting(Settings::values.volume); qt_config->endGroup(); } @@ -509,13 +576,11 @@ void Config::ReadControlValues() { ReadTouchscreenValues(); ReadMotionTouchValues(); - Settings::values.emulate_analog_keyboard = - ReadSetting(QStringLiteral("emulate_analog_keyboard"), false).toBool(); + ReadBasicSetting(Settings::values.emulate_analog_keyboard); Settings::values.mouse_panning = false; - Settings::values.mouse_panning_sensitivity = - ReadSetting(QStringLiteral("mouse_panning_sensitivity"), 1).toFloat(); + ReadBasicSetting(Settings::values.mouse_panning_sensitivity); - ReadSettingGlobal(Settings::values.use_docked_mode, QStringLiteral("use_docked_mode")); + ReadGlobalSetting(Settings::values.use_docked_mode); // Disable docked mode if handheld is selected const auto controller_type = Settings::values.players.GetValue()[0].controller_type; @@ -523,10 +588,9 @@ void Config::ReadControlValues() { Settings::values.use_docked_mode.SetValue(false); } - ReadSettingGlobal(Settings::values.vibration_enabled, QStringLiteral("vibration_enabled")); - ReadSettingGlobal(Settings::values.enable_accurate_vibrations, - QStringLiteral("enable_accurate_vibrations")); - ReadSettingGlobal(Settings::values.motion_enabled, QStringLiteral("motion_enabled")); + ReadGlobalSetting(Settings::values.vibration_enabled); + ReadGlobalSetting(Settings::values.enable_accurate_vibrations); + ReadGlobalSetting(Settings::values.motion_enabled); qt_config->endGroup(); } @@ -564,33 +628,19 @@ void Config::ReadMotionTouchValues() { } qt_config->endArray(); - Settings::values.motion_device = - ReadSetting(QStringLiteral("motion_device"), - QStringLiteral("engine:motion_emu,update_period:100,sensitivity:0.01")) - .toString() - .toStdString(); - Settings::values.touch_device = - ReadSetting(QStringLiteral("touch_device"), - QStringLiteral("min_x:100,min_y:50,max_x:1800,max_y:850")) - .toString() - .toStdString(); - Settings::values.use_touch_from_button = - ReadSetting(QStringLiteral("use_touch_from_button"), false).toBool(); - Settings::values.touch_from_button_map_index = - ReadSetting(QStringLiteral("touch_from_button_map"), 0).toInt(); - Settings::values.touch_from_button_map_index = - std::clamp(Settings::values.touch_from_button_map_index, 0, num_touch_from_button_maps - 1); - Settings::values.udp_input_servers = - ReadSetting(QStringLiteral("udp_input_servers"), - QString::fromUtf8(InputCommon::CemuhookUDP::DEFAULT_SRV)) - .toString() - .toStdString(); + ReadBasicSetting(Settings::values.motion_device); + ReadBasicSetting(Settings::values.touch_device); + ReadBasicSetting(Settings::values.use_touch_from_button); + ReadBasicSetting(Settings::values.touch_from_button_map_index); + Settings::values.touch_from_button_map_index = std::clamp( + Settings::values.touch_from_button_map_index.GetValue(), 0, num_touch_from_button_maps - 1); + ReadBasicSetting(Settings::values.udp_input_servers); } void Config::ReadCoreValues() { qt_config->beginGroup(QStringLiteral("Core")); - ReadSettingGlobal(Settings::values.use_multi_core, QStringLiteral("use_multi_core")); + ReadGlobalSetting(Settings::values.use_multi_core); qt_config->endGroup(); } @@ -598,7 +648,7 @@ void Config::ReadCoreValues() { void Config::ReadDataStorageValues() { qt_config->beginGroup(QStringLiteral("Data Storage")); - Settings::values.use_virtual_sd = ReadSetting(QStringLiteral("use_virtual_sd"), true).toBool(); + ReadBasicSetting(Settings::values.use_virtual_sd); FS::SetYuzuPath( FS::YuzuPath::NANDDir, qt_config @@ -627,12 +677,9 @@ void Config::ReadDataStorageValues() { QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::DumpDir))) .toString() .toStdString()); - Settings::values.gamecard_inserted = - ReadSetting(QStringLiteral("gamecard_inserted"), false).toBool(); - Settings::values.gamecard_current_game = - ReadSetting(QStringLiteral("gamecard_current_game"), false).toBool(); - Settings::values.gamecard_path = - ReadSetting(QStringLiteral("gamecard_path"), QString{}).toString().toStdString(); + ReadBasicSetting(Settings::values.gamecard_inserted); + ReadBasicSetting(Settings::values.gamecard_current_game); + ReadBasicSetting(Settings::values.gamecard_path); qt_config->endGroup(); } @@ -643,34 +690,24 @@ void Config::ReadDebuggingValues() { // Intentionally not using the QT default setting as this is intended to be changed in the ini Settings::values.record_frame_times = qt_config->value(QStringLiteral("record_frame_times"), false).toBool(); - Settings::values.program_args = - ReadSetting(QStringLiteral("program_args"), QString{}).toString().toStdString(); - Settings::values.dump_exefs = ReadSetting(QStringLiteral("dump_exefs"), false).toBool(); - Settings::values.dump_nso = ReadSetting(QStringLiteral("dump_nso"), false).toBool(); - Settings::values.enable_fs_access_log = - ReadSetting(QStringLiteral("enable_fs_access_log"), false).toBool(); - Settings::values.reporting_services = - ReadSetting(QStringLiteral("reporting_services"), false).toBool(); - Settings::values.quest_flag = ReadSetting(QStringLiteral("quest_flag"), false).toBool(); - Settings::values.disable_macro_jit = - ReadSetting(QStringLiteral("disable_macro_jit"), false).toBool(); - Settings::values.extended_logging = - ReadSetting(QStringLiteral("extended_logging"), false).toBool(); - Settings::values.use_debug_asserts = - ReadSetting(QStringLiteral("use_debug_asserts"), false).toBool(); - Settings::values.use_auto_stub = ReadSetting(QStringLiteral("use_auto_stub"), false).toBool(); + ReadBasicSetting(Settings::values.program_args); + ReadBasicSetting(Settings::values.dump_exefs); + ReadBasicSetting(Settings::values.dump_nso); + ReadBasicSetting(Settings::values.enable_fs_access_log); + ReadBasicSetting(Settings::values.reporting_services); + ReadBasicSetting(Settings::values.quest_flag); + ReadBasicSetting(Settings::values.disable_macro_jit); + ReadBasicSetting(Settings::values.extended_logging); + ReadBasicSetting(Settings::values.use_debug_asserts); + ReadBasicSetting(Settings::values.use_auto_stub); qt_config->endGroup(); } void Config::ReadServiceValues() { qt_config->beginGroup(QStringLiteral("Services")); - Settings::values.bcat_backend = - ReadSetting(QStringLiteral("bcat_backend"), QStringLiteral("none")) - .toString() - .toStdString(); - Settings::values.bcat_boxcat_local = - ReadSetting(QStringLiteral("bcat_boxcat_local"), false).toBool(); + ReadBasicSetting(Settings::values.bcat_backend); + ReadBasicSetting(Settings::values.bcat_boxcat_local); qt_config->endGroup(); } @@ -696,11 +733,8 @@ void Config::ReadDisabledAddOnValues() { void Config::ReadMiscellaneousValues() { qt_config->beginGroup(QStringLiteral("Miscellaneous")); - Settings::values.log_filter = - ReadSetting(QStringLiteral("log_filter"), QStringLiteral("*:Info")) - .toString() - .toStdString(); - Settings::values.use_dev_keys = ReadSetting(QStringLiteral("use_dev_keys"), false).toBool(); + ReadBasicSetting(Settings::values.log_filter); + ReadBasicSetting(Settings::values.use_dev_keys); qt_config->endGroup(); } @@ -750,38 +784,24 @@ void Config::ReadPathValues() { void Config::ReadCpuValues() { qt_config->beginGroup(QStringLiteral("Cpu")); - ReadSettingGlobal(Settings::values.cpu_accuracy, QStringLiteral("cpu_accuracy")); + ReadGlobalSetting(Settings::values.cpu_accuracy); - ReadSettingGlobal(Settings::values.cpuopt_unsafe_unfuse_fma, - QStringLiteral("cpuopt_unsafe_unfuse_fma")); - ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error, - QStringLiteral("cpuopt_unsafe_reduce_fp_error")); - ReadSettingGlobal(Settings::values.cpuopt_unsafe_ignore_standard_fpcr, - QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr")); - ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan, - QStringLiteral("cpuopt_unsafe_inaccurate_nan")); - ReadSettingGlobal(Settings::values.cpuopt_unsafe_fastmem_check, - QStringLiteral("cpuopt_unsafe_fastmem_check")); + ReadGlobalSetting(Settings::values.cpuopt_unsafe_unfuse_fma); + ReadGlobalSetting(Settings::values.cpuopt_unsafe_reduce_fp_error); + ReadGlobalSetting(Settings::values.cpuopt_unsafe_ignore_standard_fpcr); + ReadGlobalSetting(Settings::values.cpuopt_unsafe_inaccurate_nan); + ReadGlobalSetting(Settings::values.cpuopt_unsafe_fastmem_check); if (global) { - Settings::values.cpuopt_page_tables = - ReadSetting(QStringLiteral("cpuopt_page_tables"), true).toBool(); - Settings::values.cpuopt_block_linking = - ReadSetting(QStringLiteral("cpuopt_block_linking"), true).toBool(); - Settings::values.cpuopt_return_stack_buffer = - ReadSetting(QStringLiteral("cpuopt_return_stack_buffer"), true).toBool(); - Settings::values.cpuopt_fast_dispatcher = - ReadSetting(QStringLiteral("cpuopt_fast_dispatcher"), true).toBool(); - Settings::values.cpuopt_context_elimination = - ReadSetting(QStringLiteral("cpuopt_context_elimination"), true).toBool(); - Settings::values.cpuopt_const_prop = - ReadSetting(QStringLiteral("cpuopt_const_prop"), true).toBool(); - Settings::values.cpuopt_misc_ir = - ReadSetting(QStringLiteral("cpuopt_misc_ir"), true).toBool(); - Settings::values.cpuopt_reduce_misalign_checks = - ReadSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), true).toBool(); - Settings::values.cpuopt_fastmem = - ReadSetting(QStringLiteral("cpuopt_fastmem"), true).toBool(); + ReadBasicSetting(Settings::values.cpuopt_page_tables); + ReadBasicSetting(Settings::values.cpuopt_block_linking); + ReadBasicSetting(Settings::values.cpuopt_return_stack_buffer); + ReadBasicSetting(Settings::values.cpuopt_fast_dispatcher); + ReadBasicSetting(Settings::values.cpuopt_context_elimination); + ReadBasicSetting(Settings::values.cpuopt_const_prop); + ReadBasicSetting(Settings::values.cpuopt_misc_ir); + ReadBasicSetting(Settings::values.cpuopt_reduce_misalign_checks); + ReadBasicSetting(Settings::values.cpuopt_fastmem); } qt_config->endGroup(); @@ -790,32 +810,28 @@ void Config::ReadCpuValues() { void Config::ReadRendererValues() { qt_config->beginGroup(QStringLiteral("Renderer")); - ReadSettingGlobal(Settings::values.renderer_backend, QStringLiteral("backend")); - ReadSettingGlobal(Settings::values.renderer_debug, QStringLiteral("debug"), false); - ReadSettingGlobal(Settings::values.vulkan_device, QStringLiteral("vulkan_device")); - ReadSettingGlobal(Settings::values.fullscreen_mode, QStringLiteral("fullscreen_mode")); - ReadSettingGlobal(Settings::values.aspect_ratio, QStringLiteral("aspect_ratio")); - ReadSettingGlobal(Settings::values.max_anisotropy, QStringLiteral("max_anisotropy")); - ReadSettingGlobal(Settings::values.use_frame_limit, QStringLiteral("use_frame_limit")); - ReadSettingGlobal(Settings::values.frame_limit, QStringLiteral("frame_limit")); - ReadSettingGlobal(Settings::values.use_disk_shader_cache, - QStringLiteral("use_disk_shader_cache")); - ReadSettingGlobal(Settings::values.gpu_accuracy, QStringLiteral("gpu_accuracy")); - ReadSettingGlobal(Settings::values.use_asynchronous_gpu_emulation, - QStringLiteral("use_asynchronous_gpu_emulation")); - ReadSettingGlobal(Settings::values.use_nvdec_emulation, QStringLiteral("use_nvdec_emulation")); - ReadSettingGlobal(Settings::values.accelerate_astc, QStringLiteral("accelerate_astc")); - ReadSettingGlobal(Settings::values.use_vsync, QStringLiteral("use_vsync")); - ReadSettingGlobal(Settings::values.disable_fps_limit, QStringLiteral("disable_fps_limit")); - ReadSettingGlobal(Settings::values.use_assembly_shaders, - QStringLiteral("use_assembly_shaders")); - ReadSettingGlobal(Settings::values.use_asynchronous_shaders, - QStringLiteral("use_asynchronous_shaders")); - ReadSettingGlobal(Settings::values.use_fast_gpu_time, QStringLiteral("use_fast_gpu_time")); - ReadSettingGlobal(Settings::values.use_caches_gc, QStringLiteral("use_caches_gc")); - ReadSettingGlobal(Settings::values.bg_red, QStringLiteral("bg_red")); - ReadSettingGlobal(Settings::values.bg_green, QStringLiteral("bg_green")); - ReadSettingGlobal(Settings::values.bg_blue, QStringLiteral("bg_blue")); + ReadGlobalSetting(Settings::values.renderer_backend); + ReadBasicSetting(Settings::values.renderer_debug); + ReadGlobalSetting(Settings::values.vulkan_device); + ReadGlobalSetting(Settings::values.fullscreen_mode); + ReadGlobalSetting(Settings::values.aspect_ratio); + ReadGlobalSetting(Settings::values.max_anisotropy); + ReadGlobalSetting(Settings::values.use_frame_limit); + ReadGlobalSetting(Settings::values.frame_limit); + ReadGlobalSetting(Settings::values.use_disk_shader_cache); + ReadGlobalSetting(Settings::values.gpu_accuracy); + ReadGlobalSetting(Settings::values.use_asynchronous_gpu_emulation); + ReadGlobalSetting(Settings::values.use_nvdec_emulation); + ReadGlobalSetting(Settings::values.accelerate_astc); + ReadGlobalSetting(Settings::values.use_vsync); + ReadGlobalSetting(Settings::values.disable_fps_limit); + ReadGlobalSetting(Settings::values.use_assembly_shaders); + ReadGlobalSetting(Settings::values.use_asynchronous_shaders); + ReadGlobalSetting(Settings::values.use_fast_gpu_time); + ReadGlobalSetting(Settings::values.use_caches_gc); + ReadGlobalSetting(Settings::values.bg_red); + ReadGlobalSetting(Settings::values.bg_green); + ReadGlobalSetting(Settings::values.bg_blue); qt_config->endGroup(); } @@ -860,15 +876,15 @@ void Config::ReadShortcutValues() { void Config::ReadSystemValues() { qt_config->beginGroup(QStringLiteral("System")); - ReadSettingGlobal(Settings::values.current_user, QStringLiteral("current_user"), 0); - Settings::values.current_user = - std::clamp(Settings::values.current_user, 0, Service::Account::MAX_USERS - 1); + ReadBasicSetting(Settings::values.current_user); + Settings::values.current_user = std::clamp(Settings::values.current_user.GetValue(), 0, + Service::Account::MAX_USERS - 1); - ReadSettingGlobal(Settings::values.language_index, QStringLiteral("language_index")); + ReadGlobalSetting(Settings::values.language_index); - ReadSettingGlobal(Settings::values.region_index, QStringLiteral("region_index")); + ReadGlobalSetting(Settings::values.region_index); - ReadSettingGlobal(Settings::values.time_zone_index, QStringLiteral("time_zone_index")); + ReadGlobalSetting(Settings::values.time_zone_index); bool rng_seed_enabled; ReadSettingGlobal(rng_seed_enabled, QStringLiteral("rng_seed_enabled"), false); @@ -894,7 +910,7 @@ void Config::ReadSystemValues() { } } - ReadSettingGlobal(Settings::values.sound_index, QStringLiteral("sound_index")); + ReadGlobalSetting(Settings::values.sound_index); qt_config->endGroup(); } @@ -978,16 +994,10 @@ void Config::ReadUILayoutValues() { void Config::ReadWebServiceValues() { qt_config->beginGroup(QStringLiteral("WebService")); - Settings::values.enable_telemetry = - ReadSetting(QStringLiteral("enable_telemetry"), true).toBool(); - Settings::values.web_api_url = - ReadSetting(QStringLiteral("web_api_url"), QStringLiteral("https://api.yuzu-emu.org")) - .toString() - .toStdString(); - Settings::values.yuzu_username = - ReadSetting(QStringLiteral("yuzu_username")).toString().toStdString(); - Settings::values.yuzu_token = - ReadSetting(QStringLiteral("yuzu_token")).toString().toStdString(); + ReadBasicSetting(Settings::values.enable_telemetry); + ReadBasicSetting(Settings::values.web_api_url); + ReadBasicSetting(Settings::values.yuzu_username); + ReadBasicSetting(Settings::values.yuzu_token); qt_config->endGroup(); } @@ -1073,7 +1083,7 @@ void Config::SavePlayerValue(std::size_t player_index) { } void Config::SaveDebugValues() { - WriteSetting(QStringLiteral("debug_pad_enabled"), Settings::values.debug_pad_enabled, false); + WriteBasicSetting(Settings::values.debug_pad_enabled); for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { const std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); WriteSetting(QStringLiteral("debug_pad_") + @@ -1093,7 +1103,7 @@ void Config::SaveDebugValues() { } void Config::SaveMouseValues() { - WriteSetting(QStringLiteral("mouse_enabled"), Settings::values.mouse_enabled, false); + WriteBasicSetting(Settings::values.mouse_enabled); for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) { const std::string default_param = @@ -1116,19 +1126,11 @@ void Config::SaveTouchscreenValues() { } void Config::SaveMotionTouchValues() { - WriteSetting(QStringLiteral("motion_device"), - QString::fromStdString(Settings::values.motion_device), - QStringLiteral("engine:motion_emu,update_period:100,sensitivity:0.01")); - WriteSetting(QStringLiteral("touch_device"), - QString::fromStdString(Settings::values.touch_device), - QStringLiteral("engine:emu_window")); - WriteSetting(QStringLiteral("use_touch_from_button"), Settings::values.use_touch_from_button, - false); - WriteSetting(QStringLiteral("touch_from_button_map"), - Settings::values.touch_from_button_map_index, 0); - WriteSetting(QStringLiteral("udp_input_servers"), - QString::fromStdString(Settings::values.udp_input_servers), - QString::fromUtf8(InputCommon::CemuhookUDP::DEFAULT_SRV)); + WriteBasicSetting(Settings::values.motion_device); + WriteBasicSetting(Settings::values.touch_device); + WriteBasicSetting(Settings::values.use_touch_from_button); + WriteBasicSetting(Settings::values.touch_from_button_map_index); + WriteBasicSetting(Settings::values.udp_input_servers); qt_config->beginWriteArray(QStringLiteral("touch_from_button_maps")); for (std::size_t p = 0; p < Settings::values.touch_from_button_maps.size(); ++p) { @@ -1171,15 +1173,11 @@ void Config::SaveAudioValues() { qt_config->beginGroup(QStringLiteral("Audio")); if (global) { - WriteSetting(QStringLiteral("output_engine"), - QString::fromStdString(Settings::values.sink_id), QStringLiteral("auto")); - WriteSetting(QStringLiteral("output_device"), - QString::fromStdString(Settings::values.audio_device_id), - QStringLiteral("auto")); + WriteBasicSetting(Settings::values.sink_id); + WriteBasicSetting(Settings::values.audio_device_id); } - WriteSettingGlobal(QStringLiteral("enable_audio_stretching"), - Settings::values.enable_audio_stretching); - WriteSettingGlobal(QStringLiteral("volume"), Settings::values.volume); + WriteGlobalSetting(Settings::values.enable_audio_stretching); + WriteGlobalSetting(Settings::values.volume); qt_config->endGroup(); } @@ -1195,29 +1193,21 @@ void Config::SaveControlValues() { SaveTouchscreenValues(); SaveMotionTouchValues(); - WriteSettingGlobal(QStringLiteral("use_docked_mode"), Settings::values.use_docked_mode); - WriteSettingGlobal(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled); - WriteSettingGlobal(QStringLiteral("enable_accurate_vibrations"), - Settings::values.enable_accurate_vibrations); - WriteSettingGlobal(QStringLiteral("motion_enabled"), Settings::values.motion_enabled); - WriteSetting(QStringLiteral("motion_device"), - QString::fromStdString(Settings::values.motion_device), - QStringLiteral("engine:motion_emu,update_period:100,sensitivity:0.01")); - WriteSetting(QStringLiteral("touch_device"), - QString::fromStdString(Settings::values.touch_device), - QStringLiteral("engine:emu_window")); - WriteSetting(QStringLiteral("keyboard_enabled"), Settings::values.keyboard_enabled, false); - WriteSetting(QStringLiteral("emulate_analog_keyboard"), - Settings::values.emulate_analog_keyboard, false); - WriteSetting(QStringLiteral("mouse_panning_sensitivity"), - Settings::values.mouse_panning_sensitivity, 1.0f); + WriteGlobalSetting(Settings::values.use_docked_mode); + WriteGlobalSetting(Settings::values.vibration_enabled); + WriteGlobalSetting(Settings::values.enable_accurate_vibrations); + WriteGlobalSetting(Settings::values.motion_enabled); + WriteBasicSetting(Settings::values.keyboard_enabled); + WriteBasicSetting(Settings::values.emulate_analog_keyboard); + WriteBasicSetting(Settings::values.mouse_panning_sensitivity); + qt_config->endGroup(); } void Config::SaveCoreValues() { qt_config->beginGroup(QStringLiteral("Core")); - WriteSettingGlobal(QStringLiteral("use_multi_core"), Settings::values.use_multi_core); + WriteGlobalSetting(Settings::values.use_multi_core); qt_config->endGroup(); } @@ -1225,7 +1215,7 @@ void Config::SaveCoreValues() { void Config::SaveDataStorageValues() { qt_config->beginGroup(QStringLiteral("Data Storage")); - WriteSetting(QStringLiteral("use_virtual_sd"), Settings::values.use_virtual_sd, true); + WriteBasicSetting(Settings::values.use_virtual_sd); WriteSetting(QStringLiteral("nand_directory"), QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::NANDDir)), QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::NANDDir))); @@ -1238,11 +1228,9 @@ void Config::SaveDataStorageValues() { WriteSetting(QStringLiteral("dump_directory"), QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::DumpDir)), QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::DumpDir))); - WriteSetting(QStringLiteral("gamecard_inserted"), Settings::values.gamecard_inserted, false); - WriteSetting(QStringLiteral("gamecard_current_game"), Settings::values.gamecard_current_game, - false); - WriteSetting(QStringLiteral("gamecard_path"), - QString::fromStdString(Settings::values.gamecard_path), QString{}); + WriteBasicSetting(Settings::values.gamecard_inserted); + WriteBasicSetting(Settings::values.gamecard_current_game); + WriteBasicSetting(Settings::values.gamecard_path); qt_config->endGroup(); } @@ -1252,24 +1240,23 @@ void Config::SaveDebuggingValues() { // Intentionally not using the QT default setting as this is intended to be changed in the ini qt_config->setValue(QStringLiteral("record_frame_times"), Settings::values.record_frame_times); - WriteSetting(QStringLiteral("program_args"), - QString::fromStdString(Settings::values.program_args), QString{}); - WriteSetting(QStringLiteral("dump_exefs"), Settings::values.dump_exefs, false); - WriteSetting(QStringLiteral("dump_nso"), Settings::values.dump_nso, false); - WriteSetting(QStringLiteral("enable_fs_access_log"), Settings::values.enable_fs_access_log, - false); - WriteSetting(QStringLiteral("quest_flag"), Settings::values.quest_flag, false); - WriteSetting(QStringLiteral("use_debug_asserts"), Settings::values.use_debug_asserts, false); - WriteSetting(QStringLiteral("disable_macro_jit"), Settings::values.disable_macro_jit, false); + WriteBasicSetting(Settings::values.program_args); + WriteBasicSetting(Settings::values.dump_exefs); + WriteBasicSetting(Settings::values.dump_nso); + WriteBasicSetting(Settings::values.enable_fs_access_log); + WriteBasicSetting(Settings::values.quest_flag); + WriteBasicSetting(Settings::values.use_debug_asserts); + WriteBasicSetting(Settings::values.disable_macro_jit); qt_config->endGroup(); } void Config::SaveServiceValues() { qt_config->beginGroup(QStringLiteral("Services")); - WriteSetting(QStringLiteral("bcat_backend"), - QString::fromStdString(Settings::values.bcat_backend), QStringLiteral("none")); - WriteSetting(QStringLiteral("bcat_boxcat_local"), Settings::values.bcat_boxcat_local, false); + + WriteBasicSetting(Settings::values.bcat_backend); + WriteBasicSetting(Settings::values.bcat_boxcat_local); + qt_config->endGroup(); } @@ -1295,9 +1282,8 @@ void Config::SaveDisabledAddOnValues() { void Config::SaveMiscellaneousValues() { qt_config->beginGroup(QStringLiteral("Miscellaneous")); - WriteSetting(QStringLiteral("log_filter"), QString::fromStdString(Settings::values.log_filter), - QStringLiteral("*:Info")); - WriteSetting(QStringLiteral("use_dev_keys"), Settings::values.use_dev_keys, false); + WriteBasicSetting(Settings::values.log_filter); + WriteBasicSetting(Settings::values.use_dev_keys); qt_config->endGroup(); } @@ -1325,38 +1311,27 @@ void Config::SavePathValues() { void Config::SaveCpuValues() { qt_config->beginGroup(QStringLiteral("Cpu")); - WriteSettingGlobal(QStringLiteral("cpu_accuracy"), - static_cast(Settings::values.cpu_accuracy.GetValue(global)), - Settings::values.cpu_accuracy.UsingGlobal(), - static_cast(Settings::values.cpu_accuracy.GetDefault())); - - WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_unfuse_fma"), - Settings::values.cpuopt_unsafe_unfuse_fma); - WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), - Settings::values.cpuopt_unsafe_reduce_fp_error); - WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"), - Settings::values.cpuopt_unsafe_ignore_standard_fpcr); - WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), - Settings::values.cpuopt_unsafe_inaccurate_nan); - WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_fastmem_check"), - Settings::values.cpuopt_unsafe_fastmem_check); + WriteSetting(QStringLiteral("cpu_accuracy"), + static_cast(Settings::values.cpu_accuracy.GetValue(global)), + static_cast(Settings::values.cpu_accuracy.GetDefault()), + Settings::values.cpu_accuracy.UsingGlobal()); + + WriteGlobalSetting(Settings::values.cpuopt_unsafe_unfuse_fma); + WriteGlobalSetting(Settings::values.cpuopt_unsafe_reduce_fp_error); + WriteGlobalSetting(Settings::values.cpuopt_unsafe_ignore_standard_fpcr); + WriteGlobalSetting(Settings::values.cpuopt_unsafe_inaccurate_nan); + WriteGlobalSetting(Settings::values.cpuopt_unsafe_fastmem_check); if (global) { - WriteSetting(QStringLiteral("cpuopt_page_tables"), Settings::values.cpuopt_page_tables, - true); - WriteSetting(QStringLiteral("cpuopt_block_linking"), Settings::values.cpuopt_block_linking, - true); - WriteSetting(QStringLiteral("cpuopt_return_stack_buffer"), - Settings::values.cpuopt_return_stack_buffer, true); - WriteSetting(QStringLiteral("cpuopt_fast_dispatcher"), - Settings::values.cpuopt_fast_dispatcher, true); - WriteSetting(QStringLiteral("cpuopt_context_elimination"), - Settings::values.cpuopt_context_elimination, true); - WriteSetting(QStringLiteral("cpuopt_const_prop"), Settings::values.cpuopt_const_prop, true); - WriteSetting(QStringLiteral("cpuopt_misc_ir"), Settings::values.cpuopt_misc_ir, true); - WriteSetting(QStringLiteral("cpuopt_reduce_misalign_checks"), - Settings::values.cpuopt_reduce_misalign_checks, true); - WriteSetting(QStringLiteral("cpuopt_fastmem"), Settings::values.cpuopt_fastmem, true); + WriteBasicSetting(Settings::values.cpuopt_page_tables); + WriteBasicSetting(Settings::values.cpuopt_block_linking); + WriteBasicSetting(Settings::values.cpuopt_return_stack_buffer); + WriteBasicSetting(Settings::values.cpuopt_fast_dispatcher); + WriteBasicSetting(Settings::values.cpuopt_context_elimination); + WriteBasicSetting(Settings::values.cpuopt_const_prop); + WriteBasicSetting(Settings::values.cpuopt_misc_ir); + WriteBasicSetting(Settings::values.cpuopt_reduce_misalign_checks); + WriteBasicSetting(Settings::values.cpuopt_fastmem); } qt_config->endGroup(); @@ -1365,38 +1340,34 @@ void Config::SaveCpuValues() { void Config::SaveRendererValues() { qt_config->beginGroup(QStringLiteral("Renderer")); - WriteSettingGlobal(QStringLiteral("backend"), - static_cast(Settings::values.renderer_backend.GetValue(global)), - Settings::values.renderer_backend.UsingGlobal(), - static_cast(Settings::values.renderer_backend.GetDefault())); - WriteSetting(QStringLiteral("debug"), Settings::values.renderer_debug); - WriteSettingGlobal(QStringLiteral("vulkan_device"), Settings::values.vulkan_device); - WriteSettingGlobal(QStringLiteral("fullscreen_mode"), Settings::values.fullscreen_mode); - WriteSettingGlobal(QStringLiteral("aspect_ratio"), Settings::values.aspect_ratio); - WriteSettingGlobal(QStringLiteral("max_anisotropy"), Settings::values.max_anisotropy); - WriteSettingGlobal(QStringLiteral("use_frame_limit"), Settings::values.use_frame_limit); - WriteSettingGlobal(QStringLiteral("frame_limit"), Settings::values.frame_limit); - WriteSettingGlobal(QStringLiteral("use_disk_shader_cache"), - Settings::values.use_disk_shader_cache); - WriteSettingGlobal(QStringLiteral("gpu_accuracy"), - static_cast(Settings::values.gpu_accuracy.GetValue(global)), - Settings::values.gpu_accuracy.UsingGlobal(), - static_cast(Settings::values.gpu_accuracy.GetDefault())); - WriteSettingGlobal(QStringLiteral("use_asynchronous_gpu_emulation"), - Settings::values.use_asynchronous_gpu_emulation); - WriteSettingGlobal(QStringLiteral("use_nvdec_emulation"), Settings::values.use_nvdec_emulation); - WriteSettingGlobal(QStringLiteral("accelerate_astc"), Settings::values.accelerate_astc); - WriteSettingGlobal(QStringLiteral("use_vsync"), Settings::values.use_vsync); - WriteSettingGlobal(QStringLiteral("disable_fps_limit"), Settings::values.disable_fps_limit); - WriteSettingGlobal(QStringLiteral("use_assembly_shaders"), - Settings::values.use_assembly_shaders); - WriteSettingGlobal(QStringLiteral("use_asynchronous_shaders"), - Settings::values.use_asynchronous_shaders); - WriteSettingGlobal(QStringLiteral("use_fast_gpu_time"), Settings::values.use_fast_gpu_time); - WriteSettingGlobal(QStringLiteral("use_caches_gc"), Settings::values.use_caches_gc); - WriteSettingGlobal(QStringLiteral("bg_red"), Settings::values.bg_red); - WriteSettingGlobal(QStringLiteral("bg_green"), Settings::values.bg_green); - WriteSettingGlobal(QStringLiteral("bg_blue"), Settings::values.bg_blue); + WriteSetting(QString::fromStdString(Settings::values.renderer_backend.GetLabel()), + static_cast(Settings::values.renderer_backend.GetValue(global)), + static_cast(Settings::values.renderer_backend.GetDefault()), + Settings::values.renderer_backend.UsingGlobal()); + WriteBasicSetting(Settings::values.renderer_debug); + WriteGlobalSetting(Settings::values.vulkan_device); + WriteGlobalSetting(Settings::values.fullscreen_mode); + WriteGlobalSetting(Settings::values.aspect_ratio); + WriteGlobalSetting(Settings::values.max_anisotropy); + WriteGlobalSetting(Settings::values.use_frame_limit); + WriteGlobalSetting(Settings::values.frame_limit); + WriteGlobalSetting(Settings::values.use_disk_shader_cache); + WriteSetting(QString::fromStdString(Settings::values.gpu_accuracy.GetLabel()), + static_cast(Settings::values.gpu_accuracy.GetValue(global)), + static_cast(Settings::values.gpu_accuracy.GetDefault()), + Settings::values.gpu_accuracy.UsingGlobal()); + WriteGlobalSetting(Settings::values.use_asynchronous_gpu_emulation); + WriteGlobalSetting(Settings::values.use_nvdec_emulation); + WriteGlobalSetting(Settings::values.accelerate_astc); + WriteGlobalSetting(Settings::values.use_vsync); + WriteGlobalSetting(Settings::values.disable_fps_limit); + WriteGlobalSetting(Settings::values.use_assembly_shaders); + WriteGlobalSetting(Settings::values.use_asynchronous_shaders); + WriteGlobalSetting(Settings::values.use_fast_gpu_time); + WriteGlobalSetting(Settings::values.use_caches_gc); + WriteGlobalSetting(Settings::values.bg_red); + WriteGlobalSetting(Settings::values.bg_green); + WriteGlobalSetting(Settings::values.bg_blue); qt_config->endGroup(); } @@ -1435,17 +1406,16 @@ void Config::SaveShortcutValues() { void Config::SaveSystemValues() { qt_config->beginGroup(QStringLiteral("System")); - WriteSetting(QStringLiteral("current_user"), Settings::values.current_user); - WriteSettingGlobal(QStringLiteral("language_index"), Settings::values.language_index); - WriteSettingGlobal(QStringLiteral("region_index"), Settings::values.region_index); - WriteSettingGlobal(QStringLiteral("time_zone_index"), Settings::values.time_zone_index); + WriteBasicSetting(Settings::values.current_user); + WriteGlobalSetting(Settings::values.language_index); + WriteGlobalSetting(Settings::values.region_index); + WriteGlobalSetting(Settings::values.time_zone_index); - WriteSettingGlobal(QStringLiteral("rng_seed_enabled"), - Settings::values.rng_seed.GetValue(global).has_value(), - Settings::values.rng_seed.UsingGlobal(), false); - WriteSettingGlobal(QStringLiteral("rng_seed"), - Settings::values.rng_seed.GetValue(global).value_or(0), - Settings::values.rng_seed.UsingGlobal(), 0); + WriteSetting(QStringLiteral("rng_seed_enabled"), + Settings::values.rng_seed.GetValue(global).has_value(), + Settings::values.rng_seed.UsingGlobal(), false); + WriteSetting(QStringLiteral("rng_seed"), Settings::values.rng_seed.GetValue(global).value_or(0), + Settings::values.rng_seed.UsingGlobal(), 0); if (global) { WriteSetting(QStringLiteral("custom_rtc_enabled"), Settings::values.custom_rtc.has_value(), @@ -1456,7 +1426,7 @@ void Config::SaveSystemValues() { 0); } - WriteSettingGlobal(QStringLiteral("sound_index"), Settings::values.sound_index); + WriteGlobalSetting(Settings::values.sound_index); qt_config->endGroup(); } @@ -1530,13 +1500,10 @@ void Config::SaveUILayoutValues() { void Config::SaveWebServiceValues() { qt_config->beginGroup(QStringLiteral("WebService")); - WriteSetting(QStringLiteral("enable_telemetry"), Settings::values.enable_telemetry, true); - WriteSetting(QStringLiteral("web_api_url"), - QString::fromStdString(Settings::values.web_api_url), - QStringLiteral("https://api.yuzu-emu.org")); - WriteSetting(QStringLiteral("yuzu_username"), - QString::fromStdString(Settings::values.yuzu_username)); - WriteSetting(QStringLiteral("yuzu_token"), QString::fromStdString(Settings::values.yuzu_token)); + WriteBasicSetting(Settings::values.enable_telemetry); + WriteBasicSetting(Settings::values.web_api_url); + WriteBasicSetting(Settings::values.yuzu_username); + WriteBasicSetting(Settings::values.yuzu_token); qt_config->endGroup(); } @@ -1555,25 +1522,15 @@ QVariant Config::ReadSetting(const QString& name, const QVariant& default_value) return result; } -QVariant Config::ReadSetting(const QString& name, Settings::CPUAccuracy default_value) const { - return ReadSetting(name, static_cast(default_value)); -} - -QVariant Config::ReadSetting(const QString& name, Settings::GPUAccuracy default_value) const { - return ReadSetting(name, static_cast(default_value)); -} - -QVariant Config::ReadSetting(const QString& name, Settings::RendererBackend default_value) const { - return ReadSetting(name, static_cast(default_value)); -} - template -void Config::ReadSettingGlobal(Settings::Setting& setting, const QString& name) { +void Config::ReadGlobalSetting(Settings::Setting& setting) { + QString name = QString::fromStdString(setting.GetLabel()); const bool use_global = qt_config->value(name + QStringLiteral("/use_global"), true).toBool(); setting.SetGlobal(use_global); - const Type& default_value = setting.GetDefault(); if (global || !use_global) { - setting.SetValue(static_cast(ReadSetting(name, default_value)).value()); + setting.SetValue(static_cast( + ReadSetting(name, QVariant::fromValue(setting.GetDefault()))) + .value()); } } @@ -1596,20 +1553,8 @@ void Config::WriteSetting(const QString& name, const QVariant& value, qt_config->setValue(name, value); } -template -void Config::WriteSettingGlobal(const QString& name, const Settings::Setting& setting) { - if (!global) { - qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal()); - } - if (global || !setting.UsingGlobal()) { - qt_config->setValue(name + QStringLiteral("/default"), - setting.GetValue(global) == setting.GetDefault()); - qt_config->setValue(name, setting.GetValue(global)); - } -} - -void Config::WriteSettingGlobal(const QString& name, const QVariant& value, bool use_global, - const QVariant& default_value) { +void Config::WriteSetting(const QString& name, const QVariant& value, const QVariant& default_value, + bool use_global) { if (!global) { qt_config->setValue(name + QStringLiteral("/use_global"), use_global); } -- cgit v1.2.3 From 7a8de138df35aecf760402a6b8097b4d6e0e8178 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Mon, 28 Jun 2021 17:32:24 -0400 Subject: 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 --- src/yuzu/configuration/config.cpp | 58 +++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) (limited to 'src/yuzu/configuration/config.cpp') 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) { } } -// 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 template <> void Config::ReadBasicSetting(Settings::BasicSetting& setting) { @@ -1375,8 +1380,7 @@ void Config::SaveRendererValues() { void Config::SaveScreenshotValues() { 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"), QString::fromStdString(FS::GetYuzuPathString(FS::YuzuPath::ScreenshotsDir))); @@ -1412,10 +1416,10 @@ void Config::SaveSystemValues() { WriteGlobalSetting(Settings::values.time_zone_index); 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), - Settings::values.rng_seed.UsingGlobal(), 0); + 0, Settings::values.rng_seed.UsingGlobal()); if (global) { WriteSetting(QStringLiteral("custom_rtc_enabled"), Settings::values.custom_rtc.has_value(), @@ -1436,10 +1440,8 @@ void Config::SaveUIValues() { WriteSetting(QStringLiteral("theme"), UISettings::values.theme, 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(); SaveUILayoutValues(); @@ -1447,18 +1449,17 @@ void Config::SaveUIValues() { SaveScreenshotValues(); 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(); } @@ -1466,11 +1467,11 @@ void Config::SaveUIValues() { void Config::SaveUIGamelistValues() { 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")); for (int i = 0; i < UISettings::values.favorited_ids.size(); i++) { qt_config->setArrayIndex(i); @@ -1491,8 +1492,7 @@ void Config::SaveUILayoutValues() { WriteSetting(QStringLiteral("gameListHeaderState"), UISettings::values.gamelist_header_state); WriteSetting(QStringLiteral("microProfileDialogGeometry"), UISettings::values.microprofile_geometry); - WriteSetting(QStringLiteral("microProfileDialogVisible"), - UISettings::values.microprofile_visible, false); + WriteBasicSetting(UISettings::values.microprofile_visible); qt_config->endGroup(); } -- cgit v1.2.3 From 38f658d21ec9f350e674d830f1c942e958a63181 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 2 Jul 2021 01:06:30 -0400 Subject: config: Read UISettings as basic settings I must have been asleep or something. These need to be read with the new ReadBasicSetting function. --- src/yuzu/configuration/config.cpp | 49 +++++++++++++++------------------------ 1 file changed, 19 insertions(+), 30 deletions(-) (limited to 'src/yuzu/configuration/config.cpp') diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 0802b14a1..e21f15c72 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -926,10 +926,8 @@ void Config::ReadUIValues() { UISettings::values.theme = ReadSetting(QStringLiteral("theme"), QString::fromUtf8(UISettings::themes[0].second)) .toString(); - UISettings::values.enable_discord_presence = - ReadSetting(QStringLiteral("enable_discord_presence"), true).toBool(); - UISettings::values.select_user_on_boot = - ReadSetting(QStringLiteral("select_user_on_boot"), false).toBool(); + ReadBasicSetting(UISettings::values.enable_discord_presence); + ReadBasicSetting(UISettings::values.select_user_on_boot); ReadUIGamelistValues(); ReadUILayoutValues(); @@ -937,24 +935,17 @@ void Config::ReadUIValues() { ReadScreenshotValues(); ReadShortcutValues(); - UISettings::values.single_window_mode = - ReadSetting(QStringLiteral("singleWindowMode"), true).toBool(); - UISettings::values.fullscreen = ReadSetting(QStringLiteral("fullscreen"), false).toBool(); - UISettings::values.display_titlebar = - ReadSetting(QStringLiteral("displayTitleBars"), true).toBool(); - UISettings::values.show_filter_bar = - ReadSetting(QStringLiteral("showFilterBar"), true).toBool(); - UISettings::values.show_status_bar = - ReadSetting(QStringLiteral("showStatusBar"), true).toBool(); - UISettings::values.confirm_before_closing = - ReadSetting(QStringLiteral("confirmClose"), true).toBool(); - UISettings::values.first_start = ReadSetting(QStringLiteral("firstStart"), true).toBool(); - UISettings::values.callout_flags = ReadSetting(QStringLiteral("calloutFlags"), 0).toUInt(); - UISettings::values.show_console = ReadSetting(QStringLiteral("showConsole"), false).toBool(); - UISettings::values.pause_when_in_background = - ReadSetting(QStringLiteral("pauseWhenInBackground"), false).toBool(); - UISettings::values.hide_mouse = - ReadSetting(QStringLiteral("hideInactiveMouse"), false).toBool(); + ReadBasicSetting(UISettings::values.single_window_mode); + ReadBasicSetting(UISettings::values.fullscreen); + ReadBasicSetting(UISettings::values.display_titlebar); + ReadBasicSetting(UISettings::values.show_filter_bar); + ReadBasicSetting(UISettings::values.show_status_bar); + ReadBasicSetting(UISettings::values.confirm_before_closing); + ReadBasicSetting(UISettings::values.first_start); + ReadBasicSetting(UISettings::values.callout_flags); + ReadBasicSetting(UISettings::values.show_console); + ReadBasicSetting(UISettings::values.pause_when_in_background); + ReadBasicSetting(UISettings::values.hide_mouse); qt_config->endGroup(); } @@ -962,12 +953,11 @@ void Config::ReadUIValues() { void Config::ReadUIGamelistValues() { qt_config->beginGroup(QStringLiteral("UIGameList")); - UISettings::values.show_add_ons = ReadSetting(QStringLiteral("show_add_ons"), true).toBool(); - UISettings::values.icon_size = ReadSetting(QStringLiteral("icon_size"), 64).toUInt(); - UISettings::values.row_1_text_id = ReadSetting(QStringLiteral("row_1_text_id"), 3).toUInt(); - UISettings::values.row_2_text_id = ReadSetting(QStringLiteral("row_2_text_id"), 2).toUInt(); - UISettings::values.cache_game_list = - ReadSetting(QStringLiteral("cache_game_list"), true).toBool(); + ReadBasicSetting(UISettings::values.show_add_ons); + ReadBasicSetting(UISettings::values.icon_size); + ReadBasicSetting(UISettings::values.row_1_text_id); + ReadBasicSetting(UISettings::values.row_2_text_id); + ReadBasicSetting(UISettings::values.cache_game_list); const int favorites_size = qt_config->beginReadArray(QStringLiteral("favorites")); for (int i = 0; i < favorites_size; i++) { qt_config->setArrayIndex(i); @@ -990,8 +980,7 @@ void Config::ReadUILayoutValues() { ReadSetting(QStringLiteral("gameListHeaderState")).toByteArray(); UISettings::values.microprofile_geometry = ReadSetting(QStringLiteral("microProfileDialogGeometry")).toByteArray(); - UISettings::values.microprofile_visible = - ReadSetting(QStringLiteral("microProfileDialogVisible"), false).toBool(); + ReadBasicSetting(UISettings::values.microprofile_visible); qt_config->endGroup(); } -- cgit v1.2.3 From a949ee0410fcce9144806d7b64e9ae4bffd4fee9 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Thu, 8 Jul 2021 14:07:10 -0400 Subject: general: Code formatting improvements Slight improvements to readability. Dropped suggestions for string_view (settings.h:101), pass by value (settings.h:82), reverting double to a float (config.cpp:316), and other smaller ones, some out of scope. Addresses review feedback. Co-authored-by: Ameer J <52414509+ameerj@users.noreply.github.com> --- src/yuzu/configuration/config.cpp | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'src/yuzu/configuration/config.cpp') diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index e21f15c72..1a0f75373 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -282,22 +282,23 @@ void Config::Initialize(const std::string& config_name) { template <> void Config::ReadBasicSetting(Settings::BasicSetting& setting) { const QString name = QString::fromStdString(setting.GetLabel()); + const auto default_value = QString::fromStdString(setting.GetDefault()); if (qt_config->value(name + QStringLiteral("/default"), false).toBool()) { - setting.SetValue(setting.GetDefault()); + setting.SetValue(default_value.toStdString()); } else { - setting.SetValue(qt_config->value(name, QString::fromStdString(setting.GetDefault())) - .toString() - .toStdString()); + setting.SetValue(qt_config->value(name, default_value).toString().toStdString()); } } + template void Config::ReadBasicSetting(Settings::BasicSetting& setting) { const QString name = QString::fromStdString(setting.GetLabel()); + const Type default_value = setting.GetDefault(); if (qt_config->value(name + QStringLiteral("/default"), false).toBool()) { - setting.SetValue(setting.GetDefault()); + setting.SetValue(default_value); } else { setting.SetValue( - static_cast(qt_config->value(name, setting.GetDefault())).value()); + static_cast(qt_config->value(name, default_value)).value()); } } @@ -305,10 +306,11 @@ void Config::ReadBasicSetting(Settings::BasicSetting& setting) { template <> void Config::WriteBasicSetting(const Settings::BasicSetting& setting) { const QString name = QString::fromStdString(setting.GetLabel()); - qt_config->setValue(name + QStringLiteral("/default"), - setting.GetValue() == setting.GetDefault()); - qt_config->setValue(name, QString::fromStdString(setting.GetValue())); + const std::string& value = setting.GetValue(); + qt_config->setValue(name + QStringLiteral("/default"), value == setting.GetDefault()); + qt_config->setValue(name, QString::fromStdString(value)); } + // Explicit float definition: use a double as Qt doesn't write legible floats to config files template <> void Config::WriteBasicSetting(const Settings::BasicSetting& setting) { @@ -318,12 +320,13 @@ void Config::WriteBasicSetting(const Settings::BasicSetting& setting) { setting.GetValue() == setting.GetDefault()); qt_config->setValue(name, value); } + template void Config::WriteBasicSetting(const Settings::BasicSetting& setting) { const QString name = QString::fromStdString(setting.GetLabel()); - qt_config->setValue(name + QStringLiteral("/default"), - setting.GetValue() == setting.GetDefault()); - qt_config->setValue(name, setting.GetValue()); + const Type value = setting.GetValue(); + qt_config->setValue(name + QStringLiteral("/default"), value == setting.GetDefault()); + qt_config->setValue(name, value); } // Explicit float definition: use a double as Qt doesn't write legible floats to config files @@ -340,16 +343,17 @@ void Config::WriteGlobalSetting(const Settings::Setting& setting) { qt_config->setValue(name, value); } } + template void Config::WriteGlobalSetting(const Settings::Setting& setting) { - QString name = QString::fromStdString(setting.GetLabel()); + const QString name = QString::fromStdString(setting.GetLabel()); + const Type& value = setting.GetValue(global); if (!global) { qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal()); } if (global || !setting.UsingGlobal()) { - qt_config->setValue(name + QStringLiteral("/default"), - setting.GetValue(global) == setting.GetDefault()); - qt_config->setValue(name, setting.GetValue(global)); + qt_config->setValue(name + QStringLiteral("/default"), value == setting.GetDefault()); + qt_config->setValue(name, value); } } -- cgit v1.2.3