diff options
Diffstat (limited to 'src/quickcontrolsimpl/qquickiconimage.cpp')
-rw-r--r-- | src/quickcontrolsimpl/qquickiconimage.cpp | 21 |
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); } } } |