49 QQuickItemGenerator(
const QString &fileName, QQuickVectorImageGenerator::GeneratorFlags flags,
50 QQmlContext *context =
nullptr);
51 ~QQuickItemGenerator() override;
53 QQuickItem *takeRootItem();
55 QString generateNodeBase(
const NodeInfo &info,
const QString &idSuffix = QString{}) override;
56 bool generateRootNode(
const StructureNodeInfo &info) override;
57 bool generateStructureNode(
const StructureNodeInfo &info) override;
58 void generateUseNode(
const UseNodeInfo &info) override;
59 bool generateDefsNode(
const StructureNodeInfo &info) override;
60 void generateDefsInstantiationNode(
const StructureNodeInfo &info) override;
61 void generateImageNode(
const ImageNodeInfo &info) override;
62 void generatePath(
const PathNodeInfo &info,
63 const QRectF &overrideBoundingRect = QRectF{}) override;
64 void generateNode(
const NodeInfo &info) override;
65 void generateTextNode(
const TextNodeInfo &info) override;
66 void generateFilterNode(
const FilterNodeInfo &info) override;
67 bool generateMaskNode(
const MaskNodeInfo &info) override;
68 bool generateMarkerNode(
const MarkerNodeInfo &info) override;
69 bool generatePatternNode(
const PatternNodeInfo &info) override;
70 void outputShapePath(
const PathNodeInfo &info,
const QPainterPath *path,
71 const QQuadPath *quadPath,
72 QQuickVectorImageGenerator::PathSelector pathSelector,
73 const QRectF &boundingRect) override;
75 void setAnimationProvider(std::unique_ptr<QQuickGeneratorAnimationProvider> provider) override;
80 QQuickItem *container =
nullptr;
82 bool isMaskRectRelativeCoordinates =
false;
83 bool isMaskContentRelativeCoordinates =
false;
84 QQuickItem *transformer =
nullptr;
85 QQuickMatrix4x4 *transformerMatrix =
nullptr;
90 QQuickItem *container =
nullptr;
92 bool isPatternRectRelativeCoordinates =
false;
97 QList<std::function<
void()>> recording;
101 struct PendingLinkedTransform
104 QString transformReferenceId;
105 QQuickMatrix4x4 *linkedMatrix;
108 QQuickItem *m_rootItem =
nullptr;
109 QStack<QQuickItem *> m_itemStack;
110 QQmlContext *m_context =
nullptr;
111 QSizeF m_containerSize;
112 quint32 m_nodeCounter = 0;
113 QHash<QString, QList<std::function<
void()>>> m_defs;
114 QList<std::function<
void()>> *m_currentDefsRecord =
nullptr;
115 QList<std::function<
void()>> *m_currentMarkerRecord =
nullptr;
116 QHash<QString, MaskDef> m_maskDefs;
117 QHash<QString, PatternDef> m_patternDefs;
118 QHash<QString, MarkerDef> m_markerDefs;
119 QHash<QString, FilterNodeInfo> m_filterDefs;
120 QQuickItemSpy *m_topLevelScaleSpy =
nullptr;
122 QHash<QString, QQuickTransformSource *> m_transformSourceItems;
123 QList<PendingLinkedTransform> m_pendingLinkedTransforms;
124 std::unique_ptr<QQuickGeneratorAnimationProvider> m_animationProvider;
125 QStack<
bool> m_scopePushed;
126 QMap<std::array<qreal, 4>, QEasingCurve> m_easingCache;
128 QList<std::function<
void()>> *activeRecord()
const;
129 QQuickShape *createShapeContainer();
130 void pushItem(QQuickItem *item);
131 QQuickItem *popItem();
132 QQuickItem *currentItem()
const;
134 void bindTextureSize(QQuickShaderEffectSource *ses);
135 void bindPatternTextureSize(QQuickShaderEffectSource *ses);
136 void bindPropertyAnimation(QObject *target,
const QString &property,
137 const QQuickAnimatedProperty::PropertyAnimation &anim,
138 const std::function<QVariant(
const QVariant &)> &extractor,
139 int valueIndex = 0,
const QVariant &resetValue = QVariant());
140 void bindAnimatedProperty(QObject *target,
const QString &property,
141 const QQuickAnimatedProperty &animatedProperty,
142 const std::function<QVariant(
const QVariant &)> &extractor,
144 void bindColorWithOpacity(QObject *target,
const QString &colorProperty,
145 const QQuickAnimatedProperty &color,
146 const QQuickAnimatedProperty &opacity,
147 std::function<
void(
const QColor &)> setter);
148 void generateItemAnimations(QQuickItem *item,
const NodeInfo &info);
149 QQuickTransform *createAnimatedTransformGroup(QQuickItem *item,
const NodeInfo &info);
150 void bindMotionPath(QQuickItem *item,
const QQuickAnimatedProperty &motionPath);
152 void generateMaskContainer(
const MaskNodeInfo &info);
153 void generateMask(QQuickItem *item,
const NodeInfo &info,
const QPointF &sourceOrigin);
154 void generatePatternContainer(
const PatternNodeInfo &info);
155 void generatePattern(QQuickShapePath *shapePath,
const PathNodeInfo &info,
156 const QRectF &boundingRect, QTransform &fillTransform);
157 void generateMarkers(
const PathNodeInfo &info);
158 QQuickItem *generateFilter(QQuickItem *item,
const NodeInfo &info, QPointF *outputOrigin);
159 QQuickShaderEffectSource *generateFilterStep(
const FilterNodeInfo::FilterStep &step,
160 QQuickShaderEffectSource *input1,
161 QQuickShaderEffectSource *input2,
162 const QRectF &stepRect,
const QRectF &filterRect);
163 QQuickShaderEffectSource *generateFilterMerge(
const QList<QQuickShaderEffectSource *> &inputs,
164 const QRectF &stepRect,
const QRectF &filterRect);
165 QQuickShaderEffectSource *generateFilterFlood(
const FilterNodeInfo::FilterStep &step,
166 QQuickShaderEffectSource *input,
167 const QRectF &stepRect,
const QRectF &filterRect);
168 QQuickShaderEffectSource *generateFilterOffset(
const FilterNodeInfo::FilterStep &step,
169 QQuickShaderEffectSource *input,
170 const QRectF &stepRect);
171 QQuickShaderEffectSource *generateFilterColorMatrix(
const FilterNodeInfo::FilterStep &step,
172 QQuickShaderEffectSource *input,
173 const QRectF &stepRect,
174 const QRectF &filterRect);
175 QQuickShaderEffectSource *generateFilterBlend(
const FilterNodeInfo::FilterStep &step,
176 QQuickShaderEffectSource *input1,
177 QQuickShaderEffectSource *input2,
178 const QRectF &stepRect,
const QRectF &filterRect);
179 QQuickShaderEffectSource *generateFilterComposite(
const FilterNodeInfo::FilterStep &step,
180 QQuickShaderEffectSource *input1,
181 QQuickShaderEffectSource *input2,
182 const QRectF &stepRect,
183 const QRectF &filterRect);
184 QQuickShaderEffectSource *generateFilterGaussianBlur(
const FilterNodeInfo::FilterStep &step,
185 QQuickShaderEffectSource *input,
186 const QRectF &stepRect,
187 const QRectF &filterRect);