summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoni Poikelin <joni.poikelin@theqtcompany.com>2016-05-12 12:55:33 +0300
committerJoni Poikelin <joni.poikelin@theqtcompany.com>2016-05-12 10:51:45 +0000
commit109def32cd95af417d1f6a34996140f6aa46b857 (patch)
tree4221d5d52c61eeb7af1560eba59759c69f23c9e7
parentcf25ebcf482ada36f5b5e0bb983a01cf2ab42f46 (diff)
downloadqtsvg-109def32cd95af417d1f6a34996140f6aa46b857.tar.gz
Fix QSvgIconEngine fallback to try icon with same state first
If icon is not explicitly set, QSvgIconEngine always took Normal Off icon. Task-number: QTBUG-53328 Change-Id: I404206b0244d0009f7be1f520c2e84c0b7cd3e71 Reviewed-by: Andy Shaw <andy.shaw@theqtcompany.com> Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
-rw-r--r--src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp b/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
index 0ccf551..086f5a9 100644
--- a/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
+++ b/src/plugins/iconengines/svgiconengine/qsvgiconengine.cpp
@@ -116,10 +116,13 @@ QSize QSvgIconEngine::actualSize(const QSize &size, QIcon::Mode mode,
void QSvgIconEnginePrivate::loadDataForModeAndState(QSvgRenderer *renderer, QIcon::Mode mode, QIcon::State state)
{
QByteArray buf;
+ const QIcon::State oppositeState = state == QIcon::Off ? QIcon::On : QIcon::Off;
if (svgBuffers) {
buf = svgBuffers->value(hashKey(mode, state));
if (buf.isEmpty())
- buf = svgBuffers->value(hashKey(QIcon::Normal, QIcon::Off));
+ buf = svgBuffers->value(hashKey(QIcon::Normal, state));
+ if (buf.isEmpty())
+ buf = svgBuffers->value(hashKey(QIcon::Normal, oppositeState));
}
if (!buf.isEmpty()) {
#ifndef QT_NO_COMPRESS
@@ -129,7 +132,9 @@ void QSvgIconEnginePrivate::loadDataForModeAndState(QSvgRenderer *renderer, QIco
} else {
QString svgFile = svgFiles.value(hashKey(mode, state));
if (svgFile.isEmpty())
- svgFile = svgFiles.value(hashKey(QIcon::Normal, QIcon::Off));
+ svgFile = svgFiles.value(hashKey(QIcon::Normal, state));
+ if (svgFile.isEmpty())
+ svgFile = svgFiles.value(hashKey(QIcon::Normal, oppositeState));
if (!svgFile.isEmpty())
renderer->load(svgFile);
}