blob: 8c1d3f54b45bb3812a9178d9910e3801ac4f33d1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qsvgvisitor_p.h"
QT_BEGIN_NAMESPACE
void QSvgVisitor::traverse(const QSvgStructureNode *node)
{
switch (node->type()) {
case QSvgNode::Switch:
if (!visitSwitchNodeStart(static_cast<const QSvgSwitch *>(node)))
return;
break;
case QSvgNode::Doc:
if (!visitDocumentNodeStart(static_cast<const QSvgTinyDocument *>(node)))
return;
break;
case QSvgNode::Defs:
if (!visitDefsNodeStart(static_cast<const QSvgDefs *>(node)))
return;
break;
case QSvgNode::Group:
if (!visitGroupNodeStart(static_cast<const QSvgG *>(node)))
return;
break;
case QSvgNode::Mask:
if (!visitMaskNodeStart(static_cast<const QSvgMask *>(node)))
return;
break;
default:
Q_UNREACHABLE();
break;
}
for (const auto *child : node->renderers())
traverse(child);
switch (node->type()) {
case QSvgNode::Switch:
visitSwitchNodeEnd(static_cast<const QSvgSwitch *>(node));
break;
case QSvgNode::Doc:
visitDocumentNodeEnd(static_cast<const QSvgTinyDocument *>(node));
break;
case QSvgNode::Defs:
visitDefsNodeEnd(static_cast<const QSvgDefs *>(node));
break;
case QSvgNode::Group:
visitGroupNodeEnd(static_cast<const QSvgG *>(node));
break;
case QSvgNode::Mask:
visitMaskNodeEnd(static_cast<const QSvgMask *>(node));
break;
default:
Q_UNREACHABLE();
break;
}
}
void QSvgVisitor::traverse(const QSvgNode *node)
{
switch (node->type()) {
case QSvgNode::Switch:
case QSvgNode::Doc:
case QSvgNode::Defs:
case QSvgNode::Group:
case QSvgNode::Mask:
traverse(static_cast<const QSvgStructureNode *>(node));
break;
case QSvgNode::Animation:
visitAnimationNode(static_cast<const QSvgAnimation *>(node));
break;
case QSvgNode::Circle:
case QSvgNode::Ellipse:
visitEllipseNode(static_cast<const QSvgEllipse *>(node));
break;
case QSvgNode::Image:
visitImageNode(static_cast<const QSvgImage *>(node));
break;
case QSvgNode::Line:
visitLineNode(static_cast<const QSvgLine *>(node));
break;
case QSvgNode::Path:
visitPathNode(static_cast<const QSvgPath *>(node));
break;
case QSvgNode::Polygon:
visitPolygonNode(static_cast<const QSvgPolygon *>(node));
break;
case QSvgNode::Polyline:
visitPolylineNode(static_cast<const QSvgPolyline *>(node));
break;
case QSvgNode::Rect:
visitRectNode(static_cast<const QSvgRect *>(node));
break;
case QSvgNode::Text:
case QSvgNode::Textarea:
visitTextNode(static_cast<const QSvgText *>(node));
break;
case QSvgNode::Tspan:
visitTspanNode(static_cast<const QSvgTspan *>(node));
break;
case QSvgNode::Use:
visitUseNode(static_cast<const QSvgUse *>(node));
break;
case QSvgNode::Video:
visitVideoNode(static_cast<const QSvgVideo *>(node));
break;
// Enum values that don't have any QSvgNode classes yet:
case QSvgNode::Symbol:
case QSvgNode::Marker:
case QSvgNode::Pattern:
case QSvgNode::Filter:
case QSvgNode::FeMerge:
case QSvgNode::FeMergenode:
case QSvgNode::FeColormatrix:
case QSvgNode::FeGaussianblur:
case QSvgNode::FeOffset:
case QSvgNode::FeComposite:
case QSvgNode::FeFlood:
case QSvgNode::FeUnsupported:
qDebug() << "Unhandled type in switch" << node->type();
break;
}
}
QT_END_NAMESPACE
|