┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/private/kitemlistsizehintresolver.cpp
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2013-07-05 19:42:39 +0200
committerFrank Reininghaus <[email protected]>2013-07-05 19:42:39 +0200
commit837be34333bc1b7d85649418366f26d64a6d6b2c (patch)
tree267434e574ead1e14c5e6cd16ae710463c67d3ca /src/kitemviews/private/kitemlistsizehintresolver.cpp
parent786cea007678c3fa086a45392eb6745d54d6e7c4 (diff)
Keep the "item size hints" of moved items
It's quite expensive to re-calculate them, so we should better just move them to the correct position, rather than throwing them away. REVIEW: 111399
Diffstat (limited to 'src/kitemviews/private/kitemlistsizehintresolver.cpp')
-rw-r--r--src/kitemviews/private/kitemlistsizehintresolver.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/kitemviews/private/kitemlistsizehintresolver.cpp b/src/kitemviews/private/kitemlistsizehintresolver.cpp
index 5db87f34d..e44630243 100644
--- a/src/kitemviews/private/kitemlistsizehintresolver.cpp
+++ b/src/kitemviews/private/kitemlistsizehintresolver.cpp
@@ -114,13 +114,17 @@ void KItemListSizeHintResolver::itemsRemoved(const KItemRangeList& itemRanges)
}
}
-void KItemListSizeHintResolver::itemsMoved(int index, int count)
+void KItemListSizeHintResolver::itemsMoved(const KItemRange& range, const QList<int>& movedToIndexes)
{
- while (count) {
- m_sizeHintCache[index] = QSizeF();
- ++index;
- --count;
+ QVector<QSizeF> newSizeHintCache(m_sizeHintCache);
+
+ const int movedRangeEnd = range.index + range.count;
+ for (int i = range.index; i < movedRangeEnd; ++i) {
+ const int newIndex = movedToIndexes.at(i);
+ newSizeHintCache[newIndex] = m_sizeHintCache.at(i);
}
+
+ m_sizeHintCache = newSizeHintCache;
}
void KItemListSizeHintResolver::itemsChanged(int index, int count, const QSet<QByteArray>& roles)