diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-04-27 03:03:49 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-04-27 03:03:49 +0200 |
commit | 7e7ed705efc51134b27820d76beceefc62ab0b3d (patch) | |
tree | 607747cdb8255d96dd5b122fd524d1ffa5aa4f4b /src/svg/qsvggraphics.cpp | |
parent | 47c04fb6303e3b812ab12f69e17fb6acae0c49ec (diff) | |
parent | 6292c75fb742f2877630ec22fb3a9b0d3afc9a96 (diff) | |
download | qtsvg-7e7ed705efc51134b27820d76beceefc62ab0b3d.tar.gz |
Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I4a7a5ad6cd164f0d440217566bd647ecde4fddfb
Diffstat (limited to 'src/svg/qsvggraphics.cpp')
-rw-r--r-- | src/svg/qsvggraphics.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/svg/qsvggraphics.cpp b/src/svg/qsvggraphics.cpp index 12f2349..bcd2452 100644 --- a/src/svg/qsvggraphics.cpp +++ b/src/svg/qsvggraphics.cpp @@ -41,11 +41,12 @@ #include "qsvgfont_p.h" -#include "qpainter.h" -#include "qtextdocument.h" -#include "qabstracttextdocumentlayout.h" -#include "qtextcursor.h" -#include "qdebug.h" +#include <qabstracttextdocumentlayout.h> +#include <qdebug.h> +#include <qpainter.h> +#include <qscopedvaluerollback.h> +#include <qtextcursor.h> +#include <qtextdocument.h> #include <math.h> #include <limits.h> @@ -458,14 +459,14 @@ void QSvgText::addText(const QString &text) } QSvgUse::QSvgUse(const QPointF &start, QSvgNode *parent, QSvgNode *node) - : QSvgNode(parent), m_link(node), m_start(start) + : QSvgNode(parent), m_link(node), m_start(start), m_recursing(false) { } void QSvgUse::draw(QPainter *p, QSvgExtraStates &states) { - if (Q_UNLIKELY(!m_link || isDescendantOf(m_link))) + if (Q_UNLIKELY(!m_link || isDescendantOf(m_link) || m_recursing)) return; applyStyle(p, states); @@ -473,7 +474,10 @@ void QSvgUse::draw(QPainter *p, QSvgExtraStates &states) if (!m_start.isNull()) { p->translate(m_start); } - m_link->draw(p, states); + { + QScopedValueRollback<bool> guard(m_recursing, true); + m_link->draw(p, states); + } if (!m_start.isNull()) { p->translate(-m_start); } @@ -556,7 +560,8 @@ QSvgNode::Type QSvgVideo::type() const QRectF QSvgUse::bounds(QPainter *p, QSvgExtraStates &states) const { QRectF bounds; - if (Q_LIKELY(m_link && !isDescendantOf(m_link))) { + if (Q_LIKELY(m_link && !isDescendantOf(m_link) && !m_recursing)) { + QScopedValueRollback<bool> guard(m_recursing, true); p->translate(m_start); bounds = m_link->transformedBounds(p, states); p->translate(-m_start); |