diff --git a/src/loaders/lottie/meson.build b/src/loaders/lottie/meson.build index cfa35656..4504c8a6 100644 --- a/src/loaders/lottie/meson.build +++ b/src/loaders/lottie/meson.build @@ -4,6 +4,7 @@ endif source_file = [ 'tvgLottieBuilder.h', + 'tvgLottieCommon.h', 'tvgLottieExpressions.h', 'tvgLottieInterpolator.h', 'tvgLottieLoader.h', diff --git a/src/loaders/lottie/tvgLottieCommon.h b/src/loaders/lottie/tvgLottieCommon.h new file mode 100644 index 00000000..5cdbdc3e --- /dev/null +++ b/src/loaders/lottie/tvgLottieCommon.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2024 the ThorVG project. All rights reserved. + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef _TVG_LOTTIE_COMMON_ +#define _TVG_LOTTIE_COMMON_ + +#include +#include "tvgCommon.h" +#include "tvgArray.h" + +struct PathSet +{ + Point* pts = nullptr; + PathCommand* cmds = nullptr; + uint16_t ptsCnt = 0; + uint16_t cmdsCnt = 0; +}; + + +struct RGB24 +{ + int32_t rgb[3]; +}; + + +struct ColorStop +{ + Fill::ColorStop* data = nullptr; + Array* input = nullptr; +}; + + +struct TextDocument +{ + char* text = nullptr; + float height; + float shift; + RGB24 color; + struct { + Point pos; + Point size; + } bbox; + struct { + RGB24 color; + float width; + bool render = false; + } stroke; + char* name = nullptr; + float size; + float tracking = 0.0f; + uint8_t justify; +}; + + +static inline int32_t REMAP255(float val) +{ + return (int32_t)nearbyintf(val * 255.0f); +} + + +static inline RGB24 operator-(const RGB24& lhs, const RGB24& rhs) +{ + return {lhs.rgb[0] - rhs.rgb[0], lhs.rgb[1] - rhs.rgb[1], lhs.rgb[2] - rhs.rgb[2]}; +} + + +static inline RGB24 operator+(const RGB24& lhs, const RGB24& rhs) +{ + return {lhs.rgb[0] + rhs.rgb[0], lhs.rgb[1] + rhs.rgb[1], lhs.rgb[2] + rhs.rgb[2]}; +} + + +static inline RGB24 operator*(const RGB24& lhs, float rhs) +{ + return {(int32_t)nearbyintf(lhs.rgb[0] * rhs), (int32_t)nearbyintf(lhs.rgb[1] * rhs), (int32_t)nearbyintf(lhs.rgb[2] * rhs)}; +} + + +#endif //_TVG_LOTTIE_COMMON_ diff --git a/src/loaders/lottie/tvgLottieExpressions.h b/src/loaders/lottie/tvgLottieExpressions.h index 3338d9c8..5c97e6b8 100644 --- a/src/loaders/lottie/tvgLottieExpressions.h +++ b/src/loaders/lottie/tvgLottieExpressions.h @@ -24,11 +24,11 @@ #define _TVG_LOTTIE_EXPRESSIONS_H_ #include "tvgCommon.h" +#include "tvgLottieCommon.h" struct LottieExpression; struct LottieComposition; struct LottieLayer; -struct RGB24; #ifdef THORVG_LOTTIE_EXPRESSIONS_SUPPORT diff --git a/src/loaders/lottie/tvgLottieParser.cpp b/src/loaders/lottie/tvgLottieParser.cpp index 2328c09a..dc5743b4 100644 --- a/src/loaders/lottie/tvgLottieParser.cpp +++ b/src/loaders/lottie/tvgLottieParser.cpp @@ -340,7 +340,7 @@ void LottieParser::getValue(RGB24& color) while (nextArrayValue()) { auto val = getFloat(); - if (i < 3) color.rgb[i++] = (int32_t)nearbyint(val * 255.0f); + if (i < 3) color.rgb[i++] = REMAP255(val); } //TODO: color filter? diff --git a/src/loaders/lottie/tvgLottieProperty.h b/src/loaders/lottie/tvgLottieProperty.h index c89614dd..6aad929f 100644 --- a/src/loaders/lottie/tvgLottieProperty.h +++ b/src/loaders/lottie/tvgLottieProperty.h @@ -24,9 +24,8 @@ #define _TVG_LOTTIE_PROPERTY_H_ #include -#include "tvgCommon.h" -#include "tvgArray.h" #include "tvgMath.h" +#include "tvgLottieCommon.h" #include "tvgLottieInterpolator.h" #include "tvgLottieExpressions.h" @@ -37,68 +36,6 @@ struct LottieLayer; struct LottieObject; -struct PathSet -{ - Point* pts = nullptr; - PathCommand* cmds = nullptr; - uint16_t ptsCnt = 0; - uint16_t cmdsCnt = 0; -}; - - -struct RGB24 -{ - int32_t rgb[3]; -}; - - -struct ColorStop -{ - Fill::ColorStop* data = nullptr; - Array* input = nullptr; -}; - - -struct TextDocument -{ - char* text = nullptr; - float height; - float shift; - RGB24 color; - struct { - Point pos; - Point size; - } bbox; - struct { - RGB24 color; - float width; - bool render = false; - } stroke; - char* name = nullptr; - float size; - float tracking = 0.0f; - uint8_t justify; -}; - - -static inline RGB24 operator-(const RGB24& lhs, const RGB24& rhs) -{ - return {lhs.rgb[0] - rhs.rgb[0], lhs.rgb[1] - rhs.rgb[1], lhs.rgb[2] - rhs.rgb[2]}; -} - - -static inline RGB24 operator+(const RGB24& lhs, const RGB24& rhs) -{ - return {lhs.rgb[0] + rhs.rgb[0], lhs.rgb[1] + rhs.rgb[1], lhs.rgb[2] + rhs.rgb[2]}; -} - - -static inline RGB24 operator*(const RGB24& lhs, float rhs) -{ - return {(int32_t)nearbyint(lhs.rgb[0] * rhs), (int32_t)nearbyint(lhs.rgb[1] * rhs), (int32_t)nearbyint(lhs.rgb[2] * rhs)}; -} - - template struct LottieScalarFrame {