diff options
-rw-r--r-- | dependencies.yaml | 2 | ||||
-rw-r--r-- | src/svg/qsvggraphics.cpp | 10 | ||||
-rw-r--r-- | src/svg/qsvggraphics_p.h | 6 | ||||
-rw-r--r-- | src/svg/qsvghandler.cpp | 18 |
4 files changed, 27 insertions, 9 deletions
diff --git a/dependencies.yaml b/dependencies.yaml index 062c508..69e06dc 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -1,4 +1,4 @@ dependencies: ../qtbase: - ref: 488545ca72b7f2a59401a42c2c264f38916e15d1 + ref: 0cd5eb895cc96126a495eb3d2d258be47eed193a required: true diff --git a/src/svg/qsvggraphics.cpp b/src/svg/qsvggraphics.cpp index 5431a24..f26ad9f 100644 --- a/src/svg/qsvggraphics.cpp +++ b/src/svg/qsvggraphics.cpp @@ -69,10 +69,14 @@ bool QSvgEllipse::separateFillStroke() const return true; } -QSvgImage::QSvgImage(QSvgNode *parent, const QImage &image, +QSvgImage::QSvgImage(QSvgNode *parent, + const QImage &image, + const QString &filename, const QRectF &bounds) - : QSvgNode(parent), m_image(image), - m_bounds(bounds) + : QSvgNode(parent) + , m_filename(filename) + , m_image(image) + , m_bounds(bounds) { if (m_bounds.width() == 0.0) m_bounds.setWidth(static_cast<qreal>(m_image.width())); diff --git a/src/svg/qsvggraphics_p.h b/src/svg/qsvggraphics_p.h index ad62cc8..9d52564 100644 --- a/src/svg/qsvggraphics_p.h +++ b/src/svg/qsvggraphics_p.h @@ -59,7 +59,9 @@ public: class Q_SVG_EXPORT QSvgImage : public QSvgNode { public: - QSvgImage(QSvgNode *parent, const QImage &image, + QSvgImage(QSvgNode *parent, + const QImage &image, + const QString &filename, const QRectF &bounds); void drawCommand(QPainter *p, QSvgExtraStates &states) override; Type type() const override; @@ -67,7 +69,9 @@ public: QRectF rect() const { return m_bounds; } const QImage &image() const { return m_image; } + QString filename() const { return m_filename; } private: + QString m_filename; QImage m_image; QRectF m_bounds; }; diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp index bf906e8..b6b94d3 100644 --- a/src/svg/qsvghandler.cpp +++ b/src/svg/qsvghandler.cpp @@ -2869,6 +2869,12 @@ static QSvgNode *createImageNode(QSvgNode *parent, } QImage image; + enum { + NotLoaded, + LoadedFromData, + LoadedFromFile + } filenameType = NotLoaded; + if (filename.startsWith(QLatin1String("data"))) { int idx = filename.lastIndexOf(QLatin1String("base64,")); if (idx != -1) { @@ -2876,10 +2882,11 @@ static QSvgNode *createImageNode(QSvgNode *parent, const QString dataStr = filename.mid(idx); QByteArray data = QByteArray::fromBase64(dataStr.toLatin1()); image = QImage::fromData(data); - } else { - qCDebug(lcSvgHandler) << "QSvgHandler::createImageNode: Unrecognized inline image format!"; + filenameType = LoadedFromData; } - } else { + } + + if (image.isNull()) { const auto *file = qobject_cast<QFile *>(handler->device()); if (file) { QUrl url(filename); @@ -2889,8 +2896,10 @@ static QSvgNode *createImageNode(QSvgNode *parent, } } - if (handler->trustedSourceMode() || !QImageReader::imageFormat(filename).startsWith("svg")) + if (handler->trustedSourceMode() || !QImageReader::imageFormat(filename).startsWith("svg")) { image = QImage(filename); + filenameType = LoadedFromFile; + } } if (image.isNull()) { @@ -2903,6 +2912,7 @@ static QSvgNode *createImageNode(QSvgNode *parent, QSvgNode *img = new QSvgImage(parent, image, + filenameType == LoadedFromFile ? filename : QString{}, QRectF(nx, ny, nwidth, |