diff --git a/src/loaders/lottie/tvgLottieLoader.cpp b/src/loaders/lottie/tvgLottieLoader.cpp index 747c7d75..c4ed209e 100644 --- a/src/loaders/lottie/tvgLottieLoader.cpp +++ b/src/loaders/lottie/tvgLottieLoader.cpp @@ -284,10 +284,8 @@ bool LottieLoader::read() { if (!content || size == 0) return false; - if (!LoadModule::read()) return true; - - //the loading has been already completed in header() - if (comp) return true; + //the loading has been already completed + if (comp || !LoadModule::read()) return true; TaskScheduler::request(this); diff --git a/src/loaders/svg/tvgSvgLoader.cpp b/src/loaders/svg/tvgSvgLoader.cpp index 84163ba9..cc25deea 100644 --- a/src/loaders/svg/tvgSvgLoader.cpp +++ b/src/loaders/svg/tvgSvgLoader.cpp @@ -3732,10 +3732,8 @@ bool SvgLoader::read() { if (!content || size == 0) return false; - if (!LoadModule::read()) return true; - //the loading has been already completed in header() - if (root) return true; + if (root || !LoadModule::read()) return true; TaskScheduler::request(this); diff --git a/src/loaders/tvg/tvgTvgLoader.cpp b/src/loaders/tvg/tvgTvgLoader.cpp index a08872cb..5fb776c4 100644 --- a/src/loaders/tvg/tvgTvgLoader.cpp +++ b/src/loaders/tvg/tvgTvgLoader.cpp @@ -32,7 +32,7 @@ /************************************************************************/ -void TvgLoader::clear() +void TvgLoader::clear(bool all) { if (copy) free((char*)data); ptr = data = nullptr; @@ -41,6 +41,8 @@ void TvgLoader::clear() delete(interpreter); interpreter = nullptr; + + if (all) delete(root); } @@ -113,7 +115,7 @@ void TvgLoader::run(unsigned tid) root = interpreter->run(data, this->data + size); } - clear(); + clear(false); } @@ -213,7 +215,8 @@ bool TvgLoader::read() { if (!ptr || size == 0) return false; - if (!LoadModule::read()) return true; + //the loading has been already completed + if (root || !LoadModule::read()) return true; TaskScheduler::request(this); @@ -224,5 +227,7 @@ bool TvgLoader::read() Paint* TvgLoader::paint() { this->done(); - return root; + auto ret = root; + root = nullptr; + return ret; } diff --git a/src/loaders/tvg/tvgTvgLoader.h b/src/loaders/tvg/tvgTvgLoader.h index a8c24d11..d267d44b 100644 --- a/src/loaders/tvg/tvgTvgLoader.h +++ b/src/loaders/tvg/tvgTvgLoader.h @@ -55,7 +55,7 @@ public: private: bool readHeader(); void run(unsigned tid) override; - void clear(); + void clear(bool all = true); }; #endif //_TVG_TVG_LOADER_H_