Quellcode durchsuchen

chore: animation layer visibility should be a UserSetting instead of a plain boolean, fixes startup of background 2822100899 of issue #454

Almamu vor 7 Monaten
Ursprung
Commit
f237d10abc

+ 1 - 1
src/WallpaperEngine/Data/Model/Object.h

@@ -78,7 +78,7 @@ struct ImageEffect {
 struct ImageAnimationLayer {
     int id;
     float rate;
-    bool visible;
+    UserSettingUniquePtr visible;
     float blend;
     int animation;
 };

+ 5 - 5
src/WallpaperEngine/Data/Parsers/ObjectParser.cpp

@@ -118,7 +118,7 @@ ImageUniquePtr ObjectParser::parseImage (const JSON& it, const Project& project,
             .brightness = it.optional ("brightness", 1.0f),
             .model = ModelParser::load (project, image),
             .effects = effects.has_value () ? parseEffects (*effects, project) : std::vector <ImageEffectUniquePtr> {},
-            .animationLayers = animationLayers.has_value () ? parseAnimationLayers (*animationLayers) : std::vector <ImageAnimationLayerUniquePtr> {},
+            .animationLayers = animationLayers.has_value () ? parseAnimationLayers (*animationLayers, project) : std::vector <ImageAnimationLayerUniquePtr> {},
         }
     );
 
@@ -220,7 +220,7 @@ ComboMap ObjectParser::parseComboMap (const JSON& it) {
     return result;
 }
 
-std::vector <ImageAnimationLayerUniquePtr> ObjectParser::parseAnimationLayers (const JSON& it) {
+std::vector <ImageAnimationLayerUniquePtr> ObjectParser::parseAnimationLayers (const JSON& it, const Project& project) {
     if (!it.is_array ()) {
         return {};
     }
@@ -228,17 +228,17 @@ std::vector <ImageAnimationLayerUniquePtr> ObjectParser::parseAnimationLayers (c
     std::vector <ImageAnimationLayerUniquePtr> result = {};
 
     for (const auto& cur : it.items ()) {
-        result.push_back (parseAnimationLayer (cur.value ()));
+        result.push_back (parseAnimationLayer (cur.value (), project));
     }
 
     return result;
 }
 
-ImageAnimationLayerUniquePtr ObjectParser::parseAnimationLayer (const JSON& it) {
+ImageAnimationLayerUniquePtr ObjectParser::parseAnimationLayer (const JSON& it, const Project& project) {
     return std::make_unique <ImageAnimationLayer> (ImageAnimationLayer {
         .id = it.require ("id", "Animation layer must have an id"),
         .rate = it.require ("rate", "Animation layer must have a rate"),
-        .visible = it.require ("visible", "Animation layer must include visibility"),
+        .visible = it.user ("visible", project.properties, false),
         .blend = it.require ("blend", "Animation layer must include blend"),
         .animation = it.require ("animation", "Animation layer must include an animation"),
     });

+ 2 - 2
src/WallpaperEngine/Data/Parsers/ObjectParser.h

@@ -28,8 +28,8 @@ class ObjectParser {
     static ImageEffectPassOverrideUniquePtr parseEffectPass (const JSON& it, const Project& project);
     static TextureMap parseTextureMap (const JSON& it);
     static ComboMap parseComboMap (const JSON& it);
-    static std::vector <ImageAnimationLayerUniquePtr> parseAnimationLayers (const JSON& it);
-    static ImageAnimationLayerUniquePtr parseAnimationLayer (const JSON& it);
+    static std::vector <ImageAnimationLayerUniquePtr> parseAnimationLayers (const JSON& it, const Project& project);
+    static ImageAnimationLayerUniquePtr parseAnimationLayer (const JSON& it, const Project& project);
 
     // Particle parsing helpers
     static ParticleEmitter parseParticleEmitter (const JSON& it);