┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/private/kitemlistsizehintresolver.cpp
diff options
context:
space:
mode:
authorEmmanuel Pescosta <[email protected]>2014-01-12 23:24:00 +0100
committerEmmanuel Pescosta <[email protected]>2014-01-12 23:24:00 +0100
commit3ff6e83491e2da9678af0bc149e450ff87db5e8d (patch)
tree8a172fb62079c2eef38d8c79b786e0998f9b2d84 /src/kitemviews/private/kitemlistsizehintresolver.cpp
parentace34ac134af5bb4b4fcf8cbb11b979ea40ec30f (diff)
Calculate all item size hints at once.
The speed up is really small, but theses changes are mostly straightforward and make the code a bit nicer - break the KStandardItemListWidgetInformant::itemSizeHint beast into three smaller functions. FIXED-IN: 4.13 REVIEW: 112979
Diffstat (limited to 'src/kitemviews/private/kitemlistsizehintresolver.cpp')
-rw-r--r--src/kitemviews/private/kitemlistsizehintresolver.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/kitemviews/private/kitemlistsizehintresolver.cpp b/src/kitemviews/private/kitemlistsizehintresolver.cpp
index 0e2286b45..029beddf9 100644
--- a/src/kitemviews/private/kitemlistsizehintresolver.cpp
+++ b/src/kitemviews/private/kitemlistsizehintresolver.cpp
@@ -23,7 +23,8 @@
KItemListSizeHintResolver::KItemListSizeHintResolver(const KItemListView* itemListView) :
m_itemListView(itemListView),
- m_sizeHintCache()
+ m_sizeHintCache(),
+ m_needsResolving(false)
{
}
@@ -31,14 +32,10 @@ KItemListSizeHintResolver::~KItemListSizeHintResolver()
{
}
-QSizeF KItemListSizeHintResolver::sizeHint(int index) const
+QSizeF KItemListSizeHintResolver::sizeHint(int index)
{
- QSizeF size = m_sizeHintCache.at(index);
- if (size.isEmpty()) {
- size = m_itemListView->itemSizeHint(index);
- m_sizeHintCache[index] = size;
- }
- return size;
+ updateCache();
+ return m_sizeHintCache.at(index);
}
void KItemListSizeHintResolver::itemsInserted(const KItemRangeList& itemRanges)
@@ -77,6 +74,8 @@ void KItemListSizeHintResolver::itemsInserted(const KItemRangeList& itemRanges)
}
}
+ m_needsResolving = true;
+
Q_ASSERT(m_sizeHintCache.count() == m_itemListView->model()->count());
}
@@ -135,9 +134,20 @@ void KItemListSizeHintResolver::itemsChanged(int index, int count, const QSet<QB
++index;
--count;
}
+
+ m_needsResolving = true;
}
void KItemListSizeHintResolver::clearCache()
{
m_sizeHintCache.fill(QSizeF());
+ m_needsResolving = true;
+}
+
+void KItemListSizeHintResolver::updateCache()
+{
+ if (m_needsResolving) {
+ m_itemListView->calculateItemSizeHints(m_sizeHintCache);
+ m_needsResolving = false;
+ }
}