summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2010-02-03 02:00:43 (GMT)
committerMartin Jones <martin.jones@nokia.com>2010-02-03 02:00:43 (GMT)
commitc504440e135c9f67dfcf8acf6e0c6a4b53bf12ad (patch)
tree43ae648b6d11f2e64f97bd013fa31aee2fc177b5
parent9da60fd314e0a307a9247552e416ca09ac613dd2 (diff)
downloadQt-c504440e135c9f67dfcf8acf6e0c6a4b53bf12ad.zip
Qt-c504440e135c9f67dfcf8acf6e0c6a4b53bf12ad.tar.gz
Qt-c504440e135c9f67dfcf8acf6e0c6a4b53bf12ad.tar.bz2
Ensure unrequested items are placed outside the visible area.
-rw-r--r--src/declarative/graphicsitems/qmlgraphicsgridview.cpp1
-rw-r--r--src/declarative/graphicsitems/qmlgraphicslistview.cpp26
2 files changed, 18 insertions, 9 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicsgridview.cpp b/src/declarative/graphicsitems/qmlgraphicsgridview.cpp
index 05868ba..890d3ad 100644
--- a/src/declarative/graphicsitems/qmlgraphicsgridview.cpp
+++ b/src/declarative/graphicsitems/qmlgraphicsgridview.cpp
@@ -374,6 +374,7 @@ FxGridItem *QmlGraphicsGridViewPrivate::createItem(int modelIndex)
model->completeItem();
listItem->item->setZValue(1);
listItem->item->setParent(q->viewport());
+ unrequestedItems.remove(listItem->item);
}
requestedIndex = 0;
return listItem;
diff --git a/src/declarative/graphicsitems/qmlgraphicslistview.cpp b/src/declarative/graphicsitems/qmlgraphicslistview.cpp
index 8bde152..ad0aa04 100644
--- a/src/declarative/graphicsitems/qmlgraphicslistview.cpp
+++ b/src/declarative/graphicsitems/qmlgraphicslistview.cpp
@@ -605,6 +605,7 @@ FxListItem *QmlGraphicsListViewPrivate::createItem(int modelIndex)
if (listItem->attached->m_prevSection != listItem->attached->m_section)
createSection(listItem);
}
+ unrequestedItems.remove(listItem->item);
}
requestedIndex = -1;
@@ -731,6 +732,7 @@ void QmlGraphicsListViewPrivate::refill(qreal from, qreal to, bool doBuffer)
if (footer)
updateFooter();
updateViewport();
+ updateUnrequestedPositions();
} else if (!doBuffer && buffer && bufferMode != NoBuffer) {
refill(from, to, true);
}
@@ -765,7 +767,6 @@ void QmlGraphicsListViewPrivate::layout()
updateHeader();
if (footer)
updateFooter();
- updateUnrequestedPositions();
updateViewport();
}
@@ -779,14 +780,20 @@ void QmlGraphicsListViewPrivate::updateUnrequestedIndexes()
void QmlGraphicsListViewPrivate::updateUnrequestedPositions()
{
- QHash<QmlGraphicsItem*,int>::const_iterator it;
- for (it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it) {
- if (visibleItem(*it))
- continue;
- if (orient == QmlGraphicsListView::Vertical)
- it.key()->setY(positionAt(*it));
- else
- it.key()->setX(positionAt(*it));
+ Q_Q(QmlGraphicsListView);
+ if (unrequestedItems.count()) {
+ qreal pos = position();
+ QHash<QmlGraphicsItem*,int>::const_iterator it;
+ for (it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it) {
+ QmlGraphicsItem *item = it.key();
+ if (orient == QmlGraphicsListView::Vertical) {
+ if (item->y() + item->height() > pos && item->y() < pos + q->height())
+ item->setY(positionAt(*it));
+ } else {
+ if (item->x() + item->width() > pos && item->x() < pos + q->width())
+ item->setX(positionAt(*it));
+ }
+ }
}
}
@@ -2611,6 +2618,7 @@ void QmlGraphicsListView::destroyRemoved()
void QmlGraphicsListView::itemsMoved(int from, int to, int count)
{
Q_D(QmlGraphicsListView);
+ d->updateUnrequestedIndexes();
if (d->visibleItems.isEmpty()) {
refill();