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
qsvgvisitor.cpp
Go to the documentation of this file.
1// Copyright (C) 2023 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// Qt-Security score:significant reason:default
4
5
7
9
10void QSvgVisitor::traverse(const QSvgStructureNode *node)
11{
12 switch (node->type()) {
13 case QSvgNode::Switch:
14 if (!visitSwitchNodeStart(static_cast<const QSvgSwitch *>(node)))
15 return;
16 break;
17 case QSvgNode::Doc:
18 if (!visitDocumentNodeStart(static_cast<const QSvgDocument *>(node)))
19 return;
20 break;
21 case QSvgNode::Defs:
22 if (!visitDefsNodeStart(static_cast<const QSvgDefs *>(node)))
23 return;
24 break;
25 case QSvgNode::Group:
26 if (!visitGroupNodeStart(static_cast<const QSvgG *>(node)))
27 return;
28 break;
29 case QSvgNode::Mask:
30 if (!visitMaskNodeStart(static_cast<const QSvgMask *>(node)))
31 return;
32 break;
33 case QSvgNode::Symbol:
34 if (!visitSymbolNodeStart(static_cast<const QSvgSymbol *>(node)))
35 return;
36 break;
37 case QSvgNode::Filter:
38 if (!visitFilterNodeStart(static_cast<const QSvgFilterContainer *>(node)))
39 return;
40 break;
41 case QSvgNode::Marker:
42 if (!visitMarkerNodeStart(static_cast<const QSvgMarker *>(node)))
43 return;
44 break;
45 case QSvgNode::Pattern:
46 if (!visitPatternNodeStart(static_cast<const QSvgPattern *>(node)))
47 return;
48 break;
49 case QSvgNode::FeMerge:
50 case QSvgNode::FeMergenode:
51 case QSvgNode::FeColormatrix:
52 case QSvgNode::FeGaussianblur:
53 case QSvgNode::FeOffset:
54 case QSvgNode::FeComposite:
55 case QSvgNode::FeFlood:
56 case QSvgNode::FeBlend:
57 if (!visitFeFilterPrimitiveNodeStart(static_cast<const QSvgFeFilterPrimitive *>(node)))
58 return;
59 break;
60 default:
61 Q_UNREACHABLE();
62 break;
63 }
64
65 for (auto &child : node->renderers())
66 traverse(child.get());
67
68 switch (node->type()) {
69 case QSvgNode::Switch:
70 visitSwitchNodeEnd(static_cast<const QSvgSwitch *>(node));
71 break;
72 case QSvgNode::Doc:
73 visitDocumentNodeEnd(static_cast<const QSvgDocument *>(node));
74 break;
75 case QSvgNode::Defs:
76 visitDefsNodeEnd(static_cast<const QSvgDefs *>(node));
77 break;
78 case QSvgNode::Group:
79 visitGroupNodeEnd(static_cast<const QSvgG *>(node));
80 break;
81 case QSvgNode::Mask:
82 visitMaskNodeEnd(static_cast<const QSvgMask *>(node));
83 break;
84 case QSvgNode::Symbol:
85 visitSymbolNodeEnd(static_cast<const QSvgSymbol *>(node));
86 break;
87 case QSvgNode::Filter:
88 visitFilterNodeEnd(static_cast<const QSvgFilterContainer *>(node));
89 break;
90 case QSvgNode::Marker:
91 visitMarkerNodeEnd(static_cast<const QSvgMarker *>(node));
92 break;
93 case QSvgNode::Pattern:
94 visitPatternNodeEnd(static_cast<const QSvgPattern *>(node));
95 break;
96 case QSvgNode::FeMerge:
97 case QSvgNode::FeMergenode:
98 case QSvgNode::FeColormatrix:
99 case QSvgNode::FeGaussianblur:
100 case QSvgNode::FeOffset:
101 case QSvgNode::FeComposite:
102 case QSvgNode::FeFlood:
103 case QSvgNode::FeBlend:
104 visitFeFilterPrimitiveNodeEnd(static_cast<const QSvgFeFilterPrimitive *>(node));
105 break;
106 default:
107 Q_UNREACHABLE();
108 break;
109 }
110}
111
112void QSvgVisitor::traverse(const QSvgNode *node)
113{
114 switch (node->type()) {
115 case QSvgNode::Switch:
116 case QSvgNode::Doc:
117 case QSvgNode::Defs:
118 case QSvgNode::Group:
119 case QSvgNode::Mask:
120 case QSvgNode::Symbol:
121 case QSvgNode::Filter:
122 case QSvgNode::FeMerge:
123 case QSvgNode::FeMergenode:
124 case QSvgNode::FeColormatrix:
125 case QSvgNode::FeGaussianblur:
126 case QSvgNode::FeOffset:
127 case QSvgNode::FeComposite:
128 case QSvgNode::FeFlood:
129 case QSvgNode::FeBlend:
130 case QSvgNode::Marker:
131 case QSvgNode::Pattern:
132 traverse(static_cast<const QSvgStructureNode *>(node));
133 break;
134 case QSvgNode::AnimateColor:
135 case QSvgNode::AnimateTransform:
136 visitAnimateNode(static_cast<const QSvgAnimateNode *>(node));
137 break;
138 case QSvgNode::Circle:
139 case QSvgNode::Ellipse:
140 visitEllipseNode(static_cast<const QSvgEllipse *>(node));
141 break;
142 case QSvgNode::Image:
143 visitImageNode(static_cast<const QSvgImage *>(node));
144 break;
145 case QSvgNode::Line:
146 visitLineNode(static_cast<const QSvgLine *>(node));
147 break;
148 case QSvgNode::Path:
149 visitPathNode(static_cast<const QSvgPath *>(node));
150 break;
151 case QSvgNode::Polygon:
152 visitPolygonNode(static_cast<const QSvgPolygon *>(node));
153 break;
154 case QSvgNode::Polyline:
155 visitPolylineNode(static_cast<const QSvgPolyline *>(node));
156 break;
157 case QSvgNode::Rect:
158 visitRectNode(static_cast<const QSvgRect *>(node));
159 break;
160 case QSvgNode::Text:
161 case QSvgNode::Textarea:
162 visitTextNode(static_cast<const QSvgText *>(node));
163 break;
164 case QSvgNode::Tspan:
165 visitTspanNode(static_cast<const QSvgTspan *>(node));
166 break;
167 case QSvgNode::Use:
168 visitUseNode(static_cast<const QSvgUse *>(node));
169 break;
170 case QSvgNode::Video:
171 visitVideoNode(static_cast<const QSvgVideo *>(node));
172 break;
173
174 // Enum values that don't have any QSvgNode classes yet:
175 case QSvgNode::FeUnsupported:
176 qDebug() << "Unhandled type in switch" << node->type();
177 break;
178 }
179}
180
181QT_END_NAMESPACE
Combined button and popup list for selecting options.