diff options
| author | Frank Reininghaus <[email protected]> | 2013-07-05 19:42:39 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2013-07-05 19:42:39 +0200 |
| commit | 837be34333bc1b7d85649418366f26d64a6d6b2c (patch) | |
| tree | 267434e574ead1e14c5e6cd16ae710463c67d3ca /src/kitemviews/private/kitemlistsizehintresolver.cpp | |
| parent | 786cea007678c3fa086a45392eb6745d54d6e7c4 (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.cpp | 14 |
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) |
