1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "qlottieflatlayers_p.h"
5
6#include <QJsonObject>
7#include <QJsonArray>
8
9
10#include "qlottiebase_p.h"
11#include "qlottieimage_p.h"
12#include "qlottieshape_p.h"
13#include "qlottietrimpath_p.h"
14#include "qlottiebasictransform_p.h"
15#include "qlottierenderer_p.h"
16
17QT_BEGIN_NAMESPACE
18
19QLottieNullLayer::QLottieNullLayer(const QLottieNullLayer &other)
20 : QLottieLayer(other)
21{
22}
23
24QLottieNullLayer::QLottieNullLayer(const QJsonObject &definition)
25{
26 m_type = LOTTIE_LAYER_NULL_IX;
27
28 QLottieLayer::parse(definition);
29
30 if (m_hidden)
31 return;
32
33 qCDebug(lcLottieQtLottieParser) << "QLottieNullLayer::QLottieNullLayer()" << m_name;
34}
35
36QLottieBase *QLottieNullLayer::clone() const
37{
38 return new QLottieNullLayer(*this);
39}
40
41void QLottieNullLayer::render(QLottieRenderer &renderer) const
42{
43 if (!m_isActive)
44 return;
45
46 renderer.saveState();
47
48 applyLayerTransform(renderer);
49
50 renderer.render(layer: *this);
51
52 renderer.finish(*this);
53 renderer.restoreState();
54}
55
56QLottieSolidLayer::QLottieSolidLayer(const QLottieSolidLayer &other)
57 : QLottieLayer(other)
58{
59 m_color = other.m_color;
60}
61
62QLottieSolidLayer::QLottieSolidLayer(const QJsonObject &definition)
63{
64 m_type = LOTTIE_LAYER_SOLID_IX;
65
66 QLottieLayer::parse(definition);
67
68 if (m_hidden)
69 return;
70
71 m_size = QSize(definition.value(key: QLatin1String("sw")).toInt(defaultValue: -1), definition.value(key: QLatin1String("sh")).toInt(defaultValue: -1));
72 m_color = QColor(definition.value(key: QLatin1String("sc")).toString());
73
74 qCDebug(lcLottieQtLottieParser) << "QLottieSolidLayer::QLottieSolidLayer()" << m_name;
75}
76
77QLottieBase *QLottieSolidLayer::clone() const
78{
79 return new QLottieSolidLayer(*this);
80}
81
82void QLottieSolidLayer::render(QLottieRenderer &renderer) const
83{
84 if (!m_isActive)
85 return;
86
87 renderer.saveState();
88
89 applyLayerTransform(renderer);
90
91 renderer.render(layer: *this);
92
93 renderer.finish(*this);
94 renderer.restoreState();
95}
96
97QColor QLottieSolidLayer::color() const
98{
99 return m_color;
100}
101
102QLottieImageLayer::QLottieImageLayer(const QLottieImageLayer &other)
103 : QLottieLayer(other)
104{
105}
106
107QLottieImageLayer::QLottieImageLayer(const QJsonObject &definition)
108{
109 m_type = LOTTIE_LAYER_IMAGE_IX;
110
111 QLottieLayer::parse(definition);
112
113 QLottieImage *image = new QLottieImage(definition, this);
114 appendChild(child: image);
115
116 if (m_hidden)
117 return;
118
119 qCDebug(lcLottieQtLottieParser) << "QLottieImageLayer::QLottieImageLayer()" << m_name;
120}
121
122QLottieBase *QLottieImageLayer::clone() const
123{
124 return new QLottieImageLayer(*this);
125}
126
127void QLottieImageLayer::render(QLottieRenderer &renderer) const
128{
129 if (!m_isActive)
130 return;
131
132 renderer.saveState();
133
134 QLottieLayer::render(renderer);
135
136 renderer.finish(*this);
137 renderer.restoreState();
138}
139
140QT_END_NAMESPACE
141

source code of qtlottie/src/lottie/qlottieflatlayers.cpp