QtLottie: Enforce BM nodes parent.

This commit is contained in:
John Preston 2019-05-14 16:37:22 +03:00
parent 67739ae3fd
commit fbc206ebee
27 changed files with 114 additions and 113 deletions

@ -1 +1 @@
Subproject commit 26d3e9ff5f354a20e72b90e2a3d4d57bd73baa8c
Subproject commit 2a529ab07bd105e0cac1a58ad5cb77f2fdc8f20d

View File

@ -50,17 +50,17 @@ class LottieRenderer;
class BODYMOVIN_EXPORT BMAsset : public BMBase
{
public:
BMAsset() = default;
explicit BMAsset (const BMAsset &other) = default;
BMAsset(BMBase *parent);
BMAsset(BMBase *parent, const BMAsset &other);
~BMAsset() = default;
BMAsset *clone() const override;
BMAsset *clone(BMBase *parent) const override;
static BMAsset *construct(QJsonObject definition);
static BMAsset *construct(BMBase *parent, QJsonObject definition);
void parse(const QJsonObject &definition) override;
void resolveAssets(const std::function<BMAsset*(QString)> &resolver) override;
void resolveAssets(const std::function<BMAsset*(BMBase*, QString)> &resolver) override;
QString id() const;

View File

@ -59,11 +59,12 @@ class BMScene;
class BODYMOVIN_EXPORT BMBase
{
public:
BMBase() = default;
explicit BMBase(const BMBase &other);
BMBase(BMBase *parent);
BMBase(BMBase *parent, const BMBase &other);
BMBase(const BMBase &other) = delete;
virtual ~BMBase();
virtual BMBase *clone() const;
virtual BMBase *clone(BMBase *parent) const;
virtual bool setProperty(BMLiteral::PropertyType propertyType, QVariant value);
@ -80,7 +81,6 @@ public:
bool hidden() const;
inline BMBase *parent() const { return m_parent; }
void setParent(BMBase *parent);
const QList<BMBase *> &children() const { return m_children; }
void prependChild(BMBase *child);
@ -91,7 +91,7 @@ public:
virtual void updateProperties(int frame);
virtual void render(LottieRenderer &renderer, int frame) const;
virtual void resolveAssets(const std::function<BMAsset*(QString)> &resolver);
virtual void resolveAssets(const std::function<BMAsset*(BMBase*, QString)> &resolver);
protected:
virtual BMScene *resolveTopRoot() const;
@ -110,7 +110,7 @@ protected:
friend class BMRenderer;
private:
BMBase *m_parent = nullptr;
BMBase * const m_parent = nullptr;
QList<BMBase *> m_children;
// Handle to the topmost element on which this element resides

View File

@ -54,13 +54,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMBasicTransform : public BMShape
{
public:
BMBasicTransform() = default;
explicit BMBasicTransform(const BMBasicTransform &other);
BMBasicTransform(const QJsonObject &definition, BMBase *parent = nullptr);
BMBasicTransform(BMBase *parent);
BMBasicTransform(BMBase *parent, const BMBasicTransform &other);
BMBasicTransform(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -60,13 +60,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMEllipse : public BMShape
{
public:
BMEllipse() = default;
explicit BMEllipse(const BMEllipse &other);
BMEllipse(const QJsonObject &definition, BMBase *parent = nullptr);
BMEllipse(BMBase *parent);
BMEllipse(BMBase *parent, const BMEllipse &other);
BMEllipse(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -52,11 +52,11 @@ QT_BEGIN_NAMESPACE
class BODYMOVIN_EXPORT BMFill : public BMShape
{
public:
BMFill() = default;
explicit BMFill(const BMFill &other);
BMFill(const QJsonObject &definition, BMBase *parent = nullptr);
BMFill(BMBase *parent);
BMFill(BMBase *parent, const BMFill &other);
BMFill(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void updateProperties(int frame) override;

View File

@ -54,12 +54,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMFillEffect : public BMBase
{
public:
BMFillEffect() = default;
explicit BMFillEffect(const BMFillEffect &other);
BMFillEffect(BMBase *parent);
BMFillEffect(BMBase *parent, const BMFillEffect &other);
BMFillEffect(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -56,13 +56,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMFreeFormShape : public BMShape
{
public:
BMFreeFormShape();
explicit BMFreeFormShape(const BMFreeFormShape &other);
BMFreeFormShape(const QJsonObject &definition, BMBase *parent = nullptr);
BMFreeFormShape(BMBase *parent);
BMFreeFormShape(BMBase *parent, const BMFreeFormShape &other);
BMFreeFormShape(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -54,12 +54,12 @@ QT_BEGIN_NAMESPACE
class BODYMOVIN_EXPORT BMGFill : public BMShape
{
public:
BMGFill() = default;
explicit BMGFill(const BMGFill &other);
BMGFill(const QJsonObject &definition, BMBase *parent = nullptr);
BMGFill(BMBase *parent);
BMGFill(BMBase *parent, const BMGFill &other);
BMGFill(BMBase *parent, const QJsonObject &definition);
~BMGFill() override;
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -57,12 +57,13 @@ class BMPathTrimmer;
class BODYMOVIN_EXPORT BMGroup : public BMShape
{
public:
BMGroup() = default;
BMGroup(const QJsonObject &definition, BMBase *parent = nullptr);
BMGroup(BMBase *parent);
BMGroup(BMBase *parent, const BMGroup &other);
BMGroup(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject& definition);
void parse(const QJsonObject& definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -42,6 +42,7 @@
//
#include <QtBodymovin/private/bmbase_p.h>
#include <QtBodymovin/private/bmbasictransform_p.h>
QT_BEGIN_NAMESPACE
@ -53,15 +54,15 @@ class BODYMOVIN_EXPORT BMLayer : public BMBase
public:
enum MatteClipMode {NoClip, Alpha, InvertedAlpha, Luminence, InvertedLuminence};
BMLayer() = default;
explicit BMLayer (const BMLayer &other);
BMLayer(BMBase *parent);
BMLayer(BMBase *parent, const BMLayer &other);
~BMLayer() override;
static BMLayer *construct(QJsonObject definition);
static BMLayer *construct(BMBase *parent, QJsonObject definition);
bool active(int frame) const override;
void parse(const QJsonObject &definition) override;
void parse(const QJsonObject &definition) override;
void updateProperties(int frame) override;
@ -72,7 +73,6 @@ public:
MatteClipMode clipMode() const;
int layerId() const;
BMBasicTransform *transform() const;
void renderFullTransform(LottieRenderer &renderer, int frame) const;
protected:
@ -89,7 +89,7 @@ protected:
bool m_3dLayer = false;
BMBase *m_effects = nullptr;
qreal m_stretch;
BMBasicTransform *m_layerTransform = nullptr;
BMBasicTransform m_layerTransform;
BMMasks *m_masks = nullptr;
int m_parentLayer = 0;

View File

@ -56,7 +56,9 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMMasks : public BMBase
{
public:
BMBase *clone() const override;
BMMasks(BMBase *parent);
BMMasks(BMBase *parent, const BMMasks &other);
BMBase *clone(BMBase *parent) const override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -56,13 +56,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMMaskShape : public BMShape
{
public:
BMMaskShape();
explicit BMMaskShape(const BMMaskShape &other);
BMMaskShape(const QJsonObject &definition, BMBase *parent = nullptr);
BMMaskShape(BMBase *parent);
BMMaskShape(BMBase *parent, const BMMaskShape &other);
BMMaskShape(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -55,12 +55,12 @@ class BMBasicTransform;
class BODYMOVIN_EXPORT BMNullLayer final : public BMLayer
{
public:
BMNullLayer() = default;
explicit BMNullLayer(const BMNullLayer &other);
BMNullLayer(const QJsonObject &definition);
BMNullLayer(BMBase *parent);
BMNullLayer(BMBase *parent, const BMNullLayer &other);
BMNullLayer(BMBase *parent, const QJsonObject &definition);
~BMNullLayer() override;
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void render(LottieRenderer &render, int frame) const override;

View File

@ -50,12 +50,12 @@ class LottieRenderer;
class BODYMOVIN_EXPORT BMPreCompAsset : public BMAsset
{
public:
BMPreCompAsset() = default;
explicit BMPreCompAsset (const BMPreCompAsset &other) = default;
BMPreCompAsset(const QJsonObject &definition);
BMPreCompAsset(BMBase *parent);
BMPreCompAsset(BMBase *parent, const BMPreCompAsset &other);
BMPreCompAsset(BMBase *parent, const QJsonObject &definition);
~BMPreCompAsset() = default;
BMPreCompAsset *clone() const override;
BMPreCompAsset *clone(BMBase *parent) const override;
};
QT_END_NAMESPACE

View File

@ -55,16 +55,16 @@ class BMBasicTransform;
class BODYMOVIN_EXPORT BMPreCompLayer final : public BMLayer
{
public:
BMPreCompLayer() = default;
explicit BMPreCompLayer(const BMPreCompLayer &other);
BMPreCompLayer(const QJsonObject &definition);
BMPreCompLayer(BMBase *parent);
BMPreCompLayer(BMBase *parent, const BMPreCompLayer &other);
BMPreCompLayer(BMBase *parent, const QJsonObject &definition);
~BMPreCompLayer() override;
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;
void resolveAssets(const std::function<BMAsset*(QString)> &resolver) override;
void resolveAssets(const std::function<BMAsset*(BMBase*, QString)> &resolver) override;
QString refId() const;

View File

@ -51,7 +51,6 @@
#include <QDebug>
#include <QtBodymovin/private/bmconstants_p.h>
#include <QtBodymovin/private/bmlayer_p.h>
#include <QtBodymovin/private/beziereasing_p.h>
QT_BEGIN_NAMESPACE

View File

@ -57,13 +57,11 @@ QT_BEGIN_NAMESPACE
class BODYMOVIN_EXPORT BMRect : public BMShape
{
public:
BMRect() = default;
explicit BMRect(const BMRect &other);
BMRect(const QJsonObject &definition, BMBase *parent = nullptr);
BMRect(BMBase *parent);
BMRect(BMBase *parent, const BMRect &other);
BMRect(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
void construct(const QJsonObject &definition);
BMBase *clone(BMBase *parent) const override;
bool setProperty(BMLiteral::PropertyType propertyType, QVariant value) override;

View File

@ -53,13 +53,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMRepeater : public BMShape
{
public:
BMRepeater() = default;
explicit BMRepeater(const BMRepeater &other);
BMRepeater(const QJsonObject &definition, BMBase *parent = nullptr);
BMRepeater(BMBase *parent);
BMRepeater(BMBase *parent, const BMRepeater &other);
BMRepeater(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject& definition);
void parse(const QJsonObject& definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -50,13 +50,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMRepeaterTransform : public BMBasicTransform
{
public:
BMRepeaterTransform() = default;
explicit BMRepeaterTransform(const BMRepeaterTransform &other);
BMRepeaterTransform(const QJsonObject &definition, BMBase *parent);
BMRepeaterTransform(BMBase *parent);
BMRepeaterTransform(BMBase *parent, const BMRepeaterTransform &other);
BMRepeaterTransform(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -59,13 +59,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMRound : public BMShape
{
public:
BMRound() = default;
explicit BMRound(const BMRound &other);
BMRound(const QJsonObject &definition, BMBase *parent = nullptr);
BMRound(BMBase *parent);
BMRound(BMBase *parent, const BMRound &other);
BMRound(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -56,13 +56,12 @@ class BMAsset;
class BODYMOVIN_EXPORT BMScene : public BMBase
{
public:
BMScene();
BMScene(const BMScene &other) = delete;
BMScene &operator=(const BMScene &other) = delete;
explicit BMScene(const QJsonObject &definition);
virtual ~BMScene();
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -70,12 +70,12 @@ class BMTrimPath;
class BODYMOVIN_EXPORT BMShape : public BMBase
{
public:
BMShape() = default;
explicit BMShape(const BMShape &other);
BMShape(BMBase *parent);
BMShape(BMBase *parent, const BMShape &other);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
static BMShape *construct(QJsonObject definition, BMBase *parent = nullptr);
static BMShape *construct(BMBase *parent, QJsonObject definition);
virtual const QPainterPath &path() const;
virtual bool acceptsTrim() const;

View File

@ -55,12 +55,12 @@ class BMBasicTransform;
class BODYMOVIN_EXPORT BMShapeLayer final : public BMLayer
{
public:
BMShapeLayer() = default;
explicit BMShapeLayer(const BMShapeLayer &other);
BMShapeLayer(const QJsonObject &definition);
BMShapeLayer(BMBase *parent);
BMShapeLayer(BMBase *parent, const BMShapeLayer &other);
BMShapeLayer(BMBase *parent, const QJsonObject &definition);
~BMShapeLayer() override;
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void updateProperties(int frame) override;
void render(LottieRenderer &render, int frame) const override;

View File

@ -54,12 +54,13 @@ class QJsonObject;
class BODYMOVIN_EXPORT BMShapeTransform : public BMBasicTransform
{
public:
explicit BMShapeTransform(const BMShapeTransform &other);
BMShapeTransform(const QJsonObject &definition, BMBase *parent);
BMShapeTransform(BMBase *parent);
BMShapeTransform(BMBase *parent, const BMShapeTransform &other);
BMShapeTransform(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -52,11 +52,11 @@ QT_BEGIN_NAMESPACE
class BODYMOVIN_EXPORT BMStroke : public BMShape
{
public:
BMStroke() = default;
explicit BMStroke(const BMStroke &other);
BMStroke(const QJsonObject &definition, BMBase *parent = nullptr);
BMStroke(BMBase *parent);
BMStroke(BMBase *parent, const BMStroke &other);
BMStroke(BMBase *parent, const QJsonObject &definition);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;

View File

@ -52,15 +52,15 @@ QT_BEGIN_NAMESPACE
class BODYMOVIN_EXPORT BMTrimPath : public BMShape
{
public:
BMTrimPath();
BMTrimPath(const QJsonObject &definition, BMBase *parent = nullptr);
explicit BMTrimPath(const BMTrimPath &other);
BMTrimPath(BMBase *parent);
BMTrimPath(BMBase *parent, const BMTrimPath &other);
BMTrimPath(BMBase *parent, const QJsonObject &definition);
void inherit(const BMTrimPath &other);
BMBase *clone() const override;
BMBase *clone(BMBase *parent) const override;
void construct(const QJsonObject &definition);
void parse(const QJsonObject &definition);
void updateProperties(int frame) override;
void render(LottieRenderer &renderer, int frame) const override;