uisettings.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // SPDX-FileCopyrightText: 2016 Citra Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include <QSettings>
  4. #include "common/fs/fs.h"
  5. #include "common/fs/path_util.h"
  6. #include "yuzu/uisettings.h"
  7. #ifndef CANNOT_EXPLICITLY_INSTANTIATE
  8. namespace Settings {
  9. template class Setting<bool>;
  10. template class Setting<std::string>;
  11. template class Setting<u16, true>;
  12. template class Setting<u32>;
  13. template class Setting<u8, true>;
  14. template class Setting<u8>;
  15. template class Setting<unsigned long long>;
  16. } // namespace Settings
  17. #endif
  18. namespace FS = Common::FS;
  19. namespace UISettings {
  20. const Themes themes{{
  21. {"Default", "default"},
  22. {"Default Colorful", "colorful"},
  23. {"Dark", "qdarkstyle"},
  24. {"Dark Colorful", "colorful_dark"},
  25. {"Midnight Blue", "qdarkstyle_midnight_blue"},
  26. {"Midnight Blue Colorful", "colorful_midnight_blue"},
  27. }};
  28. bool IsDarkTheme() {
  29. const auto& theme = UISettings::values.theme;
  30. return theme == std::string("qdarkstyle") || theme == std::string("qdarkstyle_midnight_blue") ||
  31. theme == std::string("colorful_dark") || theme == std::string("colorful_midnight_blue");
  32. }
  33. Values values = {};
  34. u32 CalculateWidth(u32 height, Settings::AspectRatio ratio) {
  35. switch (ratio) {
  36. case Settings::AspectRatio::R4_3:
  37. return height * 4 / 3;
  38. case Settings::AspectRatio::R21_9:
  39. return height * 21 / 9;
  40. case Settings::AspectRatio::R16_10:
  41. return height * 16 / 10;
  42. case Settings::AspectRatio::R16_9:
  43. case Settings::AspectRatio::Stretch:
  44. // TODO: Move this function wherever appropriate to implement Stretched aspect
  45. break;
  46. }
  47. return height * 16 / 9;
  48. }
  49. void SaveWindowState() {
  50. const auto window_state_config_loc =
  51. FS::PathToUTF8String(FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "window_state.ini");
  52. void(FS::CreateParentDir(window_state_config_loc));
  53. QSettings config(QString::fromStdString(window_state_config_loc), QSettings::IniFormat);
  54. config.setValue(QStringLiteral("geometry"), values.geometry);
  55. config.setValue(QStringLiteral("state"), values.state);
  56. config.setValue(QStringLiteral("geometryRenderWindow"), values.renderwindow_geometry);
  57. config.setValue(QStringLiteral("gameListHeaderState"), values.gamelist_header_state);
  58. config.setValue(QStringLiteral("microProfileDialogGeometry"), values.microprofile_geometry);
  59. config.sync();
  60. }
  61. void RestoreWindowState(std::unique_ptr<QtConfig>& qtConfig) {
  62. const auto window_state_config_loc =
  63. FS::PathToUTF8String(FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "window_state.ini");
  64. // Migrate window state from old location
  65. if (!FS::Exists(window_state_config_loc) && qtConfig->Exists("UI", "UILayout\\geometry")) {
  66. const auto config_loc =
  67. FS::PathToUTF8String(FS::GetYuzuPath(FS::YuzuPath::ConfigDir) / "qt-config.ini");
  68. QSettings config(QString::fromStdString(config_loc), QSettings::IniFormat);
  69. config.beginGroup(QStringLiteral("UI"));
  70. config.beginGroup(QStringLiteral("UILayout"));
  71. values.geometry = config.value(QStringLiteral("geometry")).toByteArray();
  72. values.state = config.value(QStringLiteral("state")).toByteArray();
  73. values.renderwindow_geometry =
  74. config.value(QStringLiteral("geometryRenderWindow")).toByteArray();
  75. values.gamelist_header_state =
  76. config.value(QStringLiteral("gameListHeaderState")).toByteArray();
  77. values.microprofile_geometry =
  78. config.value(QStringLiteral("microProfileDialogGeometry")).toByteArray();
  79. config.endGroup();
  80. config.endGroup();
  81. return;
  82. }
  83. void(FS::CreateParentDir(window_state_config_loc));
  84. const QSettings config(QString::fromStdString(window_state_config_loc), QSettings::IniFormat);
  85. values.geometry = config.value(QStringLiteral("geometry")).toByteArray();
  86. values.state = config.value(QStringLiteral("state")).toByteArray();
  87. values.renderwindow_geometry =
  88. config.value(QStringLiteral("geometryRenderWindow")).toByteArray();
  89. values.gamelist_header_state =
  90. config.value(QStringLiteral("gameListHeaderState")).toByteArray();
  91. values.microprofile_geometry =
  92. config.value(QStringLiteral("microProfileDialogGeometry")).toByteArray();
  93. }
  94. } // namespace UISettings