1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QLOTTIELAYER_P_H
5#define QLOTTIELAYER_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtLottie/private/qlottiebase_p.h>
19#include <QtCore/QSize>
20
21QT_BEGIN_NAMESPACE
22
23class QLottieRenderer;
24
25class Q_LOTTIE_EXPORT QLottieLayer : public QLottieBase
26{
27public:
28 enum MatteClipMode {NoClip, Alpha, InvertedAlpha, Luminence, InvertedLuminence};
29
30 QLottieLayer() = default;
31 explicit QLottieLayer (const QLottieLayer &other);
32 ~QLottieLayer() override;
33
34 QLottieBase *clone() const override;
35
36 static QLottieLayer *construct(QJsonObject definition, const QMap<QString, QJsonObject> &assets);
37 static int constructLayers(QJsonArray jsonLayers, QLottieBase *parent,
38 const QMap<QString, QJsonObject> &assets);
39
40 bool active(int frame) const override;
41
42 void parse(const QJsonObject &definition) override;
43
44 void updateProperties(int frame) override;
45 void render(QLottieRenderer &renderer) const override;
46
47 QLottieBase *findChild(const QString &childName) override;
48
49 bool isClippedLayer() const;
50 bool isMaskLayer() const;
51 MatteClipMode clipMode() const;
52
53 int layerId() const;
54 QLottieBasicTransform *transform() const;
55 bool hasLinkedLayer() const { return m_hasLinkedLayer; }
56 int linkedLayerId() const { return m_linkedLayerId; }
57 void applyLayerTransform(QLottieRenderer &renderer) const;
58 QSize size() const;
59
60 int startFrame() const
61 {
62 return m_startFrame;
63 }
64
65 int endFrame() const
66 {
67 return m_endFrame;
68 }
69
70 qreal frameOffset() const
71 {
72 return m_startTime;
73 }
74
75 static const QLottieLayer *checkedCast(const QLottieBase *node);
76
77
78protected:
79 void renderEffects(QLottieRenderer &renderer) const;
80
81 virtual QLottieLayer *resolveLinkedLayer();
82 virtual QLottieLayer *linkedLayer() const;
83
84 int m_layerIndex = 0;
85 int m_startFrame = 0;
86 int m_endFrame = 0;
87 qreal m_startTime = 0;
88 int m_blendMode = 0;
89 bool m_3dLayer = false;
90 QLottieBase *m_effects = nullptr;
91 qreal m_stretch = 0;
92 QLottieBasicTransform *m_layerTransform = nullptr;
93
94 bool m_hasLinkedLayer = false;
95 int m_linkedLayerId = 0;
96 int m_td = 0;
97 MatteClipMode m_clipMode = NoClip;
98
99 bool m_isActive = true;
100 QSize m_size;
101
102private:
103 void parseEffects(const QJsonArray &definition, QLottieBase *effectRoot = nullptr);
104
105 mutable bool m_applyingLayerTransform = false;
106 QLottieLayer *m_linkedLayer = nullptr;
107};
108
109QT_END_NAMESPACE
110
111#endif // QLOTTIELAYER_P_H
112

source code of qtlottie/src/lottie/qlottielayer_p.h