aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-02-02 11:46:55 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-02 09:09:37 +0100
commit897ab4f34156b928ff5b59965cfb8d708db232d7 (patch)
treefaa8e281131877f03cf25caad9c5b87ece5fe6c7 /src/quick
parentf80dcdab84e563326ad19731f6ad8fb4fcb73f2a (diff)
Incorrect initial pos after resizing view with margins.
The currentItem tracking didn't position the view to show the margins. This affects resizing the view and also changing currentIndex. Task-number: QTBUG-24028 Change-Id: I47d4c771c0d712c93abadfb6b2deb5194241fb6b Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/items/qquickitemview.cpp45
-rw-r--r--src/quick/items/qquickitemview_p_p.h2
2 files changed, 27 insertions, 20 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index a90d7cc8a0..513a600046 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -186,7 +186,7 @@ void QQuickItemView::setModel(const QVariant &model)
QQuickVisualModel *oldModel = d->model;
d->clear();
- d->setPosition(d->contentStartPosition());
+ d->setPosition(d->contentStartOffset());
d->model = 0;
d->modelVariant = model;
@@ -837,22 +837,27 @@ void QQuickItemView::trackedPositionChanged()
qreal trackedEndPos = d->trackedItem->endPosition();
qreal toItemPos = d->currentItem->position();
qreal toItemEndPos = d->currentItem->endPosition();
-
- if (d->header && d->showHeaderForIndex(d->currentIndex)) {
- trackedPos -= d->headerSize();
- trackedEndPos -= d->headerSize();
- toItemPos -= d->headerSize();
- toItemEndPos -= d->headerSize();
- } else if (d->footer && d->showFooterForIndex(d->currentIndex)) {
- trackedPos += d->footerSize();
- trackedEndPos += d->footerSize();
- toItemPos += d->footerSize();
- toItemEndPos += d->footerSize();
+ if (d->showHeaderForIndex(d->currentIndex)) {
+ qreal startOffset = -d->contentStartOffset();
+ trackedPos -= startOffset;
+ trackedEndPos -= startOffset;
+ toItemPos -= startOffset;
+ toItemEndPos -= startOffset;
+ } else if (d->showFooterForIndex(d->currentIndex)) {
+ qreal endOffset = d->footerSize();
+ if (d->layoutOrientation() == Qt::Vertical)
+ endOffset += d->vData.endMargin;
+ else if (d->isContentFlowReversed())
+ endOffset += d->hData.endMargin;
+ else
+ endOffset += d->hData.startMargin;
+ trackedPos += endOffset;
+ trackedEndPos += endOffset;
+ toItemPos += endOffset;
+ toItemEndPos += endOffset;
}
- if (trackedPos < viewPos && toItemPos < viewPos) {
- pos = qMax(trackedPos, toItemPos);
- } else if (trackedEndPos >= viewPos + d->size()
+ if (trackedEndPos >= viewPos + d->size()
&& toItemEndPos >= viewPos + d->size()) {
if (trackedEndPos <= toItemEndPos) {
pos = trackedEndPos - d->size();
@@ -864,6 +869,8 @@ void QQuickItemView::trackedPositionChanged()
pos = d->currentItem->position();
}
}
+ if (trackedPos < pos && toItemPos < pos)
+ pos = qMax(trackedPos, toItemPos);
}
if (viewPos != pos) {
cancelFlick();
@@ -1078,7 +1085,7 @@ void QQuickItemView::componentComplete()
d->updateHeader();
d->updateFooter();
d->updateViewport();
- d->setPosition(d->contentStartPosition());
+ d->setPosition(d->contentStartOffset());
if (d->isValid()) {
d->refill();
d->moveReason = QQuickItemViewPrivate::SetIndex;
@@ -1148,7 +1155,7 @@ qreal QQuickItemViewPrivate::endPosition() const
return isContentFlowReversed() ? -originPosition() : lastPosition();
}
-qreal QQuickItemViewPrivate::contentStartPosition() const
+qreal QQuickItemViewPrivate::contentStartOffset() const
{
qreal pos = -headerSize();
if (layoutOrientation() == Qt::Vertical)
@@ -1353,7 +1360,7 @@ void QQuickItemViewPrivate::regenerate()
updateFooter();
clear();
updateViewport();
- setPosition(contentStartPosition());
+ setPosition(contentStartOffset());
refill();
updateCurrent(currentIndex);
}
@@ -1378,7 +1385,7 @@ void QQuickItemViewPrivate::layout()
if (!isValid() && !visibleItems.count()) {
clear();
- setPosition(contentStartPosition());
+ setPosition(contentStartOffset());
return;
}
diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h
index 56a22437ad..340349e9f7 100644
--- a/src/quick/items/qquickitemview_p_p.h
+++ b/src/quick/items/qquickitemview_p_p.h
@@ -126,7 +126,7 @@ public:
qreal size() const;
qreal startPosition() const;
qreal endPosition() const;
- qreal contentStartPosition() const;
+ qreal contentStartOffset() const;
int findLastVisibleIndex(int defaultValue = -1) const;
FxViewItem *visibleItem(int modelIndex) const;
FxViewItem *firstVisibleItem() const;