From 705c2bf4e5c71e4d31a387ed85e205962a344580 Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Thu, 23 Apr 2015 21:29:47 +1000 Subject: Fix implicitHeight for Text items bindings dependent on implicitWidth. Recalculate the implicitHeight on the second layout if the width changes after setting the implicitWidth, and potentially do another layout if the updating the implicitHeight changes the height. Change-Id: Ib6a637452013b56dba7ae8a6862cd92156386578 Task-number: QTBUG-45546 Reviewed-by: Michael Brasser Reviewed-by: Albert Astals Cid Reviewed-by: Eskil Abrahamsen Blomfeldt --- tests/auto/quick/qquicktext/data/implicitSizes.qml | 99 ++++++++++++++++++++++ tests/auto/quick/qquicktext/tst_qquicktext.cpp | 57 +++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 tests/auto/quick/qquicktext/data/implicitSizes.qml (limited to 'tests/auto/quick/qquicktext') diff --git a/tests/auto/quick/qquicktext/data/implicitSizes.qml b/tests/auto/quick/qquicktext/data/implicitSizes.qml new file mode 100644 index 0000000000..fae67c0273 --- /dev/null +++ b/tests/auto/quick/qquicktext/data/implicitSizes.qml @@ -0,0 +1,99 @@ +import QtQuick 2.0 + +Rectangle { + width: 200 + height: column.height + + Column { + id: column + Text { + id: reference + objectName: "reference" + + wrapMode: Text.Wrap + elide: Text.ElideRight + + 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." + } + Text { + id: fixedWidthAndHeight + objectName: "fixedWidthAndHeight" + + width: 100 + height: 100 + + wrapMode: Text.Wrap + elide: Text.ElideRight + + text: reference.text + } + + Text { + id: implicitWidthFixedHeight + objectName: "implicitWidthFixedHeight" + + height: 100 + + wrapMode: Text.Wrap + elide: Text.ElideRight + + text: reference.text + } + Text { + id: fixedWidthImplicitHeight + objectName: "fixedWidthImplicitHeight" + + width: 100 + + wrapMode: Text.Wrap + elide: Text.ElideRight + + text: reference.text + } + Text { + id: cappedWidthAndHeight + objectName: "cappedWidthAndHeight" + + width: Math.min(100, implicitWidth) + height: Math.min(100, implicitHeight) + + wrapMode: Text.Wrap + elide: Text.ElideRight + + text: reference.text + } + Text { + id: cappedWidthFixedHeight + objectName: "cappedWidthFixedHeight" + + width: Math.min(100, implicitWidth) + height: 100 + + wrapMode: Text.Wrap + elide: Text.ElideRight + + text: reference.text + } + Text { + id: fixedWidthCappedHeight + objectName: "fixedWidthCappedHeight" + + width: 100 + height: Math.min(100, implicitHeight) + + wrapMode: Text.Wrap + elide: Text.ElideRight + + text: reference.text + } + } +} diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp index f25c09fcd1..eb9f7529fe 100644 --- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp +++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp @@ -106,6 +106,7 @@ private slots: void implicitSize_data(); void implicitSize(); + void dependentImplicitSizes(); void contentSize(); void implicitSizeBinding_data(); void implicitSizeBinding(); @@ -2206,6 +2207,62 @@ void tst_qquicktext::implicitSize() delete textObject; } +void tst_qquicktext::dependentImplicitSizes() +{ + QQmlComponent component(&engine, testFile("implicitSizes.qml")); + QScopedPointer object(component.create()); + QVERIFY(object.data()); + + QQuickText *reference = object->findChild("reference"); + QQuickText *fixedWidthAndHeight = object->findChild("fixedWidthAndHeight"); + QQuickText *implicitWidthFixedHeight = object->findChild("implicitWidthFixedHeight"); + QQuickText *fixedWidthImplicitHeight = object->findChild("fixedWidthImplicitHeight"); + QQuickText *cappedWidthAndHeight = object->findChild("cappedWidthAndHeight"); + QQuickText *cappedWidthFixedHeight = object->findChild("cappedWidthFixedHeight"); + QQuickText *fixedWidthCappedHeight = object->findChild("fixedWidthCappedHeight"); + + QVERIFY(reference); + QVERIFY(fixedWidthAndHeight); + QVERIFY(implicitWidthFixedHeight); + QVERIFY(fixedWidthImplicitHeight); + QVERIFY(cappedWidthAndHeight); + QVERIFY(cappedWidthFixedHeight); + QVERIFY(fixedWidthCappedHeight); + + QCOMPARE(reference->width(), reference->implicitWidth()); + QCOMPARE(reference->height(), reference->implicitHeight()); + + QVERIFY(fixedWidthAndHeight->width() < fixedWidthAndHeight->implicitWidth()); + QVERIFY(fixedWidthAndHeight->height() < fixedWidthAndHeight->implicitHeight()); + QCOMPARE(fixedWidthAndHeight->implicitWidth(), reference->implicitWidth()); + QVERIFY(fixedWidthAndHeight->implicitHeight() > reference->implicitHeight()); + + QCOMPARE(implicitWidthFixedHeight->width(), implicitWidthFixedHeight->implicitWidth()); + QVERIFY(implicitWidthFixedHeight->height() < implicitWidthFixedHeight->implicitHeight()); + QCOMPARE(implicitWidthFixedHeight->implicitWidth(), reference->implicitWidth()); + QCOMPARE(implicitWidthFixedHeight->implicitHeight(), reference->implicitHeight()); + + QVERIFY(fixedWidthImplicitHeight->width() < fixedWidthImplicitHeight->implicitWidth()); + QCOMPARE(fixedWidthImplicitHeight->height(), fixedWidthImplicitHeight->implicitHeight()); + QCOMPARE(fixedWidthImplicitHeight->implicitWidth(), reference->implicitWidth()); + QCOMPARE(fixedWidthImplicitHeight->implicitHeight(), fixedWidthAndHeight->implicitHeight()); + + QVERIFY(cappedWidthAndHeight->width() < cappedWidthAndHeight->implicitWidth()); + QVERIFY(cappedWidthAndHeight->height() < cappedWidthAndHeight->implicitHeight()); + QCOMPARE(cappedWidthAndHeight->implicitWidth(), reference->implicitWidth()); + QCOMPARE(cappedWidthAndHeight->implicitHeight(), fixedWidthAndHeight->implicitHeight()); + + QVERIFY(cappedWidthFixedHeight->width() < cappedWidthAndHeight->implicitWidth()); + QVERIFY(cappedWidthFixedHeight->height() < cappedWidthFixedHeight->implicitHeight()); + QCOMPARE(cappedWidthFixedHeight->implicitWidth(), reference->implicitWidth()); + QCOMPARE(cappedWidthFixedHeight->implicitHeight(), fixedWidthAndHeight->implicitHeight()); + + QVERIFY(fixedWidthCappedHeight->width() < fixedWidthCappedHeight->implicitWidth()); + QVERIFY(fixedWidthCappedHeight->height() < fixedWidthCappedHeight->implicitHeight()); + QCOMPARE(fixedWidthCappedHeight->implicitWidth(), reference->implicitWidth()); + QCOMPARE(fixedWidthCappedHeight->implicitHeight(), fixedWidthAndHeight->implicitHeight()); +} + void tst_qquicktext::contentSize() { QString componentStr = "import QtQuick 2.0\nText { width: 75; height: 16; font.pixelSize: 10 }"; -- cgit v1.2.3