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 bindPropertyAnimation(QObject *target,
const QString &property,
155 const QQuickAnimatedProperty::PropertyAnimation &anim,
156 const std::function<QVariant(
const QVariant &)> &extractor,
157 int valueIndex = 0,
const QVariant &resetValue = QVariant());
158 void bindAnimatedProperty(QObject *target,
const QString &property,
159 const QQuickAnimatedProperty &animatedProperty,
160 const std::function<QVariant(
const QVariant &)> &extractor,
162 void bindColorWithOpacity(QObject *target,
const QString &colorProperty,
163 const QQuickAnimatedProperty &color,
164 const QQuickAnimatedProperty &opacity,
165 std::function<
void(
const QColor &)> setter);
166 void generateItemAnimations(QQuickItem *item,
const NodeInfo &info);
167 QQuickTransform *createAnimatedTransformGroup(QQuickItem *item,
const NodeInfo &info);
168 void bindMotionPath(QQuickItem *item,
const QQuickAnimatedProperty &motionPath);
170 void generateMaskContainer(
const MaskNodeInfo &info);
171 void generateMask(QQuickItem *item,
const NodeInfo &info,
const QPointF &sourceOrigin);
172 void generatePatternContainer(
const PatternNodeInfo &info);
173 void generatePattern(QQuickShapePath *shapePath,
const PathNodeInfo &info,
174 const QRectF &boundingRect, QTransform &fillTransform);
175 void generateMarkers(
const PathNodeInfo &info);
176 QQuickItem *generateFilter(QQuickItem *item,
const NodeInfo &info, QPointF *outputOrigin);
177 QQuickShaderEffectSource *generateFilterStep(
const FilterNodeInfo::FilterStep &step,
178 QQuickShaderEffectSource *input1,
179 QQuickShaderEffectSource *input2,
180 const QRectF &stepRect,
const QRectF &filterRect);
181 QQuickShaderEffectSource *generateFilterMerge(
const QList<QQuickShaderEffectSource *> &inputs,
182 const QRectF &stepRect,
const QRectF &filterRect);
183 QQuickShaderEffectSource *generateFilterFlood(
const FilterNodeInfo::FilterStep &step,
184 QQuickShaderEffectSource *input,
185 const QRectF &stepRect,
const QRectF &filterRect);
186 QQuickShaderEffectSource *generateFilterOffset(
const FilterNodeInfo::FilterStep &step,
187 QQuickShaderEffectSource *input,
188 const QRectF &stepRect);
189 QQuickShaderEffectSource *generateFilterColorMatrix(
const FilterNodeInfo::FilterStep &step,
190 QQuickShaderEffectSource *input,
191 const QRectF &stepRect,
192 const QRectF &filterRect);
193 QQuickShaderEffectSource *generateFilterBlend(
const FilterNodeInfo::FilterStep &step,
194 QQuickShaderEffectSource *input1,
195 QQuickShaderEffectSource *input2,
196 const QRectF &stepRect,
const QRectF &filterRect);
197 QQuickShaderEffectSource *generateFilterComposite(
const FilterNodeInfo::FilterStep &step,
198 QQuickShaderEffectSource *input1,
199 QQuickShaderEffectSource *input2,
200 const QRectF &stepRect,
201 const QRectF &filterRect);
202 QQuickShaderEffectSource *generateFilterGaussianBlur(
const FilterNodeInfo::FilterStep &step,
203 QQuickShaderEffectSource *input,
204 const QRectF &stepRect,
205 const QRectF &filterRect);