]> cloud.milkyroute.net Git - dolphin.git/commitdiff
KStandardItemListWidget: Render pixmap with explicit dpr
authorKai Uwe Broulik <kde@privat.broulik.de>
Wed, 23 Aug 2023 17:06:59 +0000 (19:06 +0200)
committerMéven Car <meven.car@kdemail.net>
Wed, 23 Aug 2023 19:48:05 +0000 (19:48 +0000)
Instead of using the one from QApplication, use the one from the window.

src/kitemviews/kstandarditemlistwidget.cpp
src/kitemviews/kstandarditemlistwidget.h

index c4eab6d74317166f063a8521941d3ebbf239efbc..0772bccc9ff8ca042f00cd23520d53f60175edf0 100644 (file)
@@ -1540,13 +1540,18 @@ void KStandardItemListWidget::closeRoleEditor()
     m_roleEditor = nullptr;
 }
 
-QPixmap KStandardItemListWidget::pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode)
+QPixmap KStandardItemListWidget::pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode) const
 {
     static const QIcon fallbackIcon = QIcon::fromTheme(QStringLiteral("unknown"));
+    qreal dpr = qApp->devicePixelRatio();
+    if (scene() && !scene()->views().isEmpty()) {
+        dpr = scene()->views().constFirst()->devicePixelRatioF();
+    }
 
-    size *= qApp->devicePixelRatio();
+    size *= dpr;
 
-    const QString key = "KStandardItemListWidget:" % name % ":" % overlays.join(QLatin1Char(':')) % ":" % QString::number(size) % ":" % QString::number(mode);
+    const QString key = "KStandardItemListWidget:" % name % ":" % overlays.join(QLatin1Char(':')) % ":" % QString::number(size) % "@" % QString::number(dpr)
+        % ":" % QString::number(mode);
     QPixmap pixmap;
 
     if (!QPixmapCache::find(key, &pixmap)) {
@@ -1554,11 +1559,11 @@ QPixmap KStandardItemListWidget::pixmapForIcon(const QString &name, const QStrin
         if (icon.isNull()) {
             icon = QIcon(name);
         }
-        if (icon.isNull() || icon.pixmap(size / qApp->devicePixelRatio(), size / qApp->devicePixelRatio(), mode).isNull()) {
+        if (icon.isNull() || icon.pixmap(size / dpr, size / dpr, mode).isNull()) {
             icon = fallbackIcon;
         }
 
-        pixmap = icon.pixmap(size / qApp->devicePixelRatio(), size / qApp->devicePixelRatio(), mode);
+        pixmap = icon.pixmap(QSize(size / dpr, size / dpr), dpr, mode);
         if (pixmap.width() != size || pixmap.height() != size) {
             KPixmapModifier::scale(pixmap, QSize(size, size));
         }
@@ -1595,7 +1600,7 @@ QPixmap KStandardItemListWidget::pixmapForIcon(const QString &name, const QStrin
 
         QPixmapCache::insert(key, pixmap);
     }
-    pixmap.setDevicePixelRatio(qApp->devicePixelRatio());
+    pixmap.setDevicePixelRatio(dpr);
 
     return pixmap;
 }
index 5bfb7df29689568ac987dea45775992d5dcb6207..73bc393f4ad0ec2db60ce88d6f7e0f3f87c685c8 100644 (file)
@@ -215,7 +215,7 @@ private:
      */
     void closeRoleEditor();
 
-    static QPixmap pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode);
+    QPixmap pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode) const;
 
     /**
      * @return Preferred size of the rating-image based on the given