1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include "qlottieprecomplayer_p.h"
5
6#include <QJsonArray>
7#include <QJsonObject>
8#include <QJsonValue>
9#include <QLoggingCategory>
10
11#include "qlottiebasictransform_p.h"
12#include "qlottierenderer_p.h"
13
14QT_BEGIN_NAMESPACE
15
16QLottiePrecompLayer::QLottiePrecompLayer(const QLottiePrecompLayer &other)
17 : QLottieLayer(other)
18{
19}
20
21QLottiePrecompLayer::QLottiePrecompLayer(const QJsonObject &definition, const QMap<QString, QJsonObject> &assets)
22{
23 m_type = LOTTIE_LAYER_PRECOMP_IX;
24
25 QLottieLayer::parse(definition);
26 if (m_hidden)
27 return;
28
29 qCDebug(lcLottieQtLottieParser) << "QLottiePrecompLayer::QLottiePrecompLayer()" << m_name;
30
31 m_startTime = definition.value(key: QLatin1String("st")).toDouble(); // only relevant for precomps
32 QString refId = definition.value(key: QLatin1String("refId")).toString();
33 QJsonObject asset = assets.value(key: refId);
34 QJsonArray jsonLayers = asset.value(key: QLatin1String("layers")).toArray();
35 int numLayers = QLottieLayer::constructLayers(jsonLayers, parent: this, assets);
36
37 m_size = QSize(definition.value(key: QLatin1String("w")).toInt(defaultValue: -1), definition.value(key: QLatin1String("h")).toInt(defaultValue: -1));
38
39 qCDebug(lcLottieQtLottieParser) << "QLottiePrecompLayer created" << numLayers << "layers";
40}
41
42QLottieBase *QLottiePrecompLayer::clone() const
43{
44 return new QLottiePrecompLayer(*this);
45}
46
47void QLottiePrecompLayer::render(QLottieRenderer &renderer) const
48{
49 if (!m_isActive)
50 return;
51
52 renderer.saveState();
53
54 QLottieLayer::render(renderer);
55
56 renderer.finish(*this);
57 renderer.restoreState();
58}
59
60QT_END_NAMESPACE
61

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