From cba2b0f72450e7f751bac710155c5a3a0b615709 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Wed, 20 Sep 2023 11:38:52 +0900 Subject: [PATCH] lottie/builder: correct a parenting error. There is a missing case where a layer didn't parent properly, especially when the parent is the matte target. --- src/loaders/lottie/tvgLottieBuilder.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index bf97150c..54a2c36a 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -869,12 +869,20 @@ static void _bulidHierarchy(LottieGroup* parent, LottieLayer* child) { if (child->pid == -1) return; + if (child->matte.target && child->pid == child->matte.target->id) { + child->parent = child->matte.target; + return; + } + for (auto p = parent->children.data; p < parent->children.end(); ++p) { auto parent = static_cast(*p); if (child == parent) continue; if (child->pid == parent->id) { child->parent = parent; - parent->statical &= child->statical; + break; + } + if (parent->matte.target && parent->matte.target->id == child->pid) { + child->parent = parent->matte.target; break; } } @@ -897,8 +905,7 @@ static bool _buildPrecomp(LottieComposition* comp, LottieGroup* parent) //precomp referencing if (child->matte.target->refId) _buildReference(comp, child->matte.target); } - - if (child->pid != -1) _bulidHierarchy(parent, child); + _bulidHierarchy(parent, child); } return true; }