aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquicklistview.cpp
diff options
context:
space:
mode:
authorBea Lam <bea.lam@nokia.com>2012-04-30 12:55:45 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-01 07:34:12 +0200
commit9a107f47ea50f40ce6b9695fba0190b99f76642a (patch)
treebc033c8f9dea88344bda4833719288df587b3e31 /src/quick/items/qquicklistview.cpp
parent01eb4d93c5894dbee6210712454a28e9fe9a680f (diff)
Fix content pos adjustment when resizing first item
If visibleItems.first() changes size in a ListView, the size change should be made in the direction of the content flow. This was not working correctly for layouts other than the default vertical+LTR layout. This patch fixes the issue for other layouts and also fixes resizing of implicitly sized delegates (e.g. positioners) within the default layout. Change-Id: Ib1d84ce000a3a341fe617cf644420dc5d589d577 Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com>
Diffstat (limited to 'src/quick/items/qquicklistview.cpp')
-rw-r--r--src/quick/items/qquicklistview.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index df50d3eb8c..bbfaeb0d1f 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -1336,9 +1336,29 @@ void QQuickListViewPrivate::itemGeometryChanged(QQuickItem *item, const QRectF &
QQuickItemViewPrivate::itemGeometryChanged(item, newGeometry, oldGeometry);
if (!q->isComponentComplete())
return;
+
if (item != contentItem && (!highlight || item != highlight->item)) {
if ((orient == QQuickListView::Vertical && newGeometry.height() != oldGeometry.height())
|| (orient == QQuickListView::Horizontal && newGeometry.width() != oldGeometry.width())) {
+
+ // if visibleItems.first() has resized, adjust its pos since it is used to
+ // position all subsequent items
+ if (visibleItems.count() && item == visibleItems.first()->item) {
+ FxListItemSG *listItem = static_cast<FxListItemSG*>(visibleItems.first());
+ if (orient == Qt::Vertical) {
+ qreal diff = newGeometry.height() - oldGeometry.height();
+ if (verticalLayoutDirection == QQuickListView::TopToBottom && listItem->endPosition() < q->contentY())
+ listItem->setPosition(listItem->position() - diff, true);
+ else if (verticalLayoutDirection == QQuickListView::BottomToTop && listItem->endPosition() > q->contentY())
+ listItem->setPosition(listItem->position() + diff, true);
+ } else {
+ qreal diff = newGeometry.width() - oldGeometry.width();
+ if (q->effectiveLayoutDirection() == Qt::LeftToRight && listItem->endPosition() < q->contentX())
+ listItem->setPosition(listItem->position() - diff, true);
+ else if (q->effectiveLayoutDirection() == Qt::RightToLeft && listItem->endPosition() > q->contentX())
+ listItem->setPosition(listItem->position() + diff, true);
+ }
+ }
forceLayout = true;
q->polish();
}