Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickitemgenerator_p.h
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQUICKITEMGENERATOR_P_H
5#define QQUICKITEMGENERATOR_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
20
21#include <QtCore/qhash.h>
22#include <QtCore/qstack.h>
23
24#include <functional>
25
26QT_BEGIN_NAMESPACE
27
28class QQuickItem;
29class QQuickShape;
30class QQuickShapePath;
31class QQmlContext;
32class QQuickShaderEffect;
33class QQuickShaderEffectSource;
34class QQuickMatrix4x4;
35class QQuickItemSpy;
36
37class Q_QUICKVECTORIMAGEGENERATOR_EXPORT QQuickItemGenerator : public QQuickGenerator
38{
39public:
40 QQuickItemGenerator(const QString &fileName, QQuickVectorImageGenerator::GeneratorFlags flags,
41 QQmlContext *context = nullptr);
42 ~QQuickItemGenerator() override;
43
44 QQuickItem *takeRootItem();
45
46 QString generateNodeBase(const NodeInfo &info, const QString &idSuffix = QString{}) override;
47 bool generateRootNode(const StructureNodeInfo &info) override;
48 bool generateStructureNode(const StructureNodeInfo &info) override;
49 void generateUseNode(const UseNodeInfo &info) override;
50 bool generateDefsNode(const StructureNodeInfo &info) override;
51 void generateDefsInstantiationNode(const StructureNodeInfo &info) override;
52 void generateImageNode(const ImageNodeInfo &info) override;
53 void generatePath(const PathNodeInfo &info,
54 const QRectF &overrideBoundingRect = QRectF{}) override;
55 void generateNode(const NodeInfo &info) override;
56 void generateTextNode(const TextNodeInfo &info) override;
57 void generateFilterNode(const FilterNodeInfo &info) override;
58 bool generateMaskNode(const MaskNodeInfo &info) override;
59 bool generateMarkerNode(const MarkerNodeInfo &info) override;
60 bool generatePatternNode(const PatternNodeInfo &info) override;
61 void outputShapePath(const PathNodeInfo &info, const QPainterPath *path,
62 const QQuadPath *quadPath,
63 QQuickVectorImageGenerator::PathSelector pathSelector,
64 const QRectF &boundingRect) override;
65
66private:
67 struct MaskDef
68 {
69 QQuickItem *container = nullptr;
70 QRectF maskRect;
71 bool isMaskRectRelativeCoordinates = false;
72 bool isMaskContentRelativeCoordinates = false;
73 QQuickItem *transformer = nullptr;
74 QQuickMatrix4x4 *transformerMatrix = nullptr;
75 };
76
77 struct PatternDef
78 {
79 QQuickItem *container = nullptr;
80 QRectF patternRect;
81 bool isPatternRectRelativeCoordinates = false;
82 };
83
84 struct MarkerDef
85 {
86 QList<std::function<void()>> recording;
87 MarkerNodeInfo info;
88 };
89
90 QQuickItem *m_rootItem = nullptr;
91 QStack<QQuickItem *> m_itemStack;
92 QQmlContext *m_context = nullptr;
93 QSizeF m_containerSize;
94 quint32 m_nodeCounter = 0;
95 QHash<QString, QList<std::function<void()>>> m_defs;
96 QList<std::function<void()>> *m_currentDefsRecord = nullptr;
97 QList<std::function<void()>> *m_currentMarkerRecord = nullptr;
98 QHash<QString, MaskDef> m_maskDefs;
99 QHash<QString, PatternDef> m_patternDefs;
100 QHash<QString, MarkerDef> m_markerDefs;
101 QHash<QString, FilterNodeInfo> m_filterDefs;
102 QQuickItemSpy *m_topLevelScaleSpy = nullptr;
103
104 QList<std::function<void()>> *activeRecord() const;
105 QQuickShape *createShapeContainer();
106 void pushItem(QQuickItem *item);
107 QQuickItem *popItem();
108 QQuickItem *currentItem() const;
109
110 void bindTextureSize(QQuickShaderEffectSource *ses);
111 void generateMaskContainer(const MaskNodeInfo &info);
112 void generateMask(QQuickItem *item, const NodeInfo &info);
113 void generatePatternContainer(const PatternNodeInfo &info);
114 void generatePattern(QQuickShapePath *shapePath, const PathNodeInfo &info,
115 const QRectF &boundingRect, QTransform &fillTransform);
116 void generateMarkers(const PathNodeInfo &info);
117 QQuickItem *generateFilter(QQuickItem *item, const NodeInfo &info);
118 QQuickShaderEffectSource *generateFilterStep(const FilterNodeInfo::FilterStep &step,
119 QQuickShaderEffectSource *input1,
120 QQuickShaderEffectSource *input2,
121 const QRectF &stepRect, const QRectF &filterRect);
122 QQuickShaderEffectSource *generateFilterMerge(const QList<QQuickShaderEffectSource *> &inputs,
123 const QRectF &stepRect, const QRectF &filterRect);
124 QQuickShaderEffectSource *generateFilterFlood(const FilterNodeInfo::FilterStep &step,
125 QQuickShaderEffectSource *input,
126 const QRectF &stepRect, const QRectF &filterRect);
127 QQuickShaderEffectSource *generateFilterOffset(const FilterNodeInfo::FilterStep &step,
128 QQuickShaderEffectSource *input,
129 const QRectF &stepRect);
130 QQuickShaderEffectSource *generateFilterColorMatrix(const FilterNodeInfo::FilterStep &step,
131 QQuickShaderEffectSource *input,
132 const QRectF &stepRect,
133 const QRectF &filterRect);
134 QQuickShaderEffectSource *generateFilterBlend(const FilterNodeInfo::FilterStep &step,
135 QQuickShaderEffectSource *input1,
136 QQuickShaderEffectSource *input2,
137 const QRectF &stepRect, const QRectF &filterRect);
138 QQuickShaderEffectSource *generateFilterComposite(const FilterNodeInfo::FilterStep &step,
139 QQuickShaderEffectSource *input1,
140 QQuickShaderEffectSource *input2,
141 const QRectF &stepRect,
142 const QRectF &filterRect);
143 QQuickShaderEffectSource *generateFilterGaussianBlur(const FilterNodeInfo::FilterStep &step,
144 QQuickShaderEffectSource *input,
145 const QRectF &stepRect,
146 const QRectF &filterRect);
147};
148
149QT_END_NAMESPACE
150
151#endif // QQUICKITEMGENERATOR_P_H
Combined button and popup list for selecting options.
static qreal meanAngle(QPointF p0, QPointF p1, QPointF p2)
static QRectF resolveRect(const QRectF &rect, FilterNodeInfo::CoordinateSystem cs, const QRectF &itemBounds)
static QQuickShaderEffect * makeFilterEffect(QQuickItem *inputItem, const QUrl &shader, QQmlContext *context, QQuickItem *parent)
static QQuickShaderEffectSource * makeSES(QQuickItem *item, const QRectF &rect, QQuickItem *parent)
static QQuickShapeGradient * createShapeGradient(const QGradient &grad, const QRectF &coordSys, QObject *parent)
static QQuickShaderEffectSource * makeEffectSES(QQuickShaderEffect *effect, const QRectF &stepRect, const QRectF &filterRect, QQuickItem *parent)