Wallpaper.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. struct SceneData {
  30. struct {
  31. glm::vec3 ambient;
  32. glm::vec3 skylight;
  33. UserSettingUniquePtr clear;
  34. } colors;
  35. /**
  36. * Camera configuration
  37. */
  38. struct Camera {
  39. /** Enable fade effect */
  40. bool fade;
  41. /** Used by the software to allow the users to preview the background or not? */
  42. bool preview;
  43. /**
  44. * Bloom effect configuration
  45. */
  46. struct {
  47. /** If bloom is enabled or not */
  48. UserSettingUniquePtr enabled;
  49. /** Bloom's strength to pass onto the shader */
  50. UserSettingUniquePtr strength;
  51. /** Bloom's threshold to pass onto the shader */
  52. UserSettingUniquePtr threshold;
  53. } bloom;
  54. /**
  55. * Parallax effect configuration
  56. */
  57. struct {
  58. UserSettingUniquePtr enabled;
  59. UserSettingUniquePtr amount;
  60. UserSettingUniquePtr delay;
  61. UserSettingUniquePtr mouseInfluence;
  62. } parallax;
  63. /**
  64. * Shake effect configuration
  65. */
  66. struct {
  67. UserSettingUniquePtr enabled;
  68. UserSettingUniquePtr amplitude;
  69. UserSettingUniquePtr roughness;
  70. UserSettingUniquePtr speed;
  71. } shake;
  72. /**
  73. * Position configuration
  74. */
  75. struct {
  76. glm::vec3 center;
  77. glm::vec3 eye;
  78. glm::vec3 up;
  79. } configuration;
  80. /**
  81. * Projection information
  82. */
  83. struct {
  84. int width;
  85. int height;
  86. bool isAuto;
  87. float nearz;
  88. float farz;
  89. float fov;
  90. } projection;
  91. } camera;
  92. ObjectList objects;
  93. };
  94. class Scene final : public Wallpaper, public SceneData {
  95. public:
  96. explicit Scene (WallpaperData data, SceneData sceneData) noexcept :
  97. Wallpaper (std::move (data)), SceneData (std::move (sceneData)) { }
  98. ~Scene () override = default;
  99. };
  100. } // namespace WallpaperEngine::Data::Model