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