Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickqmlgenerator_p.h
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQUICKQMLGENERATOR_P_H
5#define QQUICKQMLGENERATOR_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
21
22#include <QtCore/qtextstream.h>
23#include <QtCore/qbuffer.h>
24#include <QtCore/qmap.h>
25#include <QtCore/qset.h>
26#include <QtCore/qstack.h>
27
29
30class Q_QUICKVECTORIMAGEGENERATOR_EXPORT QQuickQmlGenerator : public QQuickGenerator
31{
32public:
33 QQuickQmlGenerator(const QString fileName, QQuickVectorImageGenerator::GeneratorFlags flags, const QString &outFileName);
34 ~QQuickQmlGenerator();
35
36 bool save();
37
38 void setShapeTypeName(const QString &name);
39 QString shapeTypeName() const;
40
41 void setCommentString(const QString commentString);
42 QString commentString() const;
43
44 void setRetainFilePaths(bool retainFilePaths)
45 {
46 m_retainFilePaths = retainFilePaths;
47 }
48
49 bool retainFilePaths() const
50 {
51 return m_retainFilePaths;
52 }
53
54 void setAssetFileDirectory(const QString &assetFileDirectory)
55 {
56 m_assetFileDirectory = assetFileDirectory;
57 }
58
59 QString assetFileDirectory() const
60 {
61 return m_assetFileDirectory;
62 }
63
64 void setAssetFilePrefix(const QString &assetFilePrefix)
65 {
66 m_assetFilePrefix = assetFilePrefix;
67 }
68
69 QString assetFilePrefix() const
70 {
71 return m_assetFilePrefix;
72 }
73
74 void setUrlPrefix(const QString &prefix)
75 {
76 m_urlPrefix = prefix;
77 }
78
79 QString urlPrefix() const
80 {
81 return m_urlPrefix;
82 }
83
84 void addExtraImport(const QString &import) override { m_extraImports.append(import); }
85
86 QStringList extraImports() const
87 {
88 return m_extraImports;
89 }
90
91 bool isRuntimeGenerator() const
92 {
93 return !m_urlPrefix.isEmpty();
94 }
95
96 QByteArray result() const
97 {
98 return m_result.data();
99 }
100
101protected:
102 QString generateNodeBase(const NodeInfo &info, const QString &idSuffix = QString{}) override;
103 void generateNodeEnd(const NodeInfo &info);
104 bool generateDefsNode(const StructureNodeInfo &info) override;
105 void generateDefsInstantiationNode(const StructureNodeInfo &info) override;
106 void generateImageNode(const ImageNodeInfo &info) override;
107 void generatePath(const PathNodeInfo &info, const QRectF &overrideBoundingRect) override;
108 void generateNode(const NodeInfo &info) override;
109 void generateTextNode(const TextNodeInfo &info) override;
110 void generateUseNode(const UseNodeInfo &info) override;
111 void generateFilterNode(const FilterNodeInfo &info) override;
112 bool generateStructureNode(const StructureNodeInfo &info) override;
113 bool generateRootNode(const StructureNodeInfo &info) override;
114 bool generateMaskNode(const MaskNodeInfo &info) override;
115 bool generateMarkerNode(const MarkerNodeInfo &info) override;
116 bool generatePatternNode(const PatternNodeInfo &info) override;
117 void outputShapePath(const PathNodeInfo &info, const QPainterPath *path, const QQuadPath *quadPath, QQuickVectorImageGenerator::PathSelector pathSelector, const QRectF &boundingRect) override;
118
119private:
120 enum class AnimationType {
121 Auto = 0,
122 ColorOpacity = 1
123 };
124
125 QString generateNodeId(const NodeInfo &info);
126 void generateGradient(const QGradient *grad,
127 const QString &propertyName,
128 const QRectF &coordinateConversion = QRectF(0.0, 0.0, 1.0, 1.0));
129 void generateTransform(const QTransform &xf);
130 void generatePathContainer(const StructureNodeInfo &info);
131 void generateAnimateTransform(const QString &targetName, const NodeInfo &info);
132 void generateAnimateMotionPath(const QString &targetName,
133 const QQuickAnimatedProperty &property);
134 void generateAnimationBindings();
135 void generateItemAnimations(const QString &idString, const NodeInfo &nodeInfo);
136 void generateEasing(const QQuickAnimatedProperty::PropertyAnimation &animation, int time,
137 int streamFlags = 0);
138 void generateAnimatedPropertySetter(const QString &targetName,
139 const QString &propertyName,
140 const QVariant &value,
141 const QQuickAnimatedProperty::PropertyAnimation &animation,
142 int time,
143 int frameTime,
144 AnimationType animationType = AnimationType::Auto);
145 void generatePropertyAnimation(const QQuickAnimatedProperty &property,
146 const QString &targetName,
147 const QString &propertyName,
148 AnimationType animationType = AnimationType::Auto);
149
150 void generateShaderUse(const NodeInfo &info);
151 void generateMarkers(const PathNodeInfo &info);
152 qsizetype generateFilterStep(const FilterNodeInfo &info, qsizetype stepIndex);
153
154 bool usingTimelineAnimation() const
155 {
156 return m_flags.testFlag(QQuickVectorImageGenerator::TimelineAnimation);
157 }
158 void generateTimelineFields(const StructureNodeInfo &info);
159 void generateTimelinePropertySetter(const QString &targetName,
160 const QString &propertyName,
161 const QQuickAnimatedProperty::PropertyAnimation &animation,
162 std::function<QVariant(const QVariant &)> const& extractValue,
163 int valueIndex = 0);
164 void generateTransformTimeline(const QString &targetName, const NodeInfo &info);
165 void generatePropertyTimeline(const QQuickAnimatedProperty &property,
166 const QString &targetName,
167 const QString &propertyName,
168 AnimationType animationType = AnimationType::Auto);
169
170 QStringView indent();
171 enum StreamFlags { NoFlags = 0x0, SameLine = 0x1 };
172 QTextStream &stream(int flags = NoFlags);
173 const char *shapeName() const;
174
175protected:
176 QBuffer m_result;
177
178 void startDefsSuffixBlock();
179 void endDefsSuffixBlock();
180
181private:
182 int m_indentLevel = 0;
183 int m_textNodeCounter = 0;
184 QStack<int> m_oldIndentLevels;
185 QTextStream m_stream;
186 QString outputFileName;
187 int m_inShapeItemLevel = 0;
188 QByteArray m_shapeTypeName;
189 QString m_commentString;
190 bool m_retainFilePaths = false;
191 QString m_assetFileDirectory;
192 QString m_assetFilePrefix;
193 QString m_urlPrefix;
194 QString m_topLevelIdString;
195 QStringList m_extraImports;
196 QMap<std::array<qreal, 4>, QString> m_easings;
197 quint32 m_nodeCounter = 0;
198 QString m_defsSuffix;
199 QString m_indentString;
200};
201
202QT_END_NAMESPACE
203
204#endif // QQUICKQMLGENERATOR_P_H
Combined button and popup list for selecting options.
static QString sanitizeString(const QString &input)
static int processAnimationTime(int time)