From 8872c0716fb33e33311a78e693b61d3dd6b656c1 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Mon, 28 Nov 2011 11:26:40 +1000 Subject: Support inline images with tag in StyledText Task-number: QTBUG-21793 Change-Id: Ie7b9f293c6c9a949c1899152c38b61251b0069d3 Reviewed-by: Yann Bodson --- .../qtquick2/qquicktext/data/images/face-sad.png | Bin 0 -> 6148 bytes .../qtquick2/qquicktext/data/images/heart200.png | Bin 0 -> 8248 bytes .../qtquick2/qquicktext/data/images/starfish_2.png | Bin 0 -> 18243 bytes .../auto/qtquick2/qquicktext/data/imgTagsElide.qml | 24 +++++ .../qtquick2/qquicktext/data/imgTagsUpdates.qml | 12 +++ tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp | 120 +++++++++++++++++++++ 6 files changed, 156 insertions(+) create mode 100644 tests/auto/qtquick2/qquicktext/data/images/face-sad.png create mode 100644 tests/auto/qtquick2/qquicktext/data/images/heart200.png create mode 100644 tests/auto/qtquick2/qquicktext/data/images/starfish_2.png create mode 100644 tests/auto/qtquick2/qquicktext/data/imgTagsElide.qml create mode 100644 tests/auto/qtquick2/qquicktext/data/imgTagsUpdates.qml (limited to 'tests/auto/qtquick2/qquicktext') diff --git a/tests/auto/qtquick2/qquicktext/data/images/face-sad.png b/tests/auto/qtquick2/qquicktext/data/images/face-sad.png new file mode 100644 index 0000000000..24188b7985 Binary files /dev/null and b/tests/auto/qtquick2/qquicktext/data/images/face-sad.png differ diff --git a/tests/auto/qtquick2/qquicktext/data/images/heart200.png b/tests/auto/qtquick2/qquicktext/data/images/heart200.png new file mode 100644 index 0000000000..cedd3ea608 Binary files /dev/null and b/tests/auto/qtquick2/qquicktext/data/images/heart200.png differ diff --git a/tests/auto/qtquick2/qquicktext/data/images/starfish_2.png b/tests/auto/qtquick2/qquicktext/data/images/starfish_2.png new file mode 100644 index 0000000000..132c20ffd0 Binary files /dev/null and b/tests/auto/qtquick2/qquicktext/data/images/starfish_2.png differ diff --git a/tests/auto/qtquick2/qquicktext/data/imgTagsElide.qml b/tests/auto/qtquick2/qquicktext/data/imgTagsElide.qml new file mode 100644 index 0000000000..fbd64cc5bf --- /dev/null +++ b/tests/auto/qtquick2/qquicktext/data/imgTagsElide.qml @@ -0,0 +1,24 @@ +import QtQuick 2.0 + +Item { + width: 300 + height: 200 + + Text { + id: myText + objectName: "myText" + elide: Text.ElideRight + maximumLineCount: 2 + width: 200 + wrapMode: Text.WordWrap + text: "This is a sad face aligned to the top. Lorem ipsum dolor sit amet. Nulla sed turpis risus. Integer sit amet odio quis mauris varius venenatisLorem ipsum dolor sit amet. Nulla sed turpis risus. Integer sit amet odio quis mauris varius venenatis. Lorem ipsum dolor sit amet. Nulla sed turpis risus.Lorem ipsum dolor sit amet. Nulla sed turpis risus. Lorem ipsum dolor sit amet. Nulla sed turpis risus.Lorem ipsum dolor sit amet. Nulla sed turpis risus." + } + + MouseArea { + anchors.fill: parent + onClicked: myText.width = 400 + + } +} + + diff --git a/tests/auto/qtquick2/qquicktext/data/imgTagsUpdates.qml b/tests/auto/qtquick2/qquicktext/data/imgTagsUpdates.qml new file mode 100644 index 0000000000..baf5113e52 --- /dev/null +++ b/tests/auto/qtquick2/qquicktext/data/imgTagsUpdates.qml @@ -0,0 +1,12 @@ +import QtQuick 2.0 + +Rectangle { + id: main + width: 300; height: 400 + + Text { + id: myText + objectName: "myText" + text: "" + } +} diff --git a/tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp b/tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp index 706276c52f..cac65196eb 100644 --- a/tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp +++ b/tests/auto/qtquick2/qquicktext/tst_qquicktext.cpp @@ -107,6 +107,12 @@ private slots: void lineLaidOut(); + void imgTagsAlign_data(); + void imgTagsAlign(); + void imgTagsMultipleImages(); + void imgTagsElide(); + void imgTagsUpdates(); + void imgTagsError(); private: QStringList standard; @@ -1478,6 +1484,120 @@ void tst_qquicktext::lineLaidOut() delete canvas; } +void tst_qquicktext::imgTagsAlign_data() +{ + QTest::addColumn("src"); + QTest::addColumn("imgHeight"); + QTest::addColumn("align"); + QTest::newRow("heart-bottom") << "data/images/heart200.png" << 181 << "bottom"; + QTest::newRow("heart-middle") << "data/images/heart200.png" << 181 << "middle"; + QTest::newRow("heart-top") << "data/images/heart200.png" << 181 << "top"; + QTest::newRow("starfish-bottom") << "data/images/starfish_2.png" << 217 << "bottom"; + QTest::newRow("starfish-middle") << "data/images/starfish_2.png" << 217 << "middle"; + QTest::newRow("starfish-top") << "data/images/starfish_2.png" << 217 << "top"; +} + +void tst_qquicktext::imgTagsAlign() +{ + QFETCH(QString, src); + QFETCH(int, imgHeight); + QFETCH(QString, align); + QString componentStr = "import QtQuick 2.0\nText { text: \"This is a test of image.\" }"; + QDeclarativeComponent textComponent(&engine); + textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QQuickText *textObject = qobject_cast(textComponent.create()); + + QVERIFY(textObject != 0); + QVERIFY(textObject->height() == imgHeight); + + QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(textObject); + QVERIFY(textPrivate != 0); + + QRectF br = textPrivate->layout.boundingRect(); + if (align == "bottom") + QVERIFY(br.y() == imgHeight - br.height()); + else if (align == "middle") + QVERIFY(br.y() == imgHeight / 2.0 - br.height() / 2.0); + else if (align == "top") + QVERIFY(br.y() == 0); + + delete textObject; +} + +void tst_qquicktext::imgTagsMultipleImages() +{ + QString componentStr = "import QtQuick 2.0\nText { text: \"This is a starfish and another one.\" }"; + + QDeclarativeComponent textComponent(&engine); + textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QQuickText *textObject = qobject_cast(textComponent.create()); + + QVERIFY(textObject != 0); + QVERIFY(textObject->height() == 85); + + QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(textObject); + QVERIFY(textPrivate != 0); + QVERIFY(textPrivate->visibleImgTags.count() == 2); + + delete textObject; +} + +void tst_qquicktext::imgTagsElide() +{ + QQuickView *canvas = createView(testFile("imgTagsElide.qml")); + QQuickText *myText = canvas->rootObject()->findChild("myText"); + QVERIFY(myText != 0); + + QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(myText); + QVERIFY(textPrivate != 0); + QVERIFY(textPrivate->visibleImgTags.count() == 0); + myText->setMaximumLineCount(20); + QTRY_VERIFY(textPrivate->visibleImgTags.count() == 1); + + delete myText; + delete canvas; +} + +void tst_qquicktext::imgTagsUpdates() +{ + QQuickView *canvas = createView(testFile("imgTagsUpdates.qml")); + QQuickText *myText = canvas->rootObject()->findChild("myText"); + QVERIFY(myText != 0); + + QSignalSpy spy(myText, SIGNAL(paintedSizeChanged())); + + QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(myText); + QVERIFY(textPrivate != 0); + + myText->setText("This is a heart."); + QVERIFY(textPrivate->visibleImgTags.count() == 1); + QVERIFY(spy.count() == 1); + + myText->setMaximumLineCount(2); + myText->setText("This is another heart."); + QTRY_VERIFY(textPrivate->visibleImgTags.count() == 1); + + // if maximumLineCount is set and the img tag doesn't have an explicit size + // we relayout twice. + QVERIFY(spy.count() == 3); + + delete myText; + delete canvas; +} + +void tst_qquicktext::imgTagsError() +{ + QString componentStr = "import QtQuick 2.0\nText { text: \"This is a starfish.\" }"; + + QDeclarativeComponent textComponent(&engine); + QTest::ignoreMessage(QtWarningMsg, "file::2:1: QML Text: Cannot open: file:data/images/starfish_2.pn"); + textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QQuickText *textObject = qobject_cast(textComponent.create()); + + QVERIFY(textObject != 0); + delete textObject; +} + QTEST_MAIN(tst_qquicktext) #include "tst_qquicktext.moc" -- cgit v1.2.3