From 1e7cf2f5f9eb54a6b162473c3cbe066d50db19fc Mon Sep 17 00:00:00 2001 From: Jinny You Date: Thu, 9 May 2024 14:06:15 +0900 Subject: [PATCH] lottie/text: Support text tracking Text Tracking value("tr") is parsed and never used. Calculate text spacing size via the tracking offset. Issue: #2254 --- src/loaders/lottie/tvgLottieBuilder.cpp | 2 +- src/loaders/lottie/tvgLottieParser.cpp | 2 +- src/loaders/lottie/tvgLottieProperty.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index b76020fa..32d40a2b 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -606,7 +606,7 @@ static void _updateText(LottieGroup* parent, LottieObject** child, float frameNo p += glyph->len; //advance the cursor position horizontally - cursor.x += glyph->width + spacing; + cursor.x += glyph->width + spacing + doc.tracking; break; } } diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 782e0030..7a102783 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -183,7 +183,7 @@ void LottieParser::getValue(TextDocument& doc) else if (KEY_AS("f")) doc.name = getStringCopy(); else if (KEY_AS("t")) doc.text = getStringCopy(); else if (KEY_AS("j")) doc.justify = getInt(); - else if (KEY_AS("tr")) doc.tracking = getInt(); + else if (KEY_AS("tr")) doc.tracking = getFloat() * 0.1f; else if (KEY_AS("lh")) doc.height = getFloat(); else if (KEY_AS("ls")) doc.shift = getFloat(); else if (KEY_AS("fc")) getValue(doc.color); diff --git a/src/loaders/lottie/tvgLottieProperty.h b/src/loaders/lottie/tvgLottieProperty.h index 85720c8a..26a495eb 100644 --- a/src/loaders/lottie/tvgLottieProperty.h +++ b/src/loaders/lottie/tvgLottieProperty.h @@ -75,8 +75,8 @@ struct TextDocument } stroke; char* name = nullptr; float size; + float tracking; uint8_t justify; - uint8_t tracking; };