X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/dcd5c994bb1d331b94fdea8a5c6cd55a471b34b8..9df6ef77aadbd2c142bc666d3c998d9ece47f7fe:/src/panels/information/informationpanelcontent.cpp diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index d731d4de7..14a470b11 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -178,6 +179,7 @@ void InformationPanelContent::refreshPixmapView() m_previewJob = new KIO::PreviewJob(KFileItemList() << m_item, QSize(m_preview->width(), m_preview->height()), &plugins); m_previewJob->setScaleType(KIO::PreviewJob::Unscaled); m_previewJob->setIgnoreMaximumSize(m_item.isLocalFile() && !m_item.isSlow()); + m_previewJob->setDevicePixelRatio(devicePixelRatioF()); if (m_previewJob->uiDelegate()) { KJobWidgets::setWindow(m_previewJob, this); } @@ -350,8 +352,9 @@ bool InformationPanelContent::gestureEvent(QGestureEvent *event) void InformationPanelContent::showIcon(const KFileItem &item) { m_outdatedPreviewTimer->stop(); - QPixmap pixmap = QIcon::fromTheme(item.iconName()).pixmap(m_preview->height(), m_preview->width()); - KIconLoader::global()->drawOverlays(item.overlays(), pixmap, KIconLoader::Desktop); + QIcon icon = QIcon::fromTheme(item.iconName()); + QPixmap pixmap = KIconUtils::addOverlays(icon, item.overlays()).pixmap(m_preview->size(), devicePixelRatioF()); + pixmap.setDevicePixelRatio(devicePixelRatioF()); m_preview->setPixmap(pixmap); } @@ -360,7 +363,22 @@ void InformationPanelContent::showPreview(const KFileItem &item, const QPixmap & m_outdatedPreviewTimer->stop(); QPixmap p = pixmap; - KIconLoader::global()->drawOverlays(item.overlays(), p, KIconLoader::Desktop); + if (!item.overlays().isEmpty()) { + // Avoid scaling the images that are smaller than the preview size, to be consistent when there is no overlays + if (pixmap.height() < m_preview->height() && pixmap.width() < m_preview->width()) { + p = QPixmap(m_preview->size() * devicePixelRatioF()); + p.fill(Qt::transparent); + p.setDevicePixelRatio(devicePixelRatioF()); + + QPainter painter(&p); + painter.drawPixmap(QPointF{m_preview->width() / 2.0 - pixmap.width() / pixmap.devicePixelRatioF() / 2, + m_preview->height() / 2.0 - pixmap.height() / pixmap.devicePixelRatioF() / 2} + .toPoint(), + pixmap); + } + p = KIconUtils::addOverlays(p, item.overlays()).pixmap(m_preview->size(), devicePixelRatioF()); + p.setDevicePixelRatio(devicePixelRatioF()); + } if (m_isVideo) { // adds a play arrow overlay @@ -369,8 +387,8 @@ void InformationPanelContent::showPreview(const KFileItem &item, const QPixmap & auto arrowSize = qMax(PLAY_ARROW_SIZE, maxDim / 8); // compute relative pixel positions - const int zeroX = static_cast((p.width() / 2 - arrowSize / 2) / pixmap.devicePixelRatio()); - const int zeroY = static_cast((p.height() / 2 - arrowSize / 2) / pixmap.devicePixelRatio()); + const int zeroX = static_cast((p.width() / 2 - arrowSize / 2) / p.devicePixelRatio()); + const int zeroY = static_cast((p.height() / 2 - arrowSize / 2) / p.devicePixelRatio()); QPolygon arrow; arrow << QPoint(zeroX, zeroY); @@ -410,8 +428,8 @@ void InformationPanelContent::markOutdatedPreview() // use it until the preview is done showIcon(m_item); } else { - KIconEffect *iconEffect = KIconLoader::global()->iconEffect(); - QPixmap disabledPixmap = iconEffect->apply(m_preview->pixmap(), KIconLoader::Desktop, KIconLoader::DisabledState); + QPixmap disabledPixmap = m_preview->pixmap(); + KIconEffect::toDisabled(disabledPixmap); m_preview->setPixmap(disabledPixmap); } } @@ -489,3 +507,5 @@ void InformationPanelContent::adjustWidgetSizes(int width) m_phononWidget->setVideoSize(QSize(maxWidth, maxWidth)); } } + +#include "moc_informationpanelcontent.cpp"