]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Create thumbnails with scene devicePixelRatio
authorKai Uwe Broulik <kde@privat.broulik.de>
Mon, 20 Nov 2023 21:39:14 +0000 (22:39 +0100)
committerKai Uwe Broulik <kde@privat.broulik.de>
Tue, 21 Nov 2023 12:54:25 +0000 (13:54 +0100)
src/kitemviews/kfileitemmodelrolesupdater.cpp
src/kitemviews/kfileitemmodelrolesupdater.h
src/main.cpp
src/panels/information/informationpanelcontent.cpp

index e6e8ea25dc99ec49ea0686a38c9536d8405bedfb..06500b45dd168f9a2ddee88a5af07a3fe626f807 100644 (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;
index 78fa757f82eba3c7847ccf7d5cd8cfb232eb3ac6..aa9ca5fc0e325591f5562815f53d8c614db4021c 100644 (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;
index 2d1ccd0c89951ca1d881b2be052bce7ae3e453d8..ac817eca9d1ec63a0dd001c9b4bbfca5038ee8ce 100644 (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)
index 62f25b24bf3cdaf3e32c6f3986415e19afee71ed..23870b0b1457e002256375f95a2f0fe6710d3c83 100644 (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);
     }