summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHatem ElKharashy <hatem.elkharashy@qt.io>2024-02-21 10:02:54 +0200
committerEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>2024-02-22 08:39:33 +0100
commitab91b6b0a1d4ab1b83bfefcbfff60e7b2b47c74c (patch)
treebd24f758e6bd18cd657af1311c41624d45798245
parent45458549247cd6eaa7be68e8affbe6d207dae5d7 (diff)
Add enabler functions for svgtoqml
- Add a getter to QSvgUseNode to access the start position. - Add an overloaded function to the QSvgVisitor that operates on a QSvgNode. Change-Id: I5f4058df0b3e11a49207ce12ac1b726324aadf1d Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
-rw-r--r--src/svg/qsvggraphics_p.h1
-rw-r--r--src/svg/qsvgvisitor.cpp131
-rw-r--r--src/svg/qsvgvisitor_p.h2
3 files changed, 71 insertions, 63 deletions
diff --git a/src/svg/qsvggraphics_p.h b/src/svg/qsvggraphics_p.h
index a1cdf20..5b35956 100644
--- a/src/svg/qsvggraphics_p.h
+++ b/src/svg/qsvggraphics_p.h
@@ -226,6 +226,7 @@ public:
QString linkId() const { return m_linkId; }
void setLink(QSvgNode *link) { m_link = link; }
QSvgNode *link() const { return m_link; }
+ QPointF start() const { return m_start; }
private:
QSvgNode *m_link;
diff --git a/src/svg/qsvgvisitor.cpp b/src/svg/qsvgvisitor.cpp
index 7028e16..b0935aa 100644
--- a/src/svg/qsvgvisitor.cpp
+++ b/src/svg/qsvgvisitor.cpp
@@ -29,70 +29,9 @@ void QSvgVisitor::traverse(const QSvgStructureNode *node)
break;
}
- for (const auto *child : node->renderers()) {
- switch (child->type()) {
- case QSvgNode::Switch:
- case QSvgNode::Doc:
- case QSvgNode::Defs:
- case QSvgNode::Group:
- traverse(static_cast<const QSvgStructureNode *>(child));
- break;
- case QSvgNode::Animation:
- visitAnimationNode(static_cast<const QSvgAnimation *>(child));
- break;
- case QSvgNode::Circle:
- case QSvgNode::Ellipse:
- visitEllipseNode(static_cast<const QSvgEllipse *>(child));
- break;
- case QSvgNode::Image:
- visitImageNode(static_cast<const QSvgImage *>(child));
- break;
- case QSvgNode::Line:
- visitLineNode(static_cast<const QSvgLine *>(child));
- break;
- case QSvgNode::Path:
- visitPathNode(static_cast<const QSvgPath *>(child));
- break;
- case QSvgNode::Polygon:
- visitPolygonNode(static_cast<const QSvgPolygon *>(child));
- break;
- case QSvgNode::Polyline:
- visitPolylineNode(static_cast<const QSvgPolyline *>(child));
- break;
- case QSvgNode::Rect:
- visitRectNode(static_cast<const QSvgRect *>(child));
- break;
- case QSvgNode::Text:
- case QSvgNode::Textarea:
- visitTextNode(static_cast<const QSvgText *>(child));
- break;
- case QSvgNode::Tspan:
- visitTspanNode(static_cast<const QSvgTspan *>(child));
- break;
- case QSvgNode::Use:
- visitUseNode(static_cast<const QSvgUse *>(child));
- break;
- case QSvgNode::Video:
- visitVideoNode(static_cast<const QSvgVideo *>(child));
- break;
+ for (const auto *child : node->renderers())
+ traverse(child);
- // Enum values that don't have any QSvgNode classes yet:
- case QSvgNode::Mask:
- 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:
- qDebug() << "Unhandled type in switch" << child->type();
- break;
- }
- }
switch (node->type()) {
case QSvgNode::Switch:
visitSwitchNodeEnd(static_cast<const QSvgSwitch *>(node));
@@ -112,4 +51,70 @@ void QSvgVisitor::traverse(const QSvgStructureNode *node)
}
}
+void QSvgVisitor::traverse(const QSvgNode *node)
+{
+ switch (node->type()) {
+ case QSvgNode::Switch:
+ case QSvgNode::Doc:
+ case QSvgNode::Defs:
+ case QSvgNode::Group:
+ 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::Mask:
+ 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:
+ qDebug() << "Unhandled type in switch" << node->type();
+ break;
+ }
+}
+
QT_END_NAMESPACE
diff --git a/src/svg/qsvgvisitor_p.h b/src/svg/qsvgvisitor_p.h
index 53dd5a2..92222e6 100644
--- a/src/svg/qsvgvisitor_p.h
+++ b/src/svg/qsvgvisitor_p.h
@@ -25,6 +25,8 @@ QT_BEGIN_NAMESPACE
class Q_SVG_EXPORT QSvgVisitor {
public:
void traverse(const QSvgStructureNode *node);
+ void traverse(const QSvgNode *node);
+
virtual ~QSvgVisitor() {}
protected: