blob: e2974c91c04d3a08059a63511270c358431aa1ab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qquickitemgenerator_p.h"
#include "utils_p.h"
#include "qquicknodeinfo_p.h"
#include <private/qsgcurveprocessor_p.h>
#include <private/qquickshape_p.h>
#include <private/qquadpath_p.h>
#include <private/qquickitem_p.h>
#include <private/qquickimagebase_p_p.h>
#include <private/qquickanimation_p.h>
#include <private/qquicktext_p.h>
#include <private/qquicktranslate_p.h>
#include <private/qquickimage_p.h>
#include <QtCore/qloggingcategory.h>
#include <QtCore/qstandardpaths.h>
#include <QtQml/qqmlcomponent.h>
QT_BEGIN_NAMESPACE
QQuickItemGenerator::QQuickItemGenerator(const QString fileName,
QQuickVectorImageGenerator::GeneratorFlags flags,
QQuickItem *parentItem,
QQmlContext *ctx)
: QQuickQmlGenerator(fileName, flags, QString{})
, m_parentItem(parentItem)
, m_qmlContext(ctx)
{
setRetainFilePaths(true);
QString tmpDir = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
setAssetFileDirectory(tmpDir);
setAssetFilePrefix(QStringLiteral("_qt_vectorimage_"));
setUrlPrefix(QStringLiteral("file:"));
}
QQuickItemGenerator::~QQuickItemGenerator()
{
}
bool QQuickItemGenerator::generateRootNode(const StructureNodeInfo &info)
{
bool cont = QQuickQmlGenerator::generateRootNode(info);
if (info.stage == StructureNodeStage::End) {
if (m_qmlContext == nullptr) {
qCWarning(lcQuickVectorImage) << "QQuickItemGenerator::generateRootItem: Requires QML context";
return false;
}
QQmlEngine *engine = m_qmlContext->engine();
if (engine == nullptr) {
qCWarning(lcQuickVectorImage) << "QQuickItemGenerator::generateRootItem: Requires QML engine";
return false;
}
QQmlComponent component(engine);
component.setData(m_result.data(), QUrl{});
QObject *obj = component.create(m_qmlContext);
QQuickItem *rootItem = qobject_cast<QQuickItem *>(obj);
if (rootItem == nullptr) {
delete obj;
qCWarning(lcQuickVectorImage) << "QQuickItemGenerator::generateRootItem: Root item not a QQuickItem: " << component.errorString();
return false;
}
m_parentItem->setImplicitWidth(rootItem->width());
m_parentItem->setImplicitHeight(rootItem->height());
rootItem->setParent(m_parentItem);
rootItem->setParentItem(m_parentItem);
}
return cont;
}
QT_END_NAMESPACE
|