diff options
author | Eskil Abrahamsen Blomfeldt <eblomfel@trolltech.com> | 2009-08-14 17:38:31 +0200 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eblomfel@trolltech.com> | 2009-08-14 17:55:10 +0200 |
commit | a7b24170890aad476345a5d7a56ded8d62c53df0 (patch) | |
tree | f4d8dd08f8801e984b9a35b5dee1fab2996d8781 | |
parent | 78fbb9cf6ef5e8440f0453ef60bd7845ce418745 (diff) |
Avoid wrapping outside word boundaries in QTextDocument unless necessary
If you have a floating object which affects the width available to the
text, we need to recalculate the width of the text line. In the code,
the setLineWidth() call to do this would by default have WrapAnywhere
as its wrap mode, even when this was not necessary. The code has now
been moved so that WrapAnywhere is only used if we try to set the
line width to match the available width and detect that the text is
too wide (the natural text width exceeds the available space.)
Task-number: 240325
Reviewed-by: Simon Hausmann
-rw-r--r-- | src/gui/text/qtextdocumentlayout.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index e26961f60..a795c1fe3 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2601,13 +2601,13 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi // float has been added in the meantime, redo layoutStruct->pendingFloats.clear(); - if (haveWordOrAnyWrapMode) { - option.setWrapMode(QTextOption::WrapAnywhere); - tl->setTextOption(option); - } - line.setLineWidth((right-left).toReal()); if (QFixed::fromReal(line.naturalTextWidth()) > right-left) { + if (haveWordOrAnyWrapMode) { + option.setWrapMode(QTextOption::WrapAnywhere); + tl->setTextOption(option); + } + layoutStruct->pendingFloats.clear(); // lines min width more than what we have layoutStruct->y = findY(layoutStruct->y, layoutStruct, QFixed::fromReal(line.naturalTextWidth())); @@ -2619,12 +2619,13 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi else right -= text_indent; line.setLineWidth(qMax<qreal>(line.naturalTextWidth(), (right-left).toReal())); - } - if (haveWordOrAnyWrapMode) { - option.setWrapMode(QTextOption::WordWrap); - tl->setTextOption(option); + if (haveWordOrAnyWrapMode) { + option.setWrapMode(QTextOption::WordWrap); + tl->setTextOption(option); + } } + } QFixed lineHeight = QFixed::fromReal(line.height()); |