Wallpaper.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #pragma once
  2. #include <memory>
  3. #include <glm/glm.hpp>
  4. #include <utility>
  5. #include "Object.h"
  6. #include "Types.h"
  7. #include "WallpaperEngine/Data/Utils/TypeCaster.h"
  8. namespace WallpaperEngine::Data::Model {
  9. using namespace WallpaperEngine::Data::Utils;
  10. struct WallpaperData {
  11. std::string filename;
  12. Project& project;
  13. };
  14. class Wallpaper : public TypeCaster, public WallpaperData {
  15. public:
  16. explicit Wallpaper (WallpaperData data) noexcept : TypeCaster (), WallpaperData (std::move (data)) { };
  17. ~Wallpaper () override = default;
  18. };
  19. class Video final : public Wallpaper {
  20. public:
  21. explicit Video (WallpaperData data) noexcept : Wallpaper (std::move (data)) { }
  22. ~Video () override = default;
  23. };
  24. class Web final : public Wallpaper {
  25. public:
  26. explicit Web (WallpaperData data) noexcept : Wallpaper (std::move (data)) { }
  27. ~Web () override = default;
  28. };
  29. /** A key of a scene camera path: where the camera is at time seconds into the path */
  30. struct CameraPathKey {
  31. float time;
  32. glm::vec3 eye;
  33. glm::vec3 center;
  34. glm::vec3 up;
  35. float zoom;
  36. };
  37. /** One path of the files listed in scene.json's "camera" "paths", played one after another */
  38. struct CameraPath {
  39. std::vector<CameraPathKey> keys;
  40. float duration;
  41. };
  42. struct SceneData {
  43. struct {
  44. UserSettingUniquePtr ambient;
  45. UserSettingUniquePtr skylight;
  46. UserSettingUniquePtr clear;
  47. } colors;
  48. /** Distance and height fog ("fogdistance*"/"fogheight*" in general) */
  49. struct {
  50. UserSettingUniquePtr distanceEnabled;
  51. UserSettingUniquePtr distanceColor;
  52. UserSettingUniquePtr distanceStart;
  53. UserSettingUniquePtr distanceEnd;
  54. UserSettingUniquePtr distanceStartDensity;
  55. UserSettingUniquePtr distanceEndDensity;
  56. UserSettingUniquePtr heightEnabled;
  57. UserSettingUniquePtr heightColor;
  58. UserSettingUniquePtr heightStart;
  59. UserSettingUniquePtr heightEnd;
  60. UserSettingUniquePtr heightStartDensity;
  61. UserSettingUniquePtr heightEndDensity;
  62. } fog;
  63. struct Camera {
  64. UserSettingUniquePtr fade;
  65. /** Whether the software's preview UI is allowed to show this background */
  66. bool preview;
  67. struct {
  68. UserSettingUniquePtr enabled;
  69. UserSettingUniquePtr strength;
  70. UserSettingUniquePtr threshold;
  71. /** "hdr": HDR rendering and bloom, only with WE's ultra post processing */
  72. UserSettingUniquePtr hdr;
  73. UserSettingUniquePtr hdrStrength;
  74. UserSettingUniquePtr hdrThreshold;
  75. UserSettingUniquePtr hdrFeather;
  76. UserSettingUniquePtr hdrScatter;
  77. UserSettingUniquePtr hdrIterations;
  78. UserSettingUniquePtr tint;
  79. } bloom;
  80. struct {
  81. UserSettingUniquePtr enabled;
  82. UserSettingUniquePtr amount;
  83. UserSettingUniquePtr delay;
  84. UserSettingUniquePtr mouseInfluence;
  85. } parallax;
  86. struct {
  87. UserSettingUniquePtr enabled;
  88. UserSettingUniquePtr amplitude;
  89. UserSettingUniquePtr roughness;
  90. UserSettingUniquePtr speed;
  91. } shake;
  92. struct {
  93. glm::vec3 center;
  94. glm::vec3 eye;
  95. glm::vec3 up;
  96. } configuration;
  97. std::vector<CameraPath> paths;
  98. struct {
  99. int width;
  100. int height;
  101. bool isAuto;
  102. bool isPerspective;
  103. UserSettingUniquePtr nearz;
  104. UserSettingUniquePtr farz;
  105. UserSettingUniquePtr fov;
  106. /** fov of the perspective layers in a 2D scene */
  107. UserSettingUniquePtr perspectiveOverrideFov;
  108. /** 2D scenes: magnification around the scene center, times the active camera object's zoom */
  109. UserSettingUniquePtr zoom;
  110. } projection;
  111. } camera;
  112. ObjectList objects;
  113. };
  114. class Scene final : public Wallpaper, public SceneData {
  115. public:
  116. explicit Scene (WallpaperData data, SceneData sceneData) noexcept :
  117. Wallpaper (std::move (data)), SceneData (std::move (sceneData)) { }
  118. ~Scene () override = default;
  119. };
  120. } // namespace WallpaperEngine::Data::Model