From 2b249427b0323b7cfb0fc2a2a01361dac460d228 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Mon, 4 Jun 2012 17:21:30 +1000 Subject: Make sure we relayout on height change when onLineLaidOut is used Change-Id: I66e47682eba337562543a99eb576a7e24d00cdcf Reviewed-by: Andrew den Exter --- .../quick/qquicktext/data/lineLayoutRelayout.qml | 45 ++++++++++++++++++++++ tests/auto/quick/qquicktext/tst_qquicktext.cpp | 37 ++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 tests/auto/quick/qquicktext/data/lineLayoutRelayout.qml (limited to 'tests/auto/quick/qquicktext') diff --git a/tests/auto/quick/qquicktext/data/lineLayoutRelayout.qml b/tests/auto/quick/qquicktext/data/lineLayoutRelayout.qml new file mode 100644 index 0000000000..2e1aa6a17d --- /dev/null +++ b/tests/auto/quick/qquicktext/data/lineLayoutRelayout.qml @@ -0,0 +1,45 @@ +import QtQuick 2.0 + +Rectangle { + id: main + width: 320 + height: 418 + + property int yOffset: 0 + + Component.onCompleted: myText.height = height + + Text { + id: myText + objectName: "myText" + width: parent.width + height: 0 + wrapMode: Text.WordWrap + font.pointSize: 14 + focus: true + + text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. +Integer at ante dui Curabitur ante est, pulvinar quis adipiscing a, iaculis id ipsum. Nunc blandit +condimentum odio vel egestas. in ipsum lacinia sit amet +mattis orci interdum. Quisque vitae accumsan lectus. Ut nisi turpis, +sollicitudin ut dignissim id, fermentum ac est. Maecenas nec libero leo. Sed ac +mattis orci interdum. Quisque vitae accumsan lectus. Ut nisi turpis, +sollicitudin ut dignissim id, fermentum ac est. Maecenas nec libero leo. Sed ac +leo eget ipsum ultricies viverra sit amet eu orci. Praesent et tortor risus, +viverra accumsan sapien. Sed faucibus eleifend lectus, sed euismod urna porta +eu. Quisque vitae accumsan lectus." + + onLineLaidOut: { + line.width = width / 2 + + if (line.y + line.height >= height) { + if (main.yOffset === 0) + main.yOffset = line.y + line.y -= main.yOffset + line.x = width / 2 + } else { + main.yOffset = 0 + } + } + } +} diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp index 28eed57a95..7d24de6ccd 100644 --- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp +++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp @@ -117,6 +117,7 @@ private slots: void boundingRect(); void clipRect(); void lineLaidOut(); + void lineLaidOutRelayout(); void imgTagsBaseUrl_data(); void imgTagsBaseUrl(); @@ -1898,6 +1899,42 @@ void tst_qquicktext::lineLaidOut() delete canvas; } +void tst_qquicktext::lineLaidOutRelayout() +{ + QQuickView *canvas = createView(testFile("lineLayoutRelayout.qml")); + + canvas->show(); + canvas->requestActivateWindow(); + QTest::qWaitForWindowShown(canvas); + + QQuickText *myText = canvas->rootObject()->findChild("myText"); + QVERIFY(myText != 0); + + QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(myText); + QVERIFY(textPrivate != 0); + + QVERIFY(!textPrivate->extra.isAllocated()); + +#if defined(Q_OS_MAC) + QVERIFY(myText->lineCount() == textPrivate->linesRects.count()); +#endif + + qreal maxH = 0; + for (int i = 0; i < textPrivate->layout.lineCount(); ++i) { + QRectF r = textPrivate->layout.lineAt(i).rect(); + + if (r.x() == 0) { + QCOMPARE(r.y(), i * r.height()); + maxH = qMax(maxH, r.y() + r.height()); + } else { + QCOMPARE(r.x(), myText->width() / 2); + QCOMPARE(r.y(), (i * r.height()) - maxH); + } + } + + delete canvas; +} + void tst_qquicktext::imgTagsBaseUrl_data() { QTest::addColumn("src"); -- cgit v1.2.3