diff --git a/src/loaders/lottie/tvgLottieLoader.cpp b/src/loaders/lottie/tvgLottieLoader.cpp index 235b302b..ba4165ca 100644 --- a/src/loaders/lottie/tvgLottieLoader.cpp +++ b/src/loaders/lottie/tvgLottieLoader.cpp @@ -42,6 +42,7 @@ void LottieLoader::run(unsigned tid) comp = parser.comp; builder->build(comp); } + rebuild = false; } @@ -294,14 +295,14 @@ bool LottieLoader::override(const char* slot) if (idx < 1) success = false; free(temp); - overriden = success; - + rebuild = overriden = success; //reset slots } else if (overriden) { for (auto s = comp->slots.begin(); s < comp->slots.end(); ++s) { (*s)->reset(); } overriden = false; + rebuild = true; } return success; } @@ -361,6 +362,8 @@ float LottieLoader::duration() void LottieLoader::sync() { this->done(); + + if (rebuild) run(0); } diff --git a/src/loaders/lottie/tvgLottieLoader.h b/src/loaders/lottie/tvgLottieLoader.h index abffd1b3..27a6c883 100644 --- a/src/loaders/lottie/tvgLottieLoader.h +++ b/src/loaders/lottie/tvgLottieLoader.h @@ -44,7 +44,8 @@ public: char* dirName = nullptr; //base resource directory bool copy = false; //"content" is owned by this loader - bool overriden = false; //overridden properties with slots. + bool overriden = false; //overridden properties with slots + bool rebuild = false; //require building the lottie scene LottieLoader(); ~LottieLoader(); diff --git a/src/renderer/tvgPicture.cpp b/src/renderer/tvgPicture.cpp index cfa1bccd..5bd55a3f 100644 --- a/src/renderer/tvgPicture.cpp +++ b/src/renderer/tvgPicture.cpp @@ -29,7 +29,9 @@ RenderUpdateFlag Picture::Impl::load() { if (loader) { - if (!paint) { + if (paint) { + loader->sync(); + } else { paint = loader->paint(); if (paint) { if (w != loader->w || h != loader->h) { @@ -42,8 +44,7 @@ RenderUpdateFlag Picture::Impl::load() } return RenderUpdateFlag::None; } - } else loader->sync(); - + } if (!surface) { if ((surface = loader->bitmap())) { return RenderUpdateFlag::Image;