From d9326921fad6fc608477bd1c5f4c78dd81408993 Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Tue, 18 Jun 2024 16:54:19 +0200 Subject: [PATCH] lottie: fix repeater order Assigning numbers 1 or 2 to a bool always resulted in true. Now fixed and repeated shapes are drawn in the proper order. If the repeater had no elements, iterating shapes from the end would result in a segf. This issue is now fixed. --- src/loaders/lottie/tvgLottieBuilder.cpp | 2 +- src/loaders/lottie/tvgLottieParser.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index 9dd8a6fa..8661dd68 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -437,7 +437,7 @@ static void _repeat(LottieGroup* parent, unique_ptr path, RenderContext* parent->scene->push(cast(*shape)); propagators.push(*shape); } - } else { + } else if (!shapes.empty()) { for (auto shape = shapes.end() - 1; shape >= shapes.begin(); --shape) { parent->scene->push(cast(*shape)); propagators.push(*shape); diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 2920f786..d3598c20 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -828,7 +828,7 @@ LottieRepeater* LottieParser::parseRepeater() if (parseCommon(repeater, key)) continue; else if (KEY_AS("c")) parseProperty(repeater->copies); else if (KEY_AS("o")) parseProperty(repeater->offset); - else if (KEY_AS("m")) repeater->inorder = getInt(); + else if (KEY_AS("m")) repeater->inorder = getInt() == 2; else if (KEY_AS("tr")) { enterObject();