diff options
author | Hatem ElKharashy <hatem.elkharashy@qt.io> | 2024-02-21 10:02:54 +0200 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2024-02-22 08:39:33 +0100 |
commit | ab91b6b0a1d4ab1b83bfefcbfff60e7b2b47c74c (patch) | |
tree | bd24f758e6bd18cd657af1311c41624d45798245 | |
parent | 45458549247cd6eaa7be68e8affbe6d207dae5d7 (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.h | 1 | ||||
-rw-r--r-- | src/svg/qsvgvisitor.cpp | 131 | ||||
-rw-r--r-- | src/svg/qsvgvisitor_p.h | 2 |
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: |