]> cloud.milkyroute.net Git - dolphin.git/commitdiff
[DetailsView] Improve zooming
authorEugene Popov <popov895@ukr.net>
Sun, 11 Jul 2021 21:31:06 +0000 (00:31 +0300)
committerElvis Angelaccio <elvis.angelaccio@kde.org>
Sun, 18 Jul 2021 16:59:47 +0000 (16:59 +0000)
Under some conditions, when zooming, only the size of the icon is changed, but not the entire item, which visually doesn't look good. The main idea of this MR is that when scaling the whole element should be resized, not just the icon, so I came up with some zoom levels for the main icon sizes. With this commit, zooming will resize the entire element, even if the resizing of the icon doesn't affect the size of the entire element.

src/kitemviews/kstandarditemlistwidget.cpp

index 9c527fa171deb2e4b74672b9cf6ca40c8e642e67..1751812710f8d78dce8baa1e52c5de9d4f22ece6 100644 (file)
@@ -226,8 +226,22 @@ void KStandardItemListWidgetInformant::calculateCompactLayoutItemSizeHints(QVect
 void KStandardItemListWidgetInformant::calculateDetailsLayoutItemSizeHints(QVector<qreal>& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const
 {
     const KItemListStyleOption& option = view->styleOption();
-    const qreal height = option.padding * 2 + qMax(option.iconSize, option.fontMetrics.height());
-    logicalHeightHints.fill(height);
+
+    float zoomLevel = 1;
+    if (option.iconSize >= KIconLoader::SizeEnormous) {
+        zoomLevel = 2;
+    } else if (option.iconSize >= KIconLoader::SizeHuge) {
+        zoomLevel = 1.8;
+    } else if (option.iconSize >= KIconLoader::SizeLarge) {
+        zoomLevel = 1.6;
+    } else if (option.iconSize >= KIconLoader::SizeMedium) {
+        zoomLevel = 1.4;
+    } else if (option.iconSize >= KIconLoader::SizeSmallMedium) {
+        zoomLevel = 1.2;
+    }
+
+    const qreal contentHeight = qMax<qreal>(option.iconSize, zoomLevel * option.fontMetrics.height());
+    logicalHeightHints.fill(contentHeight + 2 * option.padding);
     logicalWidthHint = -1.0;
 }