diff --git a/app/documentinfoprovider.cpp b/app/documentinfoprovider.cpp --- a/app/documentinfoprovider.cpp +++ b/app/documentinfoprovider.cpp @@ -23,7 +23,7 @@ // Qt #include - +#include // KDE // Local @@ -50,7 +50,8 @@ Q_ASSERT(outFullSize); *outPix = QPixmap(); *outFullSize = QSize(); - const int pixelSize = ThumbnailGroup::pixelSize(group); + qreal dpr = qApp->devicePixelRatio(); + const int pixelSize = ThumbnailGroup::pixelSize(group) * dpr; Document::Ptr doc = DocumentFactory::instance()->getCachedDocument(url); if (!doc) { diff --git a/lib/thumbnailprovider/thumbnailgenerator.cpp b/lib/thumbnailprovider/thumbnailgenerator.cpp --- a/lib/thumbnailprovider/thumbnailgenerator.cpp +++ b/lib/thumbnailprovider/thumbnailgenerator.cpp @@ -34,6 +34,7 @@ #endif // Qt +#include #include #include #include @@ -270,7 +271,8 @@ { QMutexLocker lock(&mMutex); pixPath = mPixPath; - pixelSize = ThumbnailGroup::pixelSize(mThumbnailGroup); + qreal dpr = qApp->devicePixelRatio(); + pixelSize = ThumbnailGroup::pixelSize(mThumbnailGroup) * dpr; } Q_ASSERT(!pixPath.isNull()); diff --git a/lib/thumbnailprovider/thumbnailprovider.cpp b/lib/thumbnailprovider/thumbnailprovider.cpp --- a/lib/thumbnailprovider/thumbnailprovider.cpp +++ b/lib/thumbnailprovider/thumbnailprovider.cpp @@ -399,7 +399,8 @@ if (largeImage.isNull()) { return image; } - int size = ThumbnailGroup::pixelSize(ThumbnailGroup::Normal); + qreal dpr = qApp->devicePixelRatio(); + int size = ThumbnailGroup::pixelSize(ThumbnailGroup::Normal) * dpr; image = largeImage.scaled(size, size, Qt::KeepAspectRatio, Qt::SmoothTransformation); Q_FOREACH(const QString& key, largeImage.textKeys()) { QString text = largeImage.text(key); @@ -494,7 +495,8 @@ mState = STATE_PREVIEWJOB; KFileItemList list; list.append(mCurrentItem); - const int pixelSize = ThumbnailGroup::pixelSize(mThumbnailGroup); + qreal dpr = qApp->devicePixelRatio(); + const int pixelSize = ThumbnailGroup::pixelSize(mThumbnailGroup) * dpr; if (mPreviewPlugins.isEmpty()) { mPreviewPlugins = KIO::PreviewJob::availablePlugins(); } diff --git a/lib/thumbnailview/previewitemdelegate.cpp b/lib/thumbnailview/previewitemdelegate.cpp --- a/lib/thumbnailview/previewitemdelegate.cpp +++ b/lib/thumbnailview/previewitemdelegate.cpp @@ -718,11 +718,12 @@ fgColor = viewport->palette().color(viewport->foregroundRole()); // Compute thumbnailRect + qreal dpr = qApp->devicePixelRatio(); QRect thumbnailRect = QRect( - rect.left() + (rect.width() - thumbnailPix.width()) / 2, - rect.top() + (thumbnailHeight - thumbnailPix.height()) + ITEM_MARGIN, - thumbnailPix.width(), - thumbnailPix.height()); + rect.left() + (rect.width() - thumbnailPix.width() / dpr) / 2, + rect.top() + (thumbnailHeight - thumbnailPix.height() / dpr) + ITEM_MARGIN, + thumbnailPix.width() / dpr, + thumbnailPix.height() / dpr); // Draw background const QRect backgroundRect = thumbnailRect.adjusted(-ITEM_MARGIN, -ITEM_MARGIN, ITEM_MARGIN, ITEM_MARGIN); diff --git a/lib/thumbnailview/thumbnailview.cpp b/lib/thumbnailview/thumbnailview.cpp --- a/lib/thumbnailview/thumbnailview.cpp +++ b/lib/thumbnailview/thumbnailview.cpp @@ -105,8 +105,10 @@ */ void initAsIcon(const QPixmap& pix) { + qreal dpr = qApp->devicePixelRatio(); mGroupPix = pix; - int largeGroupSize = ThumbnailGroup::pixelSize(ThumbnailGroup::Large); + mGroupPix.setDevicePixelRatio(dpr); + int largeGroupSize = ThumbnailGroup::pixelSize(ThumbnailGroup::Large) * dpr; mFullSize = QSize(largeGroupSize, largeGroupSize); } @@ -230,10 +232,11 @@ void roughAdjustThumbnail(Thumbnail* thumbnail) { + qreal dpr = qApp->devicePixelRatio(); const QPixmap& mGroupPix = thumbnail->mGroupPix; const int groupSize = qMax(mGroupPix.width(), mGroupPix.height()); const int fullSize = qMax(thumbnail->mFullSize.width(), thumbnail->mFullSize.height()); - if (fullSize == groupSize && mGroupPix.height() <= mThumbnailSize.height() && mGroupPix.width() <= mThumbnailSize.width()) { + if (fullSize == groupSize && mGroupPix.height() <= mThumbnailSize.height() * dpr && mGroupPix.width() <= mThumbnailSize.width() * dpr) { thumbnail->mAdjustedPix = mGroupPix; thumbnail->mRough = false; } else { @@ -257,25 +260,22 @@ QPixmap scale(const QPixmap& pix, Qt::TransformationMode transformationMode) { + qreal dpr = qApp->devicePixelRatio(); switch (mScaleMode) { case ThumbnailView::ScaleToFit: - return pix.scaled(mThumbnailSize.width(), mThumbnailSize.height(), Qt::KeepAspectRatio, transformationMode); - break; + return pix.scaled(mThumbnailSize.width() * dpr, mThumbnailSize.height() * dpr, Qt::KeepAspectRatio, transformationMode); case ThumbnailView::ScaleToSquare: { int minSize = qMin(pix.width(), pix.height()); QPixmap pix2 = pix.copy((pix.width() - minSize) / 2, (pix.height() - minSize) / 2, minSize, minSize); - return pix2.scaled(mThumbnailSize.width(), mThumbnailSize.height(), Qt::KeepAspectRatio, transformationMode); + return pix2.scaled(mThumbnailSize.width() * dpr, mThumbnailSize.height() * dpr, Qt::KeepAspectRatio, transformationMode); } case ThumbnailView::ScaleToHeight: - return pix.scaledToHeight(mThumbnailSize.height(), transformationMode); - break; + return pix.scaledToHeight(mThumbnailSize.height() * dpr, transformationMode); case ThumbnailView::ScaleToWidth: - return pix.scaledToWidth(mThumbnailSize.width(), transformationMode); - break; + return pix.scaledToWidth(mThumbnailSize.width() * dpr, transformationMode); + default: + return QPixmap(); } - // Keep compiler happy - Q_ASSERT(0); - return QPixmap(); } }; @@ -364,20 +364,23 @@ void ThumbnailView::updateThumbnailSize() { - QSize value = d->mThumbnailSize; + QSize thumbnailSize = d->mThumbnailSize; // mWaitingThumbnail int waitingThumbnailSize; - if (value.width() > 64) { + if (thumbnailSize.width() > 64) { waitingThumbnailSize = 48; } else { waitingThumbnailSize = 32; } - QPixmap icon = DesktopIcon("chronometer", waitingThumbnailSize); - QPixmap pix(value); + qreal dpr = qApp->devicePixelRatio(); + QPixmap icon = DesktopIcon("chronometer", waitingThumbnailSize * dpr); + icon.setDevicePixelRatio(dpr); + QPixmap pix(thumbnailSize * dpr); + pix.setDevicePixelRatio(dpr); pix.fill(Qt::transparent); QPainter painter(&pix); painter.setOpacity(0.5); - painter.drawPixmap((value.width() - icon.width()) / 2, (value.height() - icon.height()) / 2, icon); + painter.drawPixmap((thumbnailSize.width() - icon.width() / dpr) / 2, (thumbnailSize.height() - icon.height() / dpr) / 2, icon); painter.end(); d->mWaitingThumbnail = pix; @@ -393,8 +396,8 @@ it.value().mAdjustedPix = QPixmap(); } - thumbnailSizeChanged(value); - thumbnailWidthChanged(value.width()); + thumbnailSizeChanged(thumbnailSize); + thumbnailWidthChanged(thumbnailSize.width()); if (d->mScaleMode != ScaleToFit) { scheduleDelayedItemsLayout(); } @@ -552,8 +555,10 @@ } Thumbnail& thumbnail = it.value(); thumbnail.mGroupPix = pixmap; + qreal dpr = qApp->devicePixelRatio(); + thumbnail.mGroupPix.setDevicePixelRatio(dpr); thumbnail.mAdjustedPix = QPixmap(); - int largeGroupSize = ThumbnailGroup::pixelSize(ThumbnailGroup::Large); + int largeGroupSize = ThumbnailGroup::pixelSize(ThumbnailGroup::Large) * dpr; thumbnail.mFullSize = size.isValid() ? size : QSize(largeGroupSize, largeGroupSize); thumbnail.mRealFullSize = size; thumbnail.mWaitingForThumbnail = false; @@ -567,6 +572,7 @@ void ThumbnailView::setBrokenThumbnail(const KFileItem& item) { + qreal dpr = qApp->devicePixelRatio(); ThumbnailForUrl::iterator it = d->mThumbnailForUrl.find(item.url()); if (it == d->mThumbnailForUrl.end()) { return; @@ -577,7 +583,7 @@ // Special case for videos because our kde install may come without // support for video thumbnails so we show the mimetype icon instead of // a broken image icon - QPixmap pix = KIconLoader::global()->loadMimeTypeIcon(item.iconName(), KIconLoader::Desktop, d->mThumbnailSize.height()); + QPixmap pix = KIconLoader::global()->loadMimeTypeIcon(item.iconName(), KIconLoader::Desktop, d->mThumbnailSize.height() * dpr); thumbnail.initAsIcon(pix); } else if (kind == MimeTypeUtils::KIND_DIR) { // Special case for folders because ThumbnailProvider does not return a @@ -614,9 +620,10 @@ // If dir or archive, generate a thumbnail from fileitem pixmap MimeTypeUtils::Kind kind = MimeTypeUtils::fileItemKind(item); if (kind == MimeTypeUtils::KIND_ARCHIVE || kind == MimeTypeUtils::KIND_DIR) { - int groupSize = ThumbnailGroup::pixelSize(ThumbnailGroup::fromPixelSize(d->mThumbnailSize.height())); + qreal dpr = qApp->devicePixelRatio(); + int groupSize = ThumbnailGroup::pixelSize(ThumbnailGroup::fromPixelSize(d->mThumbnailSize.height())) * dpr; if (thumbnail.mGroupPix.isNull() || thumbnail.mGroupPix.height() < groupSize) { - QPixmap pix = KIconLoader::global()->loadMimeTypeIcon(item.iconName(), KIconLoader::Desktop, d->mThumbnailSize.height()); + QPixmap pix = KIconLoader::global()->loadMimeTypeIcon(item.iconName(), KIconLoader::Desktop, d->mThumbnailSize.height() * dpr); thumbnail.initAsIcon(pix); if (kind == MimeTypeUtils::KIND_ARCHIVE) { @@ -824,7 +831,8 @@ // Filter out items which already have a thumbnail ThumbnailForUrl::ConstIterator it = d->mThumbnailForUrl.constFind(url); - if (it != d->mThumbnailForUrl.constEnd() && it.value().isGroupPixAdaptedForSize(d->mThumbnailSize.height())) { + qreal dpr = qApp->devicePixelRatio(); + if (it != d->mThumbnailForUrl.constEnd() && it.value().isGroupPixAdaptedForSize(d->mThumbnailSize.height() * dpr)) { continue; }