diff --git a/lib/thumbnailview/previewitemdelegate.cpp b/lib/thumbnailview/previewitemdelegate.cpp --- a/lib/thumbnailview/previewitemdelegate.cpp +++ b/lib/thumbnailview/previewitemdelegate.cpp @@ -323,7 +323,9 @@ if (it == mShadowCache.end()) { QSize size = QSize(rect.width() + 2 * SHADOW_SIZE, rect.height() + 2 * SHADOW_SIZE); QColor color(0, 0, 0, SHADOW_STRENGTH); - QPixmap shadow = PaintUtils::generateFuzzyRect(size, color, SHADOW_SIZE); + const auto dpr = qApp->devicePixelRatio(); + QPixmap shadow = PaintUtils::generateFuzzyRect(size * dpr, color, SHADOW_SIZE * dpr); + shadow.setDevicePixelRatio(dpr); it = mShadowCache.insert(key, shadow); } painter->drawPixmap(rect.topLeft() + shadowOffset, it.value()); @@ -688,6 +690,7 @@ int thumbnailHeight = d->mThumbnailSize.height(); QSize fullSize; QPixmap thumbnailPix = d->mView->thumbnailForIndex(index, &fullSize); + QSize thumbnailSize = thumbnailPix.size() / thumbnailPix.devicePixelRatio(); const KFileItem fileItem = fileItemForIndex(index); const bool opaque = !thumbnailPix.hasAlphaChannel(); const bool isDirOrArchive = ArchiveUtils::fileItemIsDirOrArchive(fileItem); @@ -739,10 +742,10 @@ // Compute thumbnailRect 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() - thumbnailSize.width()) / 2, + rect.top() + (thumbnailHeight - thumbnailSize.height()) + ITEM_MARGIN, + thumbnailSize.width(), + thumbnailSize.height()); // Draw background const QRect backgroundRect = thumbnailRect.adjusted(-ITEM_MARGIN, -ITEM_MARGIN, ITEM_MARGIN, ITEM_MARGIN); diff --git a/lib/thumbnailview/thumbnailbarview.cpp b/lib/thumbnailview/thumbnailbarview.cpp --- a/lib/thumbnailview/thumbnailbarview.cpp +++ b/lib/thumbnailview/thumbnailbarview.cpp @@ -108,7 +108,9 @@ if (it == mShadowCache.end()) { QSize size = QSize(rect.width() + 2 * SHADOW_SIZE, rect.height() + 2 * SHADOW_SIZE); QColor color(0, 0, 0, SHADOW_STRENGTH); - QPixmap shadow = PaintUtils::generateFuzzyRect(size, color, SHADOW_SIZE); + const auto dpr = qApp->devicePixelRatio(); + QPixmap shadow = PaintUtils::generateFuzzyRect(size * dpr, color, SHADOW_SIZE * dpr); + shadow.setDevicePixelRatio(dpr); it = mShadowCache.insert(key, shadow); } painter->drawPixmap(rect.topLeft() + shadowOffset, it.value()); @@ -203,6 +205,7 @@ bool isSelected = option.state & QStyle::State_Selected; bool isCurrent = d->mView->selectionModel()->currentIndex() == index; QPixmap thumbnailPix = d->mView->thumbnailForIndex(index); + QSize thumbnailSize = thumbnailPix.size() / thumbnailPix.devicePixelRatio(); QRect rect = option.rect; QStyleOptionViewItem opt = option; @@ -219,10 +222,10 @@ // Draw thumbnail if (!thumbnailPix.isNull()) { QRect thumbnailRect = QRect( - rect.left() + (rect.width() - thumbnailPix.width()) / 2, - rect.top() + (rect.height() - thumbnailPix.height()) / 2 - 1, - thumbnailPix.width(), - thumbnailPix.height()); + rect.left() + (rect.width() - thumbnailSize.width()) / 2, + rect.top() + (rect.height() - thumbnailSize.height()) / 2 - 1, + thumbnailSize.width(), + thumbnailSize.height()); if (!thumbnailPix.hasAlphaChannel()) { d->drawShadow(painter, thumbnailRect); diff --git a/lib/thumbnailview/thumbnailslider.cpp b/lib/thumbnailview/thumbnailslider.cpp --- a/lib/thumbnailview/thumbnailslider.cpp +++ b/lib/thumbnailview/thumbnailslider.cpp @@ -26,6 +26,7 @@ // Qt #include +#include // KDE @@ -65,7 +66,7 @@ void ThumbnailSlider::updateToolTip() { // FIXME: i18n? - const int size = slider()->sliderPosition(); + const int size = slider()->sliderPosition() * qApp->devicePixelRatio(); const QString text = QStringLiteral("%1 x %2").arg(size).arg(size); slider()->setToolTip(text); } diff --git a/lib/thumbnailview/thumbnailview.cpp b/lib/thumbnailview/thumbnailview.cpp --- a/lib/thumbnailview/thumbnailview.cpp +++ b/lib/thumbnailview/thumbnailview.cpp @@ -379,20 +379,22 @@ { QSize value = d->mThumbnailSize; // mWaitingThumbnail + const auto dpr = qApp->devicePixelRatio(); int waitingThumbnailSize; - if (value.width() > 64) { - waitingThumbnailSize = 48; + if (value.width() > 64 * dpr) { + waitingThumbnailSize = 48 * dpr; } else { - waitingThumbnailSize = 32; + waitingThumbnailSize = 32 * dpr; } QPixmap icon = DesktopIcon(QStringLiteral("chronometer"), waitingThumbnailSize); QPixmap pix(value); 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((value.width() - icon.width()) / dpr / 2, (value.height() - icon.height()) / dpr / 2, icon); painter.end(); d->mWaitingThumbnail = pix; + d->mWaitingThumbnail.setDevicePixelRatio(dpr); // Stop smoothing d->mSmoothThumbnailTimer.stop(); @@ -406,21 +408,23 @@ it.value().mAdjustedPix = QPixmap(); } - emit thumbnailSizeChanged(value); - emit thumbnailWidthChanged(value.width()); + emit thumbnailSizeChanged(value / qApp->devicePixelRatio()); + emit thumbnailWidthChanged(value.width() / qApp->devicePixelRatio()); if (d->mScaleMode != ScaleToFit) { scheduleDelayedItemsLayout(); } d->scheduleThumbnailGeneration(); } void ThumbnailView::setThumbnailWidth(int width) { - if(d->mThumbnailSize.width() == width) { + const auto dpr = qApp->devicePixelRatio(); + const int newWidth = width * dpr; + if(d->mThumbnailSize.width() == newWidth) { return; } - int height = round((qreal)width / d->mThumbnailAspectRatio); - d->mThumbnailSize = QSize(width, height); + int height = round((qreal)newWidth / d->mThumbnailAspectRatio); + d->mThumbnailSize = QSize(newWidth, height); updateThumbnailSize(); } @@ -443,7 +447,7 @@ QSize ThumbnailView::thumbnailSize() const { - return d->mThumbnailSize; + return d->mThumbnailSize / qApp->devicePixelRatio(); } void ThumbnailView::setThumbnailViewHelper(AbstractThumbnailViewHelper* helper) @@ -670,6 +674,7 @@ if (fullSize) { *fullSize = thumbnail.mRealFullSize; } + thumbnail.mAdjustedPix.setDevicePixelRatio(qApp->devicePixelRatio()); return thumbnail.mAdjustedPix; } @@ -810,7 +815,7 @@ // setThumbnailSize() does not work //verticalScrollBar()->setSingleStep(d->mThumbnailSize / 5); if (event->modifiers() == Qt::ControlModifier) { - int width = d->mThumbnailSize.width() + (event->delta() > 0 ? 1 : -1) * WHEEL_ZOOM_MULTIPLIER; + int width = thumbnailSize().width() + (event->delta() > 0 ? 1 : -1) * WHEEL_ZOOM_MULTIPLIER; width = qMax(int(MinThumbnailSize), qMin(width, int(MaxThumbnailSize))); setThumbnailWidth(width); } else {