diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index 01ad2712..5a8ccb04 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -1042,13 +1042,14 @@ void LottieBuilder::updateText(LottieLayer* layer, float frameNo) auto& textGroupMatrix = textGroup->transform(); auto shape = text->pooling(); shape->reset(); + ARRAY_FOREACH(p, glyph->children) { - auto group = static_cast(*p); - ARRAY_FOREACH(p, group->children) { - if (static_cast(*p)->pathset(frameNo, SHAPE(shape)->rs.path, nullptr, tween, exps)) { - PAINT(shape)->update(RenderUpdateFlag::Path); + //Either group of a single path + if ((*p)->type == LottieObject::Group) { + ARRAY_FOREACH(p2, static_cast(*p)->children) { + static_cast(*p2)->pathset(frameNo, SHAPE(shape)->rs.path, nullptr, tween, exps); } - } + } else static_cast(*p)->pathset(frameNo, SHAPE(shape)->rs.path, nullptr, tween, exps); } shape->fill(doc.color.rgb[0], doc.color.rgb[1], doc.color.rgb[2]); shape->translate(cursor.x - textGroupMatrix.e13, cursor.y - textGroupMatrix.e23); diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 86947268..367de63d 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -1079,9 +1079,12 @@ LottieObject* LottieParser::parseGroup() while (nextArrayValue()) parseObject(group->children); } else skip(); } - if (group->children.empty()) { + + if (group->children.count == 1) { + auto child = group->children.first(); + group->children.clear(); delete(group); - return nullptr; + return child; } group->prepare();