summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dependencies.yaml2
-rw-r--r--src/svg/qsvggraphics.cpp10
-rw-r--r--src/svg/qsvggraphics_p.h6
-rw-r--r--src/svg/qsvghandler.cpp18
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,