diff options
author | Albert Astals Cid <[email protected]> | 2013-05-28 10:28:56 +0200 |
---|---|---|
committer | The Qt Project <[email protected]> | 2013-07-24 11:30:40 +0200 |
commit | 3f01f6ff0396148e753066f481b3828522a94514 (patch) | |
tree | 0c1b5223c5d213818c5e1dd6852a913b3278ba89 /src/quick/items/qquicklistview.cpp | |
parent | 36e4dbf5bf8f84e86133e001158ed72c0712803b (diff) |
Resizing items out of the list viewport should not change the viewport
Consider the old geometry, not the new one to check if an item
was outside the viewport or not
Change-Id: I108412d560faf86130044f3d091254c07af0c004
Reviewed-by: Alan Alpert <[email protected]>
Diffstat (limited to 'src/quick/items/qquicklistview.cpp')
-rw-r--r-- | src/quick/items/qquicklistview.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index f0e39c5e5a..afbbca201e 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -1360,16 +1360,18 @@ void QQuickListViewPrivate::itemGeometryChanged(QQuickItem *item, const QRectF & if (visibleItems.count() && item == visibleItems.first()->item) { FxListItemSG *listItem = static_cast<FxListItemSG*>(visibleItems.first()); if (orient == QQuickListView::Vertical) { + const qreal oldItemEndPosition = verticalLayoutDirection == QQuickItemView::BottomToTop ? -oldGeometry.y() : oldGeometry.y() + oldGeometry.height(); qreal diff = newGeometry.height() - oldGeometry.height(); - if (verticalLayoutDirection == QQuickListView::TopToBottom && listItem->endPosition() < q->contentY()) + if (verticalLayoutDirection == QQuickListView::TopToBottom && oldItemEndPosition < q->contentY()) listItem->setPosition(listItem->position() - diff, true); - else if (verticalLayoutDirection == QQuickListView::BottomToTop && listItem->endPosition() > q->contentY()) + else if (verticalLayoutDirection == QQuickListView::BottomToTop && oldItemEndPosition > q->contentY()) listItem->setPosition(listItem->position() + diff, true); } else { + const qreal oldItemEndPosition = q->effectiveLayoutDirection() == Qt::RightToLeft ? -oldGeometry.x() : oldGeometry.x() + oldGeometry.width(); qreal diff = newGeometry.width() - oldGeometry.width(); - if (q->effectiveLayoutDirection() == Qt::LeftToRight && listItem->endPosition() < q->contentX()) + if (q->effectiveLayoutDirection() == Qt::LeftToRight && oldItemEndPosition < q->contentX()) listItem->setPosition(listItem->position() - diff, true); - else if (q->effectiveLayoutDirection() == Qt::RightToLeft && listItem->endPosition() > q->contentX()) + else if (q->effectiveLayoutDirection() == Qt::RightToLeft && oldItemEndPosition > q->contentX()) listItem->setPosition(listItem->position() + diff, true); } } |