From 6abf74530d19ca8b2bec15e1fc30ee50369a1931 Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 9 May 2019 13:49:29 +0300 Subject: [PATCH] QtLottie: Check each layer for visibility by frame. --- Telegram/SourceFiles/lottie/lottie_animation.cpp | 2 +- Telegram/ThirdParty/qtlottie | 2 +- .../qtlottie_helper/QtBodymovin/private/bmbase_p.h | 2 +- .../QtBodymovin/private/bmbasictransform_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmellipse_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmfill_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmfilleffect_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmfreeformshape_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmgfill_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmgroup_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmlayer_p.h | 6 +++--- .../qtlottie_helper/QtBodymovin/private/bmnulllayer_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmpathtrimmer_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmprecomplayer_p.h | 3 +-- .../qtlottie_helper/QtBodymovin/private/bmrect_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmrepeater_p.h | 2 +- .../QtBodymovin/private/bmrepeatertransform_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmround_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmshapelayer_p.h | 2 +- .../QtBodymovin/private/bmshapetransform_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmstroke_p.h | 2 +- .../qtlottie_helper/QtBodymovin/private/bmtrimpath_p.h | 2 +- 22 files changed, 24 insertions(+), 25 deletions(-) diff --git a/Telegram/SourceFiles/lottie/lottie_animation.cpp b/Telegram/SourceFiles/lottie/lottie_animation.cpp index 1088782984..3e5b26fac1 100644 --- a/Telegram/SourceFiles/lottie/lottie_animation.cpp +++ b/Telegram/SourceFiles/lottie/lottie_animation.cpp @@ -96,7 +96,7 @@ QImage Animation::frame(crl::time now) const { LottieRasterRenderer renderer(&p); for (const auto element : tree.children()) { if (element->active(frame)) { - element->render(renderer); + element->render(renderer, frame); } } } diff --git a/Telegram/ThirdParty/qtlottie b/Telegram/ThirdParty/qtlottie index ebd336ec40..9ab16cc8fd 160000 --- a/Telegram/ThirdParty/qtlottie +++ b/Telegram/ThirdParty/qtlottie @@ -1 +1 @@ -Subproject commit ebd336ec4022c80274101239f13d1f847c759ce5 +Subproject commit 9ab16cc8fda724421f13656a2f0821abdeac30c7 diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmbase_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmbase_p.h index c7cc354d3a..8019dbd0c0 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmbase_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmbase_p.h @@ -88,7 +88,7 @@ public: virtual BMBase *findChild(const QString &childName); virtual void updateProperties(int frame); - virtual void render(LottieRenderer &renderer) const; + virtual void render(LottieRenderer &renderer, int frame) const; virtual void resolveAssets(const std::function &resolver); diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmbasictransform_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmbasictransform_p.h index a42e646d77..f8970d178c 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmbasictransform_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmbasictransform_p.h @@ -63,7 +63,7 @@ public: void construct(const QJsonObject &definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; QPointF anchorPoint() const; virtual QPointF position() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmellipse_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmellipse_p.h index a3d880999a..cf49898a5f 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmellipse_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmellipse_p.h @@ -69,7 +69,7 @@ public: void construct(const QJsonObject &definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; bool acceptsTrim() const override; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfill_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfill_p.h index 060a2f0bbe..64e1b8e198 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfill_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfill_p.h @@ -60,7 +60,7 @@ public: void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; QColor color() const; qreal opacity() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfilleffect_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfilleffect_p.h index 43888bb9fd..38dee17f19 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfilleffect_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfilleffect_p.h @@ -62,7 +62,7 @@ public: void construct(const QJsonObject &definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; QColor color() const; qreal opacity() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfreeformshape_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfreeformshape_p.h index c27e0c6308..b8cba5ca51 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfreeformshape_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmfreeformshape_p.h @@ -65,7 +65,7 @@ public: void construct(const QJsonObject &definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; bool acceptsTrim() const override; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmgfill_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmgfill_p.h index 87fa0f5888..36f539bca3 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmgfill_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmgfill_p.h @@ -62,7 +62,7 @@ public: BMBase *clone() const override; void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; QGradient *value() const; QGradient::Type gradientType() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmgroup_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmgroup_p.h index 1683a1d401..eb25598fea 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmgroup_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmgroup_p.h @@ -65,7 +65,7 @@ public: void construct(const QJsonObject& definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; bool acceptsTrim() const override; void applyTrim(const BMTrimPath &trimmer) override; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmlayer_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmlayer_p.h index dfe89ef5fd..c8121287aa 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmlayer_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmlayer_p.h @@ -65,7 +65,7 @@ public: void parse(const QJsonObject &definition) override; void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; BMBase *findChild(const QString &childName) override; @@ -75,10 +75,10 @@ public: int layerId() const; BMBasicTransform *transform() const; - void renderFullTransform(LottieRenderer &renderer) const; + void renderFullTransform(LottieRenderer &renderer, int frame) const; protected: - void renderEffects(LottieRenderer &renderer) const; + void renderEffects(LottieRenderer &renderer, int frame) const; virtual BMLayer *resolveLinkedLayer(); virtual BMLayer *linkedLayer() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmnulllayer_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmnulllayer_p.h index 7343ed8f83..932925032e 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmnulllayer_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmnulllayer_p.h @@ -63,7 +63,7 @@ public: BMBase *clone() const override; void updateProperties(int frame) override; - void render(LottieRenderer &render) const override; + void render(LottieRenderer &render, int frame) const override; }; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmpathtrimmer_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmpathtrimmer_p.h index c0ab90bf9d..e507fb6d04 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmpathtrimmer_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmpathtrimmer_p.h @@ -63,7 +63,7 @@ public: void applyTrim(BMShape *shape); void updateProperties(int frame); - void render(LottieRenderer &renderer) const; + void render(LottieRenderer &renderer, int frame) const; private: BMBase *m_root = nullptr; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmprecomplayer_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmprecomplayer_p.h index 1d6b368363..41d28f45de 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmprecomplayer_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmprecomplayer_p.h @@ -63,7 +63,7 @@ public: BMBase *clone() const override; void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; void resolveAssets(const std::function &resolver) override; QString refId() const; @@ -74,7 +74,6 @@ protected: private: QString m_refId; BMBase *m_layers = nullptr; - int m_layersFrame = 0; bool m_resolving = false; }; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrect_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrect_p.h index 924d82ffa9..fa75eed3d4 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrect_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrect_p.h @@ -68,7 +68,7 @@ public: bool setProperty(BMLiteral::PropertyType propertyType, QVariant value) override; void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; bool acceptsTrim() const override; QPointF position() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrepeater_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrepeater_p.h index de4f9eb260..151bdc6091 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrepeater_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrepeater_p.h @@ -62,7 +62,7 @@ public: void construct(const QJsonObject& definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; int copies() const; qreal offset() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrepeatertransform_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrepeatertransform_p.h index 259b051837..86147a21e4 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrepeatertransform_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmrepeatertransform_p.h @@ -59,7 +59,7 @@ public: void construct(const QJsonObject &definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; qreal startOpacity() const; qreal endOpacity() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmround_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmround_p.h index 9a66b35060..fc499ef474 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmround_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmround_p.h @@ -68,7 +68,7 @@ public: void construct(const QJsonObject &definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; bool acceptsTrim() const override; QPointF position() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmshapelayer_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmshapelayer_p.h index babd782ec3..c69cc317a8 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmshapelayer_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmshapelayer_p.h @@ -63,7 +63,7 @@ public: BMBase *clone() const override; void updateProperties(int frame) override; - void render(LottieRenderer &render) const override; + void render(LottieRenderer &render, int frame) const override; protected: QList m_maskProperties; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmshapetransform_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmshapetransform_p.h index f73f639d97..ca633323ea 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmshapetransform_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmshapetransform_p.h @@ -62,7 +62,7 @@ public: void construct(const QJsonObject &definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; qreal skew() const; qreal skewAxis() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmstroke_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmstroke_p.h index 633b68af96..3ebaef9e86 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmstroke_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmstroke_p.h @@ -59,7 +59,7 @@ public: BMBase *clone() const override; void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; QPen pen() const; qreal opacity() const; diff --git a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmtrimpath_p.h b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmtrimpath_p.h index 4f4ff42a4e..faaa8dfc0e 100644 --- a/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmtrimpath_p.h +++ b/Telegram/ThirdParty/qtlottie_helper/QtBodymovin/private/bmtrimpath_p.h @@ -63,7 +63,7 @@ public: void construct(const QJsonObject &definition); void updateProperties(int frame) override; - void render(LottieRenderer &renderer) const override; + void render(LottieRenderer &renderer, int frame) const override; bool acceptsTrim() const override; void applyTrim(const BMTrimPath &trimmer) override;