Theme.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include <cpp3ds/System/FileSystem.hpp>
  2. #include <cpp3ds/System/I18n.hpp>
  3. #include <fstream>
  4. #include <rapidjson/ostreamwrapper.h>
  5. #include <rapidjson/writer.h>
  6. #include <cpp3ds/System/FileInputStream.hpp>
  7. #include "Theme.hpp"
  8. #include "Util.hpp"
  9. namespace FreeShop {
  10. //Images vars
  11. bool Theme::isFlagsThemed = false;
  12. bool Theme::isItemBG9Themed = false;
  13. bool Theme::isButtonRadius9Themed = false;
  14. bool Theme::isFSBGSD9Themed = false;
  15. bool Theme::isFSBGNAND9Themed = false;
  16. bool Theme::isInstalledItemBG9Themed = false;
  17. bool Theme::isItemBGSelected9Themed = false;
  18. bool Theme::isListItemBG9Themed = false;
  19. bool Theme::isMissingIconThemed = false;
  20. bool Theme::isNotification9Themed = false;
  21. bool Theme::isQrSelector9Themed = false;
  22. bool Theme::isScrollbar9Themed = false;
  23. //Sounds vars
  24. bool Theme::isSoundBlipThemed = false;
  25. bool Theme::isSoundChimeThemed = false;
  26. bool Theme::isSoundStartupThemed = false;
  27. //Text theming
  28. bool Theme::isTextThemed = false;
  29. cpp3ds::Color Theme::primaryTextColor = cpp3ds::Color::Black;
  30. cpp3ds::Color Theme::secondaryTextColor = cpp3ds::Color(130, 130, 130, 255);
  31. cpp3ds::Color Theme::iconSetColor = cpp3ds::Color(100, 100, 100);
  32. cpp3ds::Color Theme::iconSetColorActive = cpp3ds::Color(0, 0, 0);
  33. cpp3ds::Color Theme::transitionScreenColor = cpp3ds::Color(255, 255, 255);
  34. cpp3ds::Color Theme::loadingIcon = cpp3ds::Color(110, 110, 110, 255);
  35. cpp3ds::Color Theme::loadingText = cpp3ds::Color::Black;
  36. cpp3ds::Color Theme::freText = cpp3ds::Color(255, 255, 255, 0);
  37. cpp3ds::Color Theme::versionText = cpp3ds::Color(0, 0, 0, 100);
  38. cpp3ds::Color Theme::percentageText = cpp3ds::Color::Black;
  39. cpp3ds::Color Theme::boxColor = cpp3ds::Color(245, 245, 245);
  40. cpp3ds::Color Theme::boxOutlineColor = cpp3ds::Color(158, 158, 158, 255);
  41. cpp3ds::Color Theme::dialogBackground = cpp3ds::Color(255, 255, 255, 128);
  42. cpp3ds::Color Theme::dialogButton = cpp3ds::Color(158, 158, 158, 0);
  43. cpp3ds::Color Theme::dialogButtonText = cpp3ds::Color(3, 169, 244, 0);
  44. cpp3ds::Color Theme::themeDescColor = cpp3ds::Color(0, 0, 0, 0);
  45. //DarkTheme Text theming
  46. cpp3ds::Color Theme::darkPrimaryTextColor = cpp3ds::Color::Black;
  47. cpp3ds::Color Theme::darkSecondaryTextColor = cpp3ds::Color::Black;
  48. cpp3ds::Color Theme::darkIconSetColor = cpp3ds::Color::Black;
  49. cpp3ds::Color Theme::darkIconSetColorActive = cpp3ds::Color::Black;
  50. cpp3ds::Color Theme::darkTransitionScreenColor = cpp3ds::Color::Black;
  51. cpp3ds::Color Theme::darkLoadingIcon = cpp3ds::Color::Black;
  52. cpp3ds::Color Theme::darkLoadingText = cpp3ds::Color::Black;
  53. cpp3ds::Color Theme::darkFreText = cpp3ds::Color::Black;
  54. cpp3ds::Color Theme::darkVersionText = cpp3ds::Color::Black;
  55. cpp3ds::Color Theme::darkPercentageText = cpp3ds::Color::Black;
  56. cpp3ds::Color Theme::darkBoxColor = cpp3ds::Color::Black;
  57. cpp3ds::Color Theme::darkBoxOutlineColor = cpp3ds::Color::Black;
  58. cpp3ds::Color Theme::darkDialogBackground = cpp3ds::Color::Black;
  59. cpp3ds::Color Theme::darkDialogButton = cpp3ds::Color::Black;
  60. cpp3ds::Color Theme::darkDialogButtonText = cpp3ds::Color::Black;
  61. cpp3ds::Color Theme::darkThemeDescColor = cpp3ds::Color::Black;
  62. //Theme informations
  63. std::string Theme::themeName = _("Classic").toAnsiString();
  64. std::string Theme::themeDesc = _("The default theme of freeShop.\nMade by arc13 / Cruel.").toAnsiString();
  65. std::string Theme::themeVersion = FREESHOP_VERSION;
  66. //DarkTheme informations
  67. std::string Theme::darkThemeName = _("Glowing Dark").toAnsiString();
  68. std::string Theme::darkThemeDesc = _("The first official theme of freeShop.\nMade by Paul_GameDev").toAnsiString();
  69. std::string Theme::darkThemeVersion = FREESHOP_VERSION;
  70. Theme &Theme::getInstance()
  71. {
  72. static Theme theme;
  73. return theme;
  74. }
  75. #define ADD_DEFAULT(key, val) \
  76. if (!m_json.HasMember(key)) \
  77. m_json.AddMember(rapidjson::StringRef(key), val, m_json.GetAllocator());
  78. void Theme::loadDefaults()
  79. {
  80. if (!m_json.IsObject())
  81. m_json.SetObject();
  82. ADD_DEFAULT("primaryText", "000000");
  83. ADD_DEFAULT("secondaryText", "828282");
  84. ADD_DEFAULT("iconSet", "646464");
  85. ADD_DEFAULT("iconSetActive", "363636");
  86. ADD_DEFAULT("transitionScreen", "FFFFFF");
  87. ADD_DEFAULT("loadingColor", "898989");
  88. ADD_DEFAULT("loadingText", "353535");
  89. ADD_DEFAULT("freText", "420420");
  90. ADD_DEFAULT("versionText", "546978");
  91. ADD_DEFAULT("percentageText", "115599");
  92. ADD_DEFAULT("boxColor", "00FF7F");
  93. ADD_DEFAULT("boxOutlineColor", "008899");
  94. ADD_DEFAULT("dialogBackground", "CE2F06");
  95. ADD_DEFAULT("dialogButton", "FDE243");
  96. ADD_DEFAULT("dialogButtonText", "320F3C");
  97. ADD_DEFAULT("darkPrimaryText", "FFFFFF");
  98. ADD_DEFAULT("darkSecondaryText", "FFFFFF");
  99. ADD_DEFAULT("darkIconSet", "FFFFFF");
  100. ADD_DEFAULT("darkIconSetActive", "FFFFFF");
  101. ADD_DEFAULT("darkTransitionScreen", "FFFFFF");
  102. ADD_DEFAULT("darkLoadingColor", "FFFFFF");
  103. ADD_DEFAULT("darkLoadingText", "FFFFFF");
  104. ADD_DEFAULT("darkFreText", "FFFFFF");
  105. ADD_DEFAULT("darkVersionText", "FFFFFF");
  106. ADD_DEFAULT("darkPercentageText", "FFFFFF");
  107. ADD_DEFAULT("darkBoxColor", "FFFFFF");
  108. ADD_DEFAULT("darkBoxOutlineColor", "FFFFFF");
  109. ADD_DEFAULT("darkDialogBackground", "FFFFFF");
  110. ADD_DEFAULT("darkDialogButton", "FFFFFF");
  111. ADD_DEFAULT("darkDialogButtonText", "FFFFFF");
  112. ADD_DEFAULT("themeName", "My custom theme");
  113. ADD_DEFAULT("themeDesc", "Theme made by someone.");
  114. ADD_DEFAULT("themeVer", "x.y");
  115. ADD_DEFAULT("darkThemeName", "Ohaii~!");
  116. ADD_DEFAULT("darkThemeDesc", "You can't even see this, lol.");
  117. ADD_DEFAULT("darkThemeVer", "Code.Lurker");
  118. getInstance().saveToFile();
  119. }
  120. bool Theme::loadFromFile(const std::string &filename)
  121. {
  122. rapidjson::Document &json = getInstance().m_json;
  123. std::string path = cpp3ds::FileSystem::getFilePath(filename);
  124. std::string jsonString;
  125. cpp3ds::FileInputStream file;
  126. if (!file.open(filename))
  127. return false;
  128. jsonString.resize(file.getSize());
  129. file.read(&jsonString[0], jsonString.size());
  130. json.Parse(jsonString.c_str());
  131. getInstance().loadDefaults();
  132. return !json.HasParseError();
  133. }
  134. const rapidjson::Value &Theme::get(std::string key)
  135. {
  136. return getInstance().m_json[key.c_str()];
  137. }
  138. void Theme::saveToFile(const std::string &filename)
  139. {
  140. std::string path = cpp3ds::FileSystem::getFilePath(filename);
  141. std::ofstream file(path);
  142. rapidjson::OStreamWrapper osw(file);
  143. rapidjson::Writer<rapidjson::OStreamWrapper> writer(osw);
  144. getInstance().m_json.Accept(writer);
  145. }
  146. void Theme::loadNameDesc()
  147. {
  148. themeName = _("Classic").toAnsiString();
  149. themeDesc = _("The default theme of freeShop.\nMade by arc13 / Cruel.").toAnsiString();
  150. }
  151. } // namespace FreeShop