From 7908aff3b5ebe4484d391c1fc4797e9dae2300b2 Mon Sep 17 00:00:00 2001 From: Eugene Popov Date: Mon, 12 Jul 2021 00:31:06 +0300 Subject: [PATCH] [DetailsView] Improve zooming 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 | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index 9c527fa17..175181271 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -226,8 +226,22 @@ void KStandardItemListWidgetInformant::calculateCompactLayoutItemSizeHints(QVect void KStandardItemListWidgetInformant::calculateDetailsLayoutItemSizeHints(QVector& 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(option.iconSize, zoomLevel * option.fontMetrics.height()); + logicalHeightHints.fill(contentHeight + 2 * option.padding); logicalWidthHint = -1.0; } -- 2.47.3