diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2010-05-31 08:00:54 (GMT) |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2010-05-31 11:18:10 (GMT) |
commit | 817469519a784b1cc84f89cb3cb84f7560874f8e (patch) | |
tree | d4bac4e4e96cc52d79ffe3e7e1e6258cca33e357 | |
parent | 59e281bcc2bc24ae93eaf2751cc6fcc48bfd6302 (diff) | |
download | Qt-817469519a784b1cc84f89cb3cb84f7560874f8e.zip Qt-817469519a784b1cc84f89cb3cb84f7560874f8e.tar.gz Qt-817469519a784b1cc84f89cb3cb84f7560874f8e.tar.bz2 |
Fix unreasonably large width of QTextLayout::boundingRect()
When no lineWidth is set on the QTextLine, the QScriptLine::width will
be the maximum value that can be represented by QFixed, thus always
overriding the width of the bounding rect. The lineWidth of the
QTextLine should never be used as the width of the bounding rect, since
it's not a calculated value. The real bounding rect is found by querying
the natural text width.
Task-number: QTBUG-11104
Reviewed-by: Rhys Weatherley
-rw-r--r-- | src/gui/text/qtextlayout.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qtextlayout/tst_qtextlayout.cpp | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index ce7915d..a1a17af 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -858,7 +858,7 @@ QRectF QTextLayout::boundingRect() const const QScriptLine &si = d->lines[i]; xmin = qMin(xmin, si.x); ymin = qMin(ymin, si.y); - xmax = qMax(xmax, si.x+qMax(si.width, si.textWidth)); + xmax = qMax(xmax, si.x+si.textWidth); // ### shouldn't the ascent be used in ymin??? ymax = qMax(ymax, si.y+si.height()); } diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index caf9bd3..b67dc30 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -110,6 +110,7 @@ private slots: void longText(); void widthOfTabs(); void columnWrapWithTabs(); + void boundingRectForUnsetLineWidth(); // QTextLine stuff void setNumColumnsWrapAtWordBoundaryOrAnywhere(); @@ -1307,6 +1308,17 @@ void tst_QTextLayout::columnWrapWithTabs() } +void tst_QTextLayout::boundingRectForUnsetLineWidth() +{ + QTextLayout layout("FOOBAR"); + + layout.beginLayout(); + QTextLine line = layout.createLine(); + layout.endLayout(); + + QCOMPARE(layout.boundingRect().width(), line.naturalTextWidth()); +} + void tst_QTextLayout::lineWidthFromBOM() { const QString string(QChar(0xfeff)); // BYTE ORDER MARK |