33 QQuickQmlGenerator(
const QQuickVectorImageSource &source,
34 QQuickVectorImageGenerator::GeneratorFlags flags,
35 const QString &outFileName);
36 ~QQuickQmlGenerator();
40 void setShapeTypeName(
const QString &name);
41 QString shapeTypeName()
const;
43 void setCommentString(
const QString commentString);
44 QString commentString()
const;
46 void setRetainFilePaths(
bool retainFilePaths)
48 m_retainFilePaths = retainFilePaths;
51 bool retainFilePaths()
const
53 return m_retainFilePaths;
56 void setAssetFileDirectory(
const QString &assetFileDirectory)
58 m_assetFileDirectory = assetFileDirectory;
61 QString assetFileDirectory()
const
63 return m_assetFileDirectory;
66 void setAssetFilePrefix(
const QString &assetFilePrefix)
68 m_assetFilePrefix = assetFilePrefix;
71 QString assetFilePrefix()
const
73 return m_assetFilePrefix;
76 void setUrlPrefix(
const QString &prefix)
81 QString urlPrefix()
const
86 void addExtraImport(
const QString &import) override { m_extraImports.append(import); }
88 QStringList extraImports()
const
90 return m_extraImports;
93 bool isRuntimeGenerator()
const
95 return !m_urlPrefix.isEmpty();
98 QByteArray result()
const
100 return m_result.data();
104 QString generateNodeBase(
const NodeInfo &info,
const QString &idSuffix = QString{}) override;
105 void generateNodeEnd(
const NodeInfo &info);
106 bool generateDefsNode(
const StructureNodeInfo &info) override;
107 void generateDefsInstantiationNode(
const StructureNodeInfo &info) override;
108 void generateImageNode(
const ImageNodeInfo &info) override;
109 void generatePath(
const PathNodeInfo &info,
const QRectF &overrideBoundingRect) override;
110 void generateNode(
const NodeInfo &info) override;
111 void generateTextNode(
const TextNodeInfo &info) override;
112 void generateUseNode(
const UseNodeInfo &info) override;
113 void generateFilterNode(
const FilterNodeInfo &info) override;
114 bool generateStructureNode(
const StructureNodeInfo &info) override;
115 bool generateRootNode(
const StructureNodeInfo &info) override;
116 bool generateMaskNode(
const MaskNodeInfo &info) override;
117 bool generateMarkerNode(
const MarkerNodeInfo &info) override;
118 bool generatePatternNode(
const PatternNodeInfo &info) override;
119 void outputShapePath(
const PathNodeInfo &info,
const QPainterPath *path,
const QQuadPath *quadPath, QQuickVectorImageGenerator::PathSelector pathSelector,
const QRectF &boundingRect) override;
122 enum class AnimationType {
127 QString generateNodeId(
const NodeInfo &info);
128 void generateGradient(
const QGradient *grad,
129 const QString &propertyName,
130 const QRectF &coordinateConversion = QRectF(0.0, 0.0, 1.0, 1.0));
131 void generateTransform(
const QTransform &xf);
132 void generatePathContainer(
const StructureNodeInfo &info);
133 void generateAnimateTransform(
const QString &targetName,
const NodeInfo &info);
134 void generateAnimateMotionPath(
const QString &targetName,
135 const QQuickAnimatedProperty &property);
136 void generateAnimationBindings();
137 void generateItemAnimations(
const QString &idString,
const NodeInfo &nodeInfo);
138 void generateEasing(
const QQuickAnimatedProperty::PropertyAnimation &animation,
int time,
139 int streamFlags = 0);
140 void generateAnimatedPropertySetter(
const QString &targetName,
141 const QString &propertyName,
142 const QVariant &value,
143 const QQuickAnimatedProperty::PropertyAnimation &animation,
146 AnimationType animationType = AnimationType::Auto);
147 void generatePropertyAnimation(
const QQuickAnimatedProperty &property,
148 const QString &targetName,
149 const QString &propertyName,
150 AnimationType animationType = AnimationType::Auto);
152 void generateShaderUse(
const NodeInfo &info);
153 void generateMarkers(
const PathNodeInfo &info);
154 qsizetype generateFilterStep(
const FilterNodeInfo &info, qsizetype stepIndex);
156 bool generateStructureNode_helper(
const StructureNodeInfo &info);
157 void registerGraphicItem()
159 if (!m_opacityWrapperShapeCounts.isEmpty())
160 m_opacityWrapperShapeCounts.top()++;
163 bool usingTimelineAnimation()
const
165 return m_flags.testFlag(QQuickVectorImageGenerator::TimelineAnimation);
167 void generateTimelineFields(
const StructureNodeInfo &info);
168 void generateTimelinePropertySetter(
const QString &targetName,
169 const QString &propertyName,
170 const QQuickAnimatedProperty::PropertyAnimation &animation,
171 std::function<QVariant(
const QVariant &)>
const& extractValue,
173 void generateTransformTimeline(
const QString &targetName,
const NodeInfo &info);
174 void generatePropertyTimeline(
const QQuickAnimatedProperty &property,
175 const QString &targetName,
176 const QString &propertyName,
177 AnimationType animationType = AnimationType::Auto);
179 QStringView indent();
180 enum StreamFlags { NoFlags = 0x0, SameLine = 0x1 };
181 QTextStream &stream(
int flags = NoFlags);
182 const char *shapeName()
const;
187 void startDefsSuffixBlock();
188 void endDefsSuffixBlock();
191 int m_indentLevel = 0;
192 int m_textNodeCounter = 0;
193 QStack<
int> m_oldIndentLevels;
194 QTextStream m_stream;
195 QString outputFileName;
196 int m_inShapeItemLevel = 0;
197 QByteArray m_shapeTypeName;
198 QString m_commentString;
199 bool m_retainFilePaths =
false;
200 QString m_assetFileDirectory;
201 QString m_assetFilePrefix;
203 QString m_topLevelIdString;
204 QStringList m_extraImports;
205 QMap<std::array<qreal, 4>, QString> m_easings;
206 quint32 m_nodeCounter = 0;
207 QString m_defsSuffix;
208 QString m_indentString;
209 QSet<QString> m_contentRelativeMasks;
210 QStack<QString> m_opacityWrapperIds;
211 QStack<
int> m_opacityWrapperShapeCounts;