aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2011-12-09 12:55:32 +1000
committerQt by Nokia <qt-info@nokia.com>2011-12-20 07:33:37 +0100
commitac50bb1b85ccd3e08053e1284be50847d32688dc (patch)
treebdb285fec33251d6e715aabbfe3e7eaf6ae44d03 /src
parentf3c7d8c357d8c119287cf8d520e48098170b47c5 (diff)
Ensure items in ListView and GridViews viewport are visible.
Unrequested items and items in the cache buffer are hidden by the views. Make these items visible again if they enter the viewport due to a relayout. Change-Id: I574d1513e88c31c3c01a4a20ac77c21111279d3e Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickgridview.cpp5
-rw-r--r--src/quick/items/qquickitemview.cpp1
-rw-r--r--src/quick/items/qquicklistview.cpp13
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;