aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrolsimpl/qquickiconimage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickcontrolsimpl/qquickiconimage.cpp')
-rw-r--r--src/quickcontrolsimpl/qquickiconimage.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/quickcontrolsimpl/qquickiconimage.cpp b/src/quickcontrolsimpl/qquickiconimage.cpp
index f5a14f3110..c2af3e0539 100644
--- a/src/quickcontrolsimpl/qquickiconimage.cpp
+++ b/src/quickcontrolsimpl/qquickiconimage.cpp
@@ -50,11 +50,22 @@ void QQuickIconImagePrivate::updateIcon()
const QUrl entryUrl = QUrl::fromLocalFile(entry->filename);
url = context ? context->resolvedUrl(entryUrl) : entryUrl;
isThemeIcon = true;
+ } else if (source.isEmpty()) {
+ std::unique_ptr<QIconEngine> iconEngine(QIconLoader::instance()->iconEngine(icon.iconName));
+ if (iconEngine && !iconEngine->isNull()) {
+ // ### TODO that's the best we can do for now to select different pixmaps based on the
+ // QuickItem's state. QQuickIconImage cannot know about the state of the control that
+ // uses it without adding more properties that are then synced up with the control.
+ const QIcon::Mode mode = q->isEnabled() ? QIcon::Normal : QIcon::Disabled;
+ const QImage image = iconEngine->scaledPixmap(size, mode, QIcon::Off, dpr).toImage();
+ setImage(image);
+ }
} else {
url = source;
isThemeIcon = false;
}
- q->load();
+ if (!url.isEmpty())
+ q->load();
updatingIcon = false;
}
@@ -71,7 +82,7 @@ void QQuickIconImagePrivate::updateFillMode()
updatingFillMode = true;
- const QSize pixmapSize = QSize(pix.width(), pix.height()) / calculateDevicePixelRatio();
+ const QSize pixmapSize = QSize(currentPix->width(), currentPix->height()) / calculateDevicePixelRatio();
if (pixmapSize.width() > q->width() || pixmapSize.height() > q->height())
q->setFillMode(QQuickImage::PreserveAspectFit);
else
@@ -106,6 +117,8 @@ void QQuickIconImage::setName(const QString &name)
d->icon.entries.clear();
d->icon = QIconLoader::instance()->loadIcon(name);
+ if (d->icon.iconName.isEmpty())
+ d->icon.iconName = name;
if (isComponentComplete())
d->updateIcon();
emit nameChanged();
@@ -173,12 +186,12 @@ void QQuickIconImage::pixmapChange()
// Don't apply the color if we're recursing (updateFillMode() can cause us to recurse).
if (!d->updatingFillMode && d->color.alpha() > 0) {
- QImage image = d->pix.image();
+ QImage image = d->currentPix->image();
if (!image.isNull()) {
QPainter painter(&image);
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
painter.fillRect(image.rect(), d->color);
- d->pix.setImage(image);
+ d->currentPix->setImage(image);
}
}
}