diff --git a/inc/thorvg.h b/inc/thorvg.h index 561faacb..9bce0e57 100644 --- a/inc/thorvg.h +++ b/inc/thorvg.h @@ -358,7 +358,7 @@ public: * * @since 0.4 */ - Matrix transform() noexcept; + Matrix& transform() noexcept; /** * @brief Sets the opacity of the object. diff --git a/src/loaders/lottie/tvgLottieBuilder.cpp b/src/loaders/lottie/tvgLottieBuilder.cpp index 8b0de583..9415a2a7 100644 --- a/src/loaders/lottie/tvgLottieBuilder.cpp +++ b/src/loaders/lottie/tvgLottieBuilder.cpp @@ -188,7 +188,7 @@ void LottieBuilder::updateTransform(LottieGroup* parent, LottieObject** child, f Matrix matrix; if (!_updateTransform(transform, frameNo, false, matrix, opacity, exps)) return; - ctx->propagator->transform(PP(ctx->propagator)->transform() * matrix); + ctx->propagator->transform(ctx->propagator->transform() * matrix); ctx->propagator->opacity(MULTIPLY(opacity, PP(ctx->propagator)->opacity)); //FIXME: preserve the stroke width. too workaround, need a better design. @@ -356,7 +356,7 @@ static void _repeat(LottieGroup* parent, Shape* path, RenderContext* ctx) Matrix inv; inverse(&repeater->transform, &inv); - shape->transform(m * (inv * PP(shape)->transform())); + shape->transform(m * (inv * shape->transform())); shapes.push(shape); } } @@ -839,7 +839,7 @@ void LottieBuilder::updateRepeater(TVG_UNUSED LottieGroup* parent, LottieObject* RenderRepeater r; r.cnt = static_cast(repeater->copies(frameNo, exps)); - r.transform = PP(ctx->propagator)->transform(); + r.transform = ctx->propagator->transform(); r.offset = repeater->offset(frameNo, exps); r.position = repeater->position(frameNo, exps); r.anchor = repeater->anchor(frameNo, exps); @@ -1072,7 +1072,7 @@ void LottieBuilder::updateText(LottieLayer* layer, float frameNo) else if ((*s)->based == LottieTextRange::Based::Lines) basedIdx = line; if (basedIdx < start || basedIdx >= end) continue; - auto matrix = shape->transform(); + auto& matrix = shape->transform(); shape->opacity((*s)->style.opacity(frameNo)); @@ -1087,8 +1087,6 @@ void LottieBuilder::updateText(LottieLayer* layer, float frameNo) auto position = (*s)->style.position(frameNo); translate(&matrix, position.x, position.y); - shape->transform(matrix); - if (doc.stroke.render) { auto strokeColor = (*s)->style.strokeColor(frameNo); shape->strokeWidth((*s)->style.strokeWidth(frameNo) / scale); diff --git a/src/renderer/tvgPaint.cpp b/src/renderer/tvgPaint.cpp index ca4c0977..abb65d83 100644 --- a/src/renderer/tvgPaint.cpp +++ b/src/renderer/tvgPaint.cpp @@ -86,7 +86,7 @@ static Result _compFastTrack(RenderMethod* renderer, Paint* cmpTarget, const Mat if (ptsCnt == 0) return Result::InvalidArguments; if (ptsCnt != 4) return Result::InsufficientCondition; - auto& rm = P(cmpTarget)->transform(); + auto& rm = cmpTarget->transform(); //No rotation and no skewing, still can try out clipping the rect region. auto tryClip = false; @@ -423,7 +423,7 @@ Result Paint::transform(const Matrix& m) noexcept } -Matrix Paint::transform() noexcept +Matrix& Paint::transform() noexcept { return pImpl->transform(); }