#include <KIO/PreviewJob>
#include <KIconEffect>
#include <KIconLoader>
+#include <KIconUtils>
#include <KJobWidgets>
#include <KLocalizedString>
#include <KSeparator>
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);
}
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);
}
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
auto arrowSize = qMax(PLAY_ARROW_SIZE, maxDim / 8);
// compute relative pixel positions
- const int zeroX = static_cast<int>((p.width() / 2 - arrowSize / 2) / pixmap.devicePixelRatio());
- const int zeroY = static_cast<int>((p.height() / 2 - arrowSize / 2) / pixmap.devicePixelRatio());
+ const int zeroX = static_cast<int>((p.width() / 2 - arrowSize / 2) / p.devicePixelRatio());
+ const int zeroY = static_cast<int>((p.height() / 2 - arrowSize / 2) / p.devicePixelRatio());
QPolygon arrow;
arrow << QPoint(zeroX, zeroY);
// 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);
}
}
m_phononWidget->setVideoSize(QSize(maxWidth, maxWidth));
}
}
+
+#include "moc_informationpanelcontent.cpp"