From 11bb4f85ef38270758ec0930709c23c7fcb5840c Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Tue, 2 Nov 2010 16:41:01 +1000 Subject: Regression: Text element breaks when using \n for separating lines Task-number: QTBUG-14915 Reviewed-by: Michael Brasser --- src/declarative/graphicsitems/qdeclarativetext.cpp | 24 ++-- .../qdeclarativetext/font/data-MAC/plaintext2.qml | 131 +++++++++++++++++++++ .../qmlvisual/qdeclarativetext/font/plaintext2.qml | 22 ++++ 3 files changed, 165 insertions(+), 12 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext2.qml diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 03c9765..8cb47aa 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -291,30 +291,30 @@ QSize QDeclarativeTextPrivate::setupTextLayout() qreal height = 0; qreal lineWidth = 0; - //set manual width - if (q->widthValid()) - lineWidth = q->width(); - QTextOption textOption = layout.textOption(); - textOption.setWrapMode(QTextOption::WrapMode(wrapMode)); + textOption.setWrapMode(QTextOption::NoWrap); textOption.setAlignment(Qt::Alignment(hAlign)); - layout.setTextOption(textOption); + // if the item has an explicit width, we set the line width and enable wrapping + if (q->widthValid()) { + lineWidth = q->width(); + textOption.setWrapMode(QTextOption::WrapMode(wrapMode)); + } + + layout.setTextOption(textOption); layout.beginLayout(); while (1) { QTextLine line = layout.createLine(); if (!line.isValid()) break; - if (q->widthValid()) { - line.setLineWidth(lineWidth); - line.setPosition(QPointF(0, height)); - height += line.height(); - } + line.setLineWidth(lineWidth); + line.setPosition(QPointF(0, height)); + height += line.height(); } layout.endLayout(); - return QSize(qCeil(layout.boundingRect().width()), layout.boundingRect().height()); + return layout.boundingRect().toAlignedRect().size(); } /*! diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.qml new file mode 100644 index 0000000..1a8af0e --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.qml @@ -0,0 +1,131 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 32 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 48 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 64 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 80 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 96 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 112 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 128 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 144 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 160 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 176 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 192 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 208 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 224 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 240 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 256 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 272 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 288 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 304 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 320 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 336 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 352 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 368 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 384 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 400 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 416 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 432 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 448 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } + Frame { + msec: 464 + hash: "c68e50ef84647962481121e2eb1ba4d4" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext2.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext2.qml new file mode 100644 index 0000000..901025a --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext2.qml @@ -0,0 +1,22 @@ +import QtQuick 1.0 + +Rectangle { + width: 400; height: 200 + + Row { + spacing: 20 + anchors.centerIn: parent + Text { + text: "First line\nSecond line"; wrapMode: Text.Wrap + } + Text { + text: "First line\nSecond line"; width: 70 + } + Text { + text: "First Second\nThird Fourth"; wrapMode: Text.Wrap; width: 50 + } + Text { + text: "First line
Second line"; textFormat: Text.StyledText + } + } +} -- cgit v0.12