From 0b130dd57e594d7433141483aa162e4414a9d07b Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Mon, 29 Jan 2018 11:52:23 +0100 Subject: [PATCH] base scrolling on the smallest item Summary: CCBUG: 386379 after recent highdpi patches on scrolling that delegated it completely to the scrollbar, based upon the scrollbar singleStep setted to the tallest of the items in the view. tough this makes scrolling way too fast, and on folders where just few filenames are longer than most we can get a single scrolling step almost double the number of lines configured in the mouse kcm. Using the shortest item instead of the tallest mitigates this problem making it a bit more usable Test Plan: tested on different folders in different view modes both with mouse and touchpad Reviewers: #dolphin, broulik, ngraham Reviewed By: #dolphin, ngraham Subscribers: ngraham, plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D10102 --- src/kitemviews/kitemlistcontainer.cpp | 1 - src/kitemviews/kitemlistview.cpp | 2 +- src/kitemviews/private/kitemlistsizehintresolver.cpp | 8 ++++++++ src/kitemviews/private/kitemlistsizehintresolver.h | 2 ++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/kitemviews/kitemlistcontainer.cpp b/src/kitemviews/kitemlistcontainer.cpp index 8e64ee4933..c1eae53bd6 100644 --- a/src/kitemviews/kitemlistcontainer.cpp +++ b/src/kitemviews/kitemlistcontainer.cpp @@ -35,7 +35,6 @@ #include #include - /** * Replaces the default viewport of KItemListContainer by a * non-scrollable viewport. The scrolling is done in an optimized diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 71091033c9..dbeb571a40 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -342,7 +342,7 @@ QSizeF KItemListView::itemSize() const QSizeF KItemListView::itemSizeHint() const { - return m_sizeHintResolver->maxSizeHint(); + return m_sizeHintResolver->minSizeHint(); } const KItemListStyleOption& KItemListView::styleOption() const diff --git a/src/kitemviews/private/kitemlistsizehintresolver.cpp b/src/kitemviews/private/kitemlistsizehintresolver.cpp index 02f1865b34..5c121c6670 100644 --- a/src/kitemviews/private/kitemlistsizehintresolver.cpp +++ b/src/kitemviews/private/kitemlistsizehintresolver.cpp @@ -26,6 +26,7 @@ KItemListSizeHintResolver::KItemListSizeHintResolver(const KItemListView* itemLi m_logicalHeightHintCache(), m_logicalWidthHint(0.0), m_logicalHeightHint(0.0), + m_minHeightHint(0.0), m_needsResolving(false) { } @@ -40,6 +41,12 @@ QSizeF KItemListSizeHintResolver::maxSizeHint() return QSizeF(m_logicalWidthHint, m_logicalHeightHint); } +QSizeF KItemListSizeHintResolver::minSizeHint() +{ + updateCache(); + return QSizeF(m_logicalWidthHint, m_minHeightHint); +} + QSizeF KItemListSizeHintResolver::sizeHint(int index) { updateCache(); @@ -161,6 +168,7 @@ void KItemListSizeHintResolver::updateCache() m_logicalHeightHint = 0.0; } else { m_logicalHeightHint = *std::max_element(m_logicalHeightHintCache.begin(), m_logicalHeightHintCache.end()); + m_minHeightHint = *std::min_element(m_logicalHeightHintCache.begin(), m_logicalHeightHintCache.end()); } m_needsResolving = false; } diff --git a/src/kitemviews/private/kitemlistsizehintresolver.h b/src/kitemviews/private/kitemlistsizehintresolver.h index 841e9ca100..fa92b86822 100644 --- a/src/kitemviews/private/kitemlistsizehintresolver.h +++ b/src/kitemviews/private/kitemlistsizehintresolver.h @@ -37,6 +37,7 @@ public: KItemListSizeHintResolver(const KItemListView* itemListView); virtual ~KItemListSizeHintResolver(); QSizeF maxSizeHint(); + QSizeF minSizeHint(); QSizeF sizeHint(int index); void itemsInserted(const KItemRangeList& itemRanges); @@ -52,6 +53,7 @@ private: mutable QVector m_logicalHeightHintCache; mutable qreal m_logicalWidthHint; mutable qreal m_logicalHeightHint; + mutable qreal m_minHeightHint; bool m_needsResolving; };