diff options
author | Martin Jones <martin.jones@nokia.com> | 2011-11-10 08:53:04 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-21 01:54:26 +0100 |
commit | 8eb0e48a051771fe99bce75497e803d98d9253ad (patch) | |
tree | 6c52e678a3b4d37e20288d022e65250374dce028 /tests/auto/declarative | |
parent | d81059e4f8d42869e1b9842a3b07e83c7da198be (diff) |
GridView sometimes lays out one less column than expected
If the cellWidth/cellHeight was not a whole number the wrapping was
unreliable. Calulate column positions more robustly, i.e. avoid
comparing values subject to rounding errors.
Task-number: QTBUG-21846
Change-Id: Ic3a90b36d542ce8af49461bd524e4405c74aece5
Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'tests/auto/declarative')
-rw-r--r-- | tests/auto/declarative/qquickgridview/data/unaligned.qml | 15 | ||||
-rw-r--r-- | tests/auto/declarative/qquickgridview/tst_qquickgridview.cpp | 60 |
2 files changed, 75 insertions, 0 deletions
diff --git a/tests/auto/declarative/qquickgridview/data/unaligned.qml b/tests/auto/declarative/qquickgridview/data/unaligned.qml new file mode 100644 index 0000000000..445400e8b4 --- /dev/null +++ b/tests/auto/declarative/qquickgridview/data/unaligned.qml @@ -0,0 +1,15 @@ +import QtQuick 2.0 + +GridView { + width: 400 + height: 200 + cellWidth: width/9 + cellHeight: height/2 + + model: testModel + delegate: Rectangle { + objectName: "wrapper"; width: 10; height: 10; color: "green" + Text { text: index } + } +} + diff --git a/tests/auto/declarative/qquickgridview/tst_qquickgridview.cpp b/tests/auto/declarative/qquickgridview/tst_qquickgridview.cpp index 7a399eb7bb..717423244e 100644 --- a/tests/auto/declarative/qquickgridview/tst_qquickgridview.cpp +++ b/tests/auto/declarative/qquickgridview/tst_qquickgridview.cpp @@ -114,6 +114,7 @@ private slots: void creationContext(); void snapToRow_data(); void snapToRow(); + void unaligned(); private: QQuickView *createView(); @@ -3343,6 +3344,65 @@ void tst_QQuickGridView::snapToRow() delete canvas; } +void tst_QQuickGridView::unaligned() +{ + QQuickView *canvas = createView(); + canvas->show(); + + TestModel model; + for (int i = 0; i < 10; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->setSource(QUrl::fromLocalFile(TESTDATA("unaligned.qml"))); + qApp->processEvents(); + + QQuickGridView *gridview = qobject_cast<QQuickGridView*>(canvas->rootObject()); + QVERIFY(gridview != 0); + + QQuickItem *contentItem = gridview->contentItem(); + QVERIFY(contentItem != 0); + + for (int i = 0; i < 10; ++i) { + QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QVERIFY(item); + QCOMPARE(item->x(), qreal((i%9)*gridview->cellWidth())); + QCOMPARE(item->y(), qreal((i/9)*gridview->cellHeight())); + } + + // appending + for (int i = 10; i < 18; ++i) { + model.addItem("Item" + QString::number(i), ""); + QQuickItem *item = 0; + QTRY_VERIFY(item = findItem<QQuickItem>(contentItem, "wrapper", i)); + QCOMPARE(item->x(), qreal((i%9)*gridview->cellWidth())); + QCOMPARE(item->y(), qreal((i/9)*gridview->cellHeight())); + } + + // inserting + for (int i = 0; i < 10; ++i) { + model.insertItem(i, "Item" + QString::number(i), ""); + QQuickItem *item = 0; + QTRY_VERIFY(item = findItem<QQuickItem>(contentItem, "wrapper", i)); + QCOMPARE(item->x(), qreal((i%9)*gridview->cellWidth())); + QCOMPARE(item->y(), qreal((i/9)*gridview->cellHeight())); + } + + // removing + model.removeItems(7, 10); + qApp->processEvents(); + for (int i = 0; i < 18; ++i) { + QQuickItem *item = 0; + QTRY_VERIFY(item = findItem<QQuickItem>(contentItem, "wrapper", i)); + QCOMPARE(item->x(), qreal(i%9)*gridview->cellWidth()); + QCOMPARE(item->y(), qreal(i/9)*gridview->cellHeight()); + } + + delete canvas; +} QQuickView *tst_QQuickGridView::createView() { |