diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquickgridview.cpp | 5 | ||||
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 1 | ||||
-rw-r--r-- | src/quick/items/qquicklistview.cpp | 13 |
3 files changed, 15 insertions, 4 deletions
diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp index 605e37e29f..b33f7d2a4d 100644 --- a/src/quick/items/qquickgridview.cpp +++ b/src/quick/items/qquickgridview.cpp @@ -542,6 +542,9 @@ void QQuickGridViewPrivate::updateViewport() void QQuickGridViewPrivate::layoutVisibleItems() { if (visibleItems.count()) { + const qreal from = isContentFlowReversed() ? -position() - size() : position(); + const qreal to = isContentFlowReversed() ? -position() : position() + size(); + FxGridItemSG *firstItem = static_cast<FxGridItemSG*>(visibleItems.first()); qreal rowPos = firstItem->rowPos(); qreal colPos = firstItem->colPos(); @@ -549,6 +552,7 @@ void QQuickGridViewPrivate::layoutVisibleItems() if (colPos != col * colSize()) { colPos = col * colSize(); firstItem->setPosition(colPos, rowPos); + firstItem->item->setVisible(rowPos + rowSize() >= from && rowPos <= to); } for (int i = 1; i < visibleItems.count(); ++i) { FxGridItemSG *item = static_cast<FxGridItemSG*>(visibleItems.at(i)); @@ -558,6 +562,7 @@ void QQuickGridViewPrivate::layoutVisibleItems() } colPos = col * colSize(); item->setPosition(colPos, rowPos); + item->item->setVisible(rowPos + rowSize() >= from && rowPos <= to); } } } diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index edbe2a5d06..340206b9dc 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -1651,6 +1651,7 @@ void QQuickItemViewPrivate::releaseItem(FxViewItem *item) itemPrivate->removeItemChangeListener(this, QQuickItemPrivate::Geometry); if (model->release(item->item) == 0) { // item was not destroyed, and we no longer reference it. + item->item->setVisible(false); unrequestedItems.insert(item->item, model->indexOf(item->item, q)); } delete item; diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index 88a38553ac..ab568dd04a 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -692,12 +692,18 @@ void QQuickListViewPrivate::visibleItemsChanged() void QQuickListViewPrivate::layoutVisibleItems() { if (!visibleItems.isEmpty()) { - bool fixedCurrent = currentItem && (*visibleItems.constBegin())->item == currentItem->item; - qreal sum = (*visibleItems.constBegin())->size(); - qreal pos = (*visibleItems.constBegin())->position() + (*visibleItems.constBegin())->size() + spacing; + const qreal from = isContentFlowReversed() ? -position() - size() : position(); + const qreal to = isContentFlowReversed() ? -position() : position() + size(); + + FxViewItem *firstItem = *visibleItems.constBegin(); + bool fixedCurrent = currentItem && firstItem->item == currentItem->item; + qreal sum = firstItem->size(); + qreal pos = firstItem->position() + firstItem->size() + spacing; + firstItem->item->setVisible(firstItem->endPosition() >= from && firstItem->position() <= to); for (int i=1; i < visibleItems.count(); ++i) { FxListItemSG *item = static_cast<FxListItemSG*>(visibleItems.at(i)); item->setPosition(pos); + item->item->setVisible(item->endPosition() >= from && item->position() <= to); pos += item->size() + spacing; sum += item->size(); fixedCurrent = fixedCurrent || (currentItem && item->item == currentItem->item); @@ -2373,7 +2379,6 @@ bool QQuickListViewPrivate::applyInsertionChange(const QDeclarativeChangeSet::In int modelIndex = change.index; int count = change.count; - qreal tempPos = isRightToLeft() ? -position()-size() : position(); int index = visibleItems.count() ? mapFromModel(modelIndex) : 0; |