50 QQuickItemGenerator(
const QQuickVectorImageSource &source,
51 QQuickVectorImageGenerator::GeneratorFlags flags,
52 QQmlContext *context =
nullptr);
53 ~QQuickItemGenerator() override;
55 QQuickItem *takeRootItem();
61 void setDeferGuiThreadCalls(
bool enabled);
62 QList<std::function<
void()>> takeDeferredCalls();
65 void setCancellationFlag(
const std::atomic<
bool> *cancelled);
67 QString generateNodeBase(
const NodeInfo &info,
const QString &idSuffix = QString{}) override;
68 bool generateRootNode(
const StructureNodeInfo &info) override;
69 bool generateStructureNode(
const StructureNodeInfo &info) override;
70 void generateUseNode(
const UseNodeInfo &info) override;
71 bool generateDefsNode(
const StructureNodeInfo &info) override;
72 void generateDefsInstantiationNode(
const StructureNodeInfo &info) override;
73 void generateImageNode(
const ImageNodeInfo &info) override;
74 void generatePath(
const PathNodeInfo &info,
75 const QRectF &overrideBoundingRect = QRectF{}) override;
76 void generateNode(
const NodeInfo &info) override;
77 void generateTextNode(
const TextNodeInfo &info) override;
78 void generateFilterNode(
const FilterNodeInfo &info) override;
79 bool generateMaskNode(
const MaskNodeInfo &info) override;
80 bool generateMarkerNode(
const MarkerNodeInfo &info) override;
81 bool generatePatternNode(
const PatternNodeInfo &info) override;
82 void outputShapePath(
const PathNodeInfo &info,
const QPainterPath *path,
83 const QQuadPath *quadPath,
84 QQuickVectorImageGenerator::PathSelector pathSelector,
85 const QRectF &boundingRect) override;
87 void setAnimationProvider(std::unique_ptr<QQuickGeneratorAnimationProvider> provider) override;
92 QQuickItem *container =
nullptr;
94 bool isMaskRectRelativeCoordinates =
false;
95 bool isMaskContentRelativeCoordinates =
false;
96 QQuickItem *transformer =
nullptr;
97 QQuickMatrix4x4 *transformerMatrix =
nullptr;
102 QQuickItem *container =
nullptr;
104 bool isPatternRectRelativeCoordinates =
false;
109 QList<std::function<
void()>> recording;
113 struct PendingLinkedTransform
116 QString transformReferenceId;
117 QQuickMatrix4x4 *linkedMatrix;
122 QQuickItem *wrapper =
nullptr;
124 int graphicItemCount = 0;
127 QQuickItem *m_rootItem =
nullptr;
128 QStack<QQuickItem *> m_itemStack;
129 QQmlContext *m_context =
nullptr;
130 QSizeF m_containerSize;
131 quint32 m_nodeCounter = 0;
132 QHash<QString, QList<std::function<
void()>>> m_defs;
133 QList<std::function<
void()>> *m_currentDefsRecord =
nullptr;
134 QString m_currentDefsId;
135 QStack<QString> m_defsIdStack;
136 QList<std::function<
void()>> *m_currentMarkerRecord =
nullptr;
137 QHash<QString, MaskDef> m_maskDefs;
138 QHash<QString, PatternDef> m_patternDefs;
139 QHash<QString, MarkerDef> m_markerDefs;
140 QHash<QString, FilterNodeInfo> m_filterDefs;
141 QHash<QString, QRectF> m_bounds;
142 QQuickItemSpy *m_topLevelScaleSpy =
nullptr;
144 QHash<QString, QQuickTransformSource *> m_transformSourceItems;
145 QHash<QString, QString> m_transformReferenceChildIds;
146 QList<PendingLinkedTransform> m_pendingLinkedTransforms;
147 std::unique_ptr<QQuickGeneratorAnimationProvider> m_animationProvider;
148 QStack<
bool> m_scopePushed;
149 QStack<OpacityGroup> m_opacityGroups;
150 QStack<
bool> m_opacityGroupPushed;
151 QMap<std::array<qreal, 4>, QEasingCurve> m_easingCache;
153 bool m_deferGuiThreadCalls =
false;
154 QList<std::function<
void()>> m_deferredCalls;
155 const std::atomic<
bool> *m_cancelled =
nullptr;
158 bool generateStructureNodeItem(
const StructureNodeInfo &info);
159 void beginOpacityGroup(
const StructureNodeInfo &info);
160 void endOpacityGroup();
161 void deferToGuiThread(std::function<
void()> call);
162 void initializeQmlObject(QObject *object, std::function<
void()> setup);
163 void startMasterAnimation(QQuickAbstractAnimation *animation);
165 QQuickTransformSource *resolveTransformReference(
const QString &referenceId)
const;
167 QRectF resolveBounds(
const NodeInfo &info)
const;
168 void registerBounds(
const QString &id,
const QRectF &bounds);
170 void beginDefsRecord(
const QString &id);
171 void endDefsRecord();
172 void replayDefsRecord(
const QString &id);
174 template <
typename T>
175 typename QHash<QString, T>::iterator resolveDef(QHash<QString, T> ®isteredDefs,
178 QList<std::function<
void()>> *activeRecord()
const;
179 QQuickShape *createShapeContainer();
180 void pushItem(QQuickItem *item);
181 QQuickItem *popItem();
182 QQuickItem *currentItem()
const;
184 void bindTextureSize(QQuickShaderEffectSource *ses);
185 void bindPatternTextureSize(QQuickShaderEffectSource *ses);
186 void bindAnimatedProperty(QObject *target,
const QString &propertyName,
187 const QQuickAnimatedProperty &property);
188 void bindColorWithOpacity(QObject *target,
const QString &colorPropertyName,
189 const QQuickAnimatedProperty &color,
190 const QQuickAnimatedProperty &opacity,
191 std::function<
void(
const QColor &)> setter);
192 void generateItemAnimations(QQuickItem *item,
const NodeInfo &info);
193 QQuickTransform *createAnimatedTransformGroup(QQuickItem *item,
const NodeInfo &info);
194 void bindMotionPath(QQuickItem *item,
const QQuickAnimatedProperty &motionPath);
196 void generateMaskContainer(
const MaskNodeInfo &info);
197 void generateMask(QQuickItem *item,
const NodeInfo &info,
const QPointF &sourceOrigin);
198 void generatePatternContainer(
const PatternNodeInfo &info);
199 void generatePattern(QQuickShapePath *shapePath,
const PathNodeInfo &info,
200 const QRectF &boundingRect, QTransform &fillTransform);
201 void generateMarkers(
const PathNodeInfo &info);
202 QQuickItem *generateFilter(QQuickItem *item,
const NodeInfo &info, QPointF *outputOrigin);
203 QQuickShaderEffectSource *generateFilterStep(
const FilterNodeInfo::FilterStep &step,
204 QQuickShaderEffectSource *input1,
205 QQuickShaderEffectSource *input2,
206 const QRectF &stepRect,
const QRectF &filterRect);
207 QQuickShaderEffectSource *generateFilterMerge(
const QList<QQuickShaderEffectSource *> &inputs,
208 const QRectF &stepRect,
const QRectF &filterRect);
209 QQuickShaderEffectSource *generateFilterFlood(
const FilterNodeInfo::FilterStep &step,
210 QQuickShaderEffectSource *input,
211 const QRectF &stepRect,
const QRectF &filterRect);
212 QQuickShaderEffectSource *generateFilterOffset(
const FilterNodeInfo::FilterStep &step,
213 QQuickShaderEffectSource *input,
214 const QRectF &stepRect);
215 QQuickShaderEffectSource *generateFilterColorMatrix(
const FilterNodeInfo::FilterStep &step,
216 QQuickShaderEffectSource *input,
217 const QRectF &stepRect,
218 const QRectF &filterRect);
219 QQuickShaderEffectSource *generateFilterBlend(
const FilterNodeInfo::FilterStep &step,
220 QQuickShaderEffectSource *input1,
221 QQuickShaderEffectSource *input2,
222 const QRectF &stepRect,
const QRectF &filterRect);
223 QQuickShaderEffectSource *generateFilterComposite(
const FilterNodeInfo::FilterStep &step,
224 QQuickShaderEffectSource *input1,
225 QQuickShaderEffectSource *input2,
226 const QRectF &stepRect,
227 const QRectF &filterRect);
228 QQuickShaderEffectSource *generateFilterGaussianBlur(
const FilterNodeInfo::FilterStep &step,
229 QQuickShaderEffectSource *input,
230 const QRectF &stepRect,
231 const QRectF &filterRect);