1
0
mirror of https://invent.kde.org/system/dolphin synced 2024-07-07 10:51:45 +00:00

Create thumbnails with scene devicePixelRatio

This commit is contained in:
Kai Uwe Broulik 2023-11-20 22:39:14 +01:00
parent ecd3675aaa
commit 90770d305a
4 changed files with 28 additions and 5 deletions

View File

@ -67,6 +67,7 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel *model, QO
, m_finishedItems()
, m_model(model)
, m_iconSize()
, m_devicePixelRatio(1.0)
, m_firstVisibleIndex(0)
, m_lastVisibleIndex(-1)
, m_maximumVisibleItems(50)
@ -158,6 +159,25 @@ QSize KFileItemModelRolesUpdater::iconSize() const
return m_iconSize;
}
void KFileItemModelRolesUpdater::setDevicePixelRatio(qreal devicePixelRatio)
{
if (m_devicePixelRatio != devicePixelRatio) {
m_devicePixelRatio = devicePixelRatio;
if (m_state == Paused) {
m_iconSizeChangedDuringPausing = true;
} else if (m_previewShown) {
// A dpr change requires the regenerating of all previews.
m_finishedItems.clear();
startUpdating();
}
}
}
qreal KFileItemModelRolesUpdater::devicePixelRatio() const
{
return m_devicePixelRatio;
}
void KFileItemModelRolesUpdater::setVisibleIndexRange(int index, int count)
{
if (index < 0) {
@ -992,7 +1012,7 @@ void KFileItemModelRolesUpdater::startPreviewJob()
}
KIO::PreviewJob *job = new KIO::PreviewJob(itemSubSet, cacheSize, &m_enabledPlugins);
job->setDevicePixelRatio(m_devicePixelRatio);
job->setIgnoreMaximumSize(itemSubSet.first().isLocalFile() && !itemSubSet.first().isSlow() && m_localFileSizePreviewLimit <= 0);
if (job->uiDelegate()) {
KJobWidgets::setWindow(job, qApp->activeWindow());
@ -1038,8 +1058,8 @@ QPixmap KFileItemModelRolesUpdater::transformPreviewPixmap(const QPixmap &pixmap
}
}
} else if (!pixmap.isNull()) {
KPixmapModifier::scale(scaledPixmap, m_iconSize * qApp->devicePixelRatio());
scaledPixmap.setDevicePixelRatio(qApp->devicePixelRatio());
KPixmapModifier::scale(scaledPixmap, m_iconSize * m_devicePixelRatio);
scaledPixmap.setDevicePixelRatio(m_devicePixelRatio);
}
return scaledPixmap;

View File

@ -89,6 +89,9 @@ public:
void setIconSize(const QSize &size);
QSize iconSize() const;
void setDevicePixelRatio(qreal devicePixelRatio);
qreal devicePixelRatio() const;
/**
* Sets the range of items that are visible currently. The roles
* of visible items are resolved first.
@ -366,6 +369,7 @@ private:
KFileItemModel *m_model;
QSize m_iconSize;
qreal m_devicePixelRatio;
int m_firstVisibleIndex;
int m_lastVisibleIndex;
int m_maximumVisibleItems;

View File

@ -79,8 +79,6 @@ int main(int argc, char **argv)
QApplication app(argc, argv);
app.setWindowIcon(QIcon::fromTheme(QStringLiteral("system-file-manager"), app.windowIcon()));
KIO::PreviewJob::setDefaultDevicePixelRatio(app.devicePixelRatio());
KCrash::initialize();
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)

View File

@ -178,6 +178,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);
}