]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kstandarditemlistwidget.cpp
Merge branch 'davidedmundson/highdpi'
[dolphin.git] / src / kitemviews / kstandarditemlistwidget.cpp
index ec48f19db25d93ae3fea6b05a438b00928fb772d..1112460a9670941ddc52b545fe1c9f8965385b9f 100644 (file)
@@ -25,9 +25,8 @@
 #include <QIcon>
 #include <KIconEffect>
 #include <KIconLoader>
-#include <kratingpainter.h>
+#include <KRatingPainter>
 #include <KStringHandler>
-#include <KDebug>
 
 #include "private/kfileitemclipboard.h"
 #include "private/kitemlistroleeditor.h"
@@ -41,6 +40,7 @@
 #include <QTextLayout>
 #include <QTextLine>
 #include <QPixmapCache>
+#include <QGuiApplication>
 
 // #define KSTANDARDITEMLISTWIDGET_DEBUG
 
@@ -118,6 +118,8 @@ QString KStandardItemListWidgetInformant::itemText(int index, const KItemListVie
 
 bool KStandardItemListWidgetInformant::itemIsLink(int index, const KItemListView* view) const
 {
+    Q_UNUSED(index);
+    Q_UNUSED(view);
     return false;
 }
 
@@ -341,6 +343,7 @@ void KStandardItemListWidget::paint(QPainter* painter, const QStyleOptionGraphic
              */
             // Paint pixmap1 so that pixmap1 = m_pixmap * (1.0 - hoverOpacity())
             QPixmap pixmap1(m_pixmap.size());
+            pixmap1.setDevicePixelRatio(m_pixmap.devicePixelRatio());
             pixmap1.fill(Qt::transparent);
             {
                 QPainter p(&pixmap1);
@@ -350,6 +353,7 @@ void KStandardItemListWidget::paint(QPainter* painter, const QStyleOptionGraphic
 
             // Paint pixmap2 so that pixmap2 = m_hoverPixmap * hoverOpacity()
             QPixmap pixmap2(pixmap1.size());
+            pixmap2.setDevicePixelRatio(pixmap1.devicePixelRatio());
             pixmap2.fill(Qt::transparent);
             {
                 QPainter p(&pixmap2);
@@ -951,10 +955,11 @@ void KStandardItemListWidget::updatePixmapCache()
             }
             const QStringList overlays = values["iconOverlays"].toStringList();
             m_pixmap = pixmapForIcon(iconName, overlays, maxIconHeight);
-        } else if (m_pixmap.width() != maxIconWidth || m_pixmap.height() != maxIconHeight) {
+
+        } else if (m_pixmap.width() / m_pixmap.devicePixelRatio() != maxIconWidth || m_pixmap.height() / m_pixmap.devicePixelRatio() != maxIconHeight) {
             // A custom pixmap has been applied. Assure that the pixmap
             // is scaled to the maximum available size.
-            KPixmapModifier::scale(m_pixmap, QSize(maxIconWidth, maxIconHeight));
+            KPixmapModifier::scale(m_pixmap, QSize(maxIconWidth, maxIconHeight) * qApp->devicePixelRatio());
         }
 
         if (m_isCut) {
@@ -1350,9 +1355,10 @@ void KStandardItemListWidget::updateAdditionalInfoTextColor()
 
 void KStandardItemListWidget::drawPixmap(QPainter* painter, const QPixmap& pixmap)
 {
-    if (m_scaledPixmapSize != pixmap.size()) {
+    if (m_scaledPixmapSize != pixmap.size() / pixmap.devicePixelRatio()) {
         QPixmap scaledPixmap = pixmap;
-        KPixmapModifier::scale(scaledPixmap, m_scaledPixmapSize);
+        KPixmapModifier::scale(scaledPixmap, m_scaledPixmapSize * qApp->devicePixelRatio());
+        scaledPixmap.setDevicePixelRatio(qApp->devicePixelRatio());
         painter->drawPixmap(m_pixmapPos, scaledPixmap);
 
 #ifdef KSTANDARDITEMLISTWIDGET_DEBUG
@@ -1434,6 +1440,7 @@ void KStandardItemListWidget::closeRoleEditor()
 
 QPixmap KStandardItemListWidget::pixmapForIcon(const QString& name, const QStringList& overlays, int size)
 {
+    size *= qApp->devicePixelRatio();
     const QString key = "KStandardItemListWidget:" % name % ":" % overlays.join(":") % ":" % QString::number(size);
     QPixmap pixmap;
 
@@ -1459,7 +1466,7 @@ QPixmap KStandardItemListWidget::pixmapForIcon(const QString& name, const QStrin
             requestedSize = size;
         }
 
-        pixmap = icon.pixmap(requestedSize, requestedSize);
+        pixmap = icon.pixmap(requestedSize / qApp->devicePixelRatio(), requestedSize / qApp->devicePixelRatio());
         if (requestedSize != size) {
             KPixmapModifier::scale(pixmap, QSize(size, size));
         }
@@ -1480,6 +1487,7 @@ QPixmap KStandardItemListWidget::pixmapForIcon(const QString& name, const QStrin
 
         QPixmapCache::insert(key, pixmap);
     }
+    pixmap.setDevicePixelRatio(qApp->devicePixelRatio());
 
     return pixmap;
 }