┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Uwe Broulik <[email protected]>2023-11-20 22:39:14 +0100
committerKai Uwe Broulik <[email protected]>2023-11-21 13:54:25 +0100
commit90770d305a3ca5f4d4196d314fe7357ba0c92114 (patch)
tree1dd55fa03695d2d7eb9af905bda84527c3a28d1a
parentecd3675aaa55b8224f1fa81b031471d834a18fad (diff)
Create thumbnails with scene devicePixelRatio
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp26
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.h4
-rw-r--r--src/main.cpp2
-rw-r--r--src/panels/information/informationpanelcontent.cpp1
4 files changed, 28 insertions, 5 deletions
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index e6e8ea25d..06500b45d 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -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;
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.h b/src/kitemviews/kfileitemmodelrolesupdater.h
index 78fa757f8..aa9ca5fc0 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.h
+++ b/src/kitemviews/kfileitemmodelrolesupdater.h
@@ -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;
diff --git a/src/main.cpp b/src/main.cpp
index 2d1ccd0c8..ac817eca9 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -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)
diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp
index 62f25b24b..23870b0b1 100644
--- a/src/panels/information/informationpanelcontent.cpp
+++ b/src/panels/information/informationpanelcontent.cpp
@@ -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);
}