49 QQuickItemGenerator(
const QQuickVectorImageSource &source,
50 QQuickVectorImageGenerator::GeneratorFlags flags,
51 QQmlContext *context =
nullptr);
52 ~QQuickItemGenerator() override;
54 QQuickItem *takeRootItem();
56 QString generateNodeBase(
const NodeInfo &info,
const QString &idSuffix = QString{}) override;
57 bool generateRootNode(
const StructureNodeInfo &info) override;
58 bool generateStructureNode(
const StructureNodeInfo &info) override;
59 void generateUseNode(
const UseNodeInfo &info) override;
60 bool generateDefsNode(
const StructureNodeInfo &info) override;
61 void generateDefsInstantiationNode(
const StructureNodeInfo &info) override;
62 void generateImageNode(
const ImageNodeInfo &info) override;
63 void generatePath(
const PathNodeInfo &info,
64 const QRectF &overrideBoundingRect = QRectF{}) override;
65 void generateNode(
const NodeInfo &info) override;
66 void generateTextNode(
const TextNodeInfo &info) override;
67 void generateFilterNode(
const FilterNodeInfo &info) override;
68 bool generateMaskNode(
const MaskNodeInfo &info) override;
69 bool generateMarkerNode(
const MarkerNodeInfo &info) override;
70 bool generatePatternNode(
const PatternNodeInfo &info) override;
71 void outputShapePath(
const PathNodeInfo &info,
const QPainterPath *path,
72 const QQuadPath *quadPath,
73 QQuickVectorImageGenerator::PathSelector pathSelector,
74 const QRectF &boundingRect) override;
76 void setAnimationProvider(std::unique_ptr<QQuickGeneratorAnimationProvider> provider) override;
81 QQuickItem *container =
nullptr;
83 bool isMaskRectRelativeCoordinates =
false;
84 bool isMaskContentRelativeCoordinates =
false;
85 QQuickItem *transformer =
nullptr;
86 QQuickMatrix4x4 *transformerMatrix =
nullptr;
91 QQuickItem *container =
nullptr;
93 bool isPatternRectRelativeCoordinates =
false;
98 QList<std::function<
void()>> recording;
102 struct PendingLinkedTransform
105 QString transformReferenceId;
106 QQuickMatrix4x4 *linkedMatrix;
109 QQuickItem *m_rootItem =
nullptr;
110 QStack<QQuickItem *> m_itemStack;
111 QQmlContext *m_context =
nullptr;
112 QSizeF m_containerSize;
113 quint32 m_nodeCounter = 0;
114 QHash<QString, QList<std::function<
void()>>> m_defs;
115 QList<std::function<
void()>> *m_currentDefsRecord =
nullptr;
116 QString m_currentDefsId;
117 QStack<QString> m_defsIdStack;
118 QList<std::function<
void()>> *m_currentMarkerRecord =
nullptr;
119 QHash<QString, MaskDef> m_maskDefs;
120 QHash<QString, PatternDef> m_patternDefs;
121 QHash<QString, MarkerDef> m_markerDefs;
122 QHash<QString, FilterNodeInfo> m_filterDefs;
123 QHash<QString, QRectF> m_bounds;
124 QQuickItemSpy *m_topLevelScaleSpy =
nullptr;
126 QHash<QString, QQuickTransformSource *> m_transformSourceItems;
127 QHash<QString, QString> m_transformReferenceChildIds;
128 QList<PendingLinkedTransform> m_pendingLinkedTransforms;
129 std::unique_ptr<QQuickGeneratorAnimationProvider> m_animationProvider;
130 QStack<
bool> m_scopePushed;
131 QMap<std::array<qreal, 4>, QEasingCurve> m_easingCache;
133 QQuickTransformSource *resolveTransformReference(
const QString &referenceId)
const;
135 QRectF resolveBounds(
const NodeInfo &info)
const;
136 void registerBounds(
const QString &id,
const QRectF &bounds);
138 void beginDefsRecord(
const QString &id);
139 void endDefsRecord();
140 void replayDefsRecord(
const QString &id);
142 template <
typename T>
143 typename QHash<QString, T>::iterator resolveDef(QHash<QString, T> ®isteredDefs,
146 QList<std::function<
void()>> *activeRecord()
const;
147 QQuickShape *createShapeContainer();
148 void pushItem(QQuickItem *item);
149 QQuickItem *popItem();
150 QQuickItem *currentItem()
const;
152 void bindTextureSize(QQuickShaderEffectSource *ses);
153 void bindPatternTextureSize(QQuickShaderEffectSource *ses);
154 void bindAnimatedProperty(QObject *target,
const QString &propertyName,
155 const QQuickAnimatedProperty &property);
156 void bindColorWithOpacity(QObject *target,
const QString &colorPropertyName,
157 const QQuickAnimatedProperty &color,
158 const QQuickAnimatedProperty &opacity,
159 std::function<
void(
const QColor &)> setter);
160 void generateItemAnimations(QQuickItem *item,
const NodeInfo &info);
161 QQuickTransform *createAnimatedTransformGroup(QQuickItem *item,
const NodeInfo &info);
162 void bindMotionPath(QQuickItem *item,
const QQuickAnimatedProperty &motionPath);
164 void generateMaskContainer(
const MaskNodeInfo &info);
165 void generateMask(QQuickItem *item,
const NodeInfo &info,
const QPointF &sourceOrigin);
166 void generatePatternContainer(
const PatternNodeInfo &info);
167 void generatePattern(QQuickShapePath *shapePath,
const PathNodeInfo &info,
168 const QRectF &boundingRect, QTransform &fillTransform);
169 void generateMarkers(
const PathNodeInfo &info);
170 QQuickItem *generateFilter(QQuickItem *item,
const NodeInfo &info, QPointF *outputOrigin);
171 QQuickShaderEffectSource *generateFilterStep(
const FilterNodeInfo::FilterStep &step,
172 QQuickShaderEffectSource *input1,
173 QQuickShaderEffectSource *input2,
174 const QRectF &stepRect,
const QRectF &filterRect);
175 QQuickShaderEffectSource *generateFilterMerge(
const QList<QQuickShaderEffectSource *> &inputs,
176 const QRectF &stepRect,
const QRectF &filterRect);
177 QQuickShaderEffectSource *generateFilterFlood(
const FilterNodeInfo::FilterStep &step,
178 QQuickShaderEffectSource *input,
179 const QRectF &stepRect,
const QRectF &filterRect);
180 QQuickShaderEffectSource *generateFilterOffset(
const FilterNodeInfo::FilterStep &step,
181 QQuickShaderEffectSource *input,
182 const QRectF &stepRect);
183 QQuickShaderEffectSource *generateFilterColorMatrix(
const FilterNodeInfo::FilterStep &step,
184 QQuickShaderEffectSource *input,
185 const QRectF &stepRect,
186 const QRectF &filterRect);
187 QQuickShaderEffectSource *generateFilterBlend(
const FilterNodeInfo::FilterStep &step,
188 QQuickShaderEffectSource *input1,
189 QQuickShaderEffectSource *input2,
190 const QRectF &stepRect,
const QRectF &filterRect);
191 QQuickShaderEffectSource *generateFilterComposite(
const FilterNodeInfo::FilterStep &step,
192 QQuickShaderEffectSource *input1,
193 QQuickShaderEffectSource *input2,
194 const QRectF &stepRect,
195 const QRectF &filterRect);
196 QQuickShaderEffectSource *generateFilterGaussianBlur(
const FilterNodeInfo::FilterStep &step,
197 QQuickShaderEffectSource *input,
198 const QRectF &stepRect,
199 const QRectF &filterRect);