aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Brooks <john.brooks@dereferenced.net>2014-02-09 02:34:25 -0700
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-10 23:15:36 +0100
commit8efc7c190b7cd57c3285ba8fcb9e17ea8f4717c2 (patch)
tree79c4ac46ee6895f3fb49090f1640d967a7161708
parent04fad1fc554efcf3cfb92cf1d6c223169d6a9342 (diff)
Fix origin for short reversed item views
Reversed (BottomToTop and RightToLeft) item views would report an impossible positive value for origin when contentHeight < height. The correct value will be effectively equivalent to the position of the footer, and always negative. Match other logic using lastPosition() by negating its value for reversed views. This fixes a bug with content disappearing in a Controls ScrollView on a BottomToTop view. Change-Id: Ieedbb64ce8fc7c0fb36e5256e437ddeb3e757761 Reviewed-by: Martin Jones <martin.jones@jollamobile.com>
-rw-r--r--src/quick/items/qquickitemview.cpp4
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp28
2 files changed, 21 insertions, 11 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index 5d6fc534b4..e5b2ee822c 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -1381,7 +1381,7 @@ qreal QQuickItemView::originX() const
if (d->layoutOrientation() == Qt::Horizontal
&& effectiveLayoutDirection() == Qt::RightToLeft
&& contentWidth() < width()) {
- return d->lastPosition() - d->footerSize();
+ return -d->lastPosition() - d->footerSize();
}
return QQuickFlickable::originX();
}
@@ -1392,7 +1392,7 @@ qreal QQuickItemView::originY() const
if (d->layoutOrientation() == Qt::Vertical
&& d->verticalLayoutDirection == QQuickItemView::BottomToTop
&& contentHeight() < height()) {
- return d->lastPosition() - d->footerSize();
+ return -d->lastPosition() - d->footerSize();
}
return QQuickFlickable::originY();
}
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index 4b52ad0071..97259e9fca 100644
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -3919,7 +3919,8 @@ void tst_QQuickListView::extents()
QFETCH(QPointF, minPos);
QFETCH(QPointF, maxPos);
QFETCH(QPointF, origin_empty);
- QFETCH(QPointF, origin_nonEmpty);
+ QFETCH(QPointF, origin_short);
+ QFETCH(QPointF, origin_long);
QQuickView *window = getView();
@@ -3956,12 +3957,20 @@ void tst_QQuickListView::extents()
QCOMPARE(listview->originX(), origin_empty.x());
QCOMPARE(listview->originY(), origin_empty.y());
- for (int i=0; i<30; i++)
+
+ for (int i=0; i<3; i++)
+ model.addItem("Item" + QString::number(i), "");
+ listview->forceLayout();
+ QTRY_COMPARE(listview->count(), model.count());
+ QCOMPARE(listview->originX(), origin_short.x());
+ QCOMPARE(listview->originY(), origin_short.y());
+
+ for (int i=3; i<30; i++)
model.addItem("Item" + QString::number(i), "");
listview->forceLayout();
QTRY_COMPARE(listview->count(), model.count());
- QCOMPARE(listview->originX(), origin_nonEmpty.x());
- QCOMPARE(listview->originY(), origin_nonEmpty.y());
+ QCOMPARE(listview->originX(), origin_long.x());
+ QCOMPARE(listview->originY(), origin_long.y());
releaseView(window);
}
@@ -3976,7 +3985,8 @@ void tst_QQuickListView::extents_data()
QTest::addColumn<QPointF>("minPos");
QTest::addColumn<QPointF>("maxPos");
QTest::addColumn<QPointF>("origin_empty");
- QTest::addColumn<QPointF>("origin_nonEmpty");
+ QTest::addColumn<QPointF>("origin_short");
+ QTest::addColumn<QPointF>("origin_long");
// header is 240x20 (or 20x320 in Horizontal orientation)
// footer is 240x30 (or 30x320 in Horizontal orientation)
@@ -3985,25 +3995,25 @@ void tst_QQuickListView::extents_data()
<< QQuickListView::Vertical << Qt::LeftToRight << QQuickItemView::TopToBottom
<< QPointF(0, -20) << QPointF(0, 0)
<< QPointF(0, 20) << QPointF(240, 20)
- << QPointF(0, -20) << QPointF(0, -20);
+ << QPointF(0, -20) << QPointF(0, -20) << QPointF(0, -20);
QTest::newRow("Vertical, BottomToTop")
<< QQuickListView::Vertical << Qt::LeftToRight << QQuickItemView::BottomToTop
<< QPointF(0, 0) << QPointF(0, -30)
<< QPointF(0, 320 - 20) << QPointF(240, 320 - 20) // content flow is reversed
- << QPointF(0, -30) << QPointF(0, (-30.0 * 30) - 30);
+ << QPointF(0, -30) << QPointF(0, (-30.0 * 3) - 30) << QPointF(0, (-30.0 * 30) - 30);
QTest::newRow("Horizontal, LeftToRight")
<< QQuickListView::Horizontal << Qt::LeftToRight << QQuickItemView::TopToBottom
<< QPointF(-20, 0) << QPointF(0, 0)
<< QPointF(20, 0) << QPointF(20, 320)
- << QPointF(-20, 0) << QPointF(-20, 0);
+ << QPointF(-20, 0) << QPointF(-20, 0) << QPointF(-20, 0);
QTest::newRow("Horizontal, RightToLeft")
<< QQuickListView::Horizontal << Qt::RightToLeft << QQuickItemView::TopToBottom
<< QPointF(0, 0) << QPointF(-30, 0)
<< QPointF(240 - 20, 0) << QPointF(240 - 20, 320) // content flow is reversed
- << QPointF(-30, 0) << QPointF((-240.0 * 30) - 30, 0);
+ << QPointF(-30, 0) << QPointF((-240.0 * 3) - 30, 0) << QPointF((-240.0 * 30) - 30, 0);
}
void tst_QQuickListView::resetModel_headerFooter()