diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2012-02-03 13:34:57 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-06 08:28:23 +0100 |
commit | 5260a562a96ddab77ec22693997e2c784e3b6613 (patch) | |
tree | 2fa1ec31715d20dc04b9a9d52c3120a6b227493f | |
parent | 5b9e19ff591f9460adc7a85fa9fe822c05ab3b41 (diff) |
Fix TextEdit vertical alignment.
Don't ignore the position of a QTextDocument when contructing a text
node, and translate the rectangle returned by positionToRectangle by
the y offset.
Task-number: QTBUG-23935
Change-Id: I55a2b69a32a8b623be7e36de54ad083c2f8591e5
Reviewed-by: Martin Jones <martin.jones@nokia.com>
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 2 | ||||
-rw-r--r-- | src/quick/items/qquicktextnode.cpp | 4 | ||||
-rw-r--r-- | tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp | 25 |
3 files changed, 28 insertions, 3 deletions
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index 9d1179efb8..0ebe5de218 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -736,7 +736,7 @@ QRectF QQuickTextEdit::positionToRectangle(int pos) const Q_D(const QQuickTextEdit); QTextCursor c(d->document); c.setPosition(pos); - return d->control->cursorRect(c); + return d->control->cursorRect(c).translated(0, d->yoff); } diff --git a/src/quick/items/qquicktextnode.cpp b/src/quick/items/qquicktextnode.cpp index 6b46a01642..4c5e18f423 100644 --- a/src/quick/items/qquicktextnode.cpp +++ b/src/quick/items/qquicktextnode.cpp @@ -1104,7 +1104,7 @@ void QQuickTextNode::addImage(const QRectF &rect, const QImage &image) node->update(); } -void QQuickTextNode::addTextDocument(const QPointF &, QTextDocument *textDocument, +void QQuickTextNode::addTextDocument(const QPointF &position, QTextDocument *textDocument, const QColor &textColor, QQuickText::TextStyle style, const QColor &styleColor, const QColor &selectionColor, const QColor &selectedTextColor, @@ -1147,7 +1147,7 @@ void QQuickTextNode::addTextDocument(const QPointF &, QTextDocument *textDocumen QVarLengthArray<QTextLayout::FormatRange> colorChanges; mergeFormats(block.layout(), &colorChanges); - QPointF blockPosition = textDocument->documentLayout()->blockBoundingRect(block).topLeft(); + QPointF blockPosition = textDocument->documentLayout()->blockBoundingRect(block).topLeft() + position; if (QTextList *textList = block.textList()) { QPointF pos = blockPosition; QTextLayout *layout = block.layout(); diff --git a/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp index 8bea1170ad..05ebfb80e6 100644 --- a/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp @@ -800,6 +800,31 @@ void tst_qquicktextedit::vAlign() } } + QDeclarativeComponent texteditComponent(&engine); + texteditComponent.setData( + "import QtQuick 2.0\n" + "TextEdit { width: 100; height: 100; text: \"Hello World\" }", QUrl()); + QQuickTextEdit *textEditObject = qobject_cast<QQuickTextEdit*>(texteditComponent.create()); + + QVERIFY(textEditObject != 0); + + QCOMPARE(textEditObject->vAlign(), QQuickTextEdit::AlignTop); + QVERIFY(textEditObject->cursorRectangle().bottom() < 50); + QVERIFY(textEditObject->positionToRectangle(0).bottom() < 50); + + // bottom aligned + textEditObject->setVAlign(QQuickTextEdit::AlignBottom); + QCOMPARE(textEditObject->vAlign(), QQuickTextEdit::AlignBottom); + QVERIFY(textEditObject->cursorRectangle().top() > 50); + QVERIFY(textEditObject->positionToRectangle(0).top() > 50); + + // explicitly center aligned + textEditObject->setVAlign(QQuickTextEdit::AlignVCenter); + QCOMPARE(textEditObject->vAlign(), QQuickTextEdit::AlignVCenter); + QVERIFY(textEditObject->cursorRectangle().top() < 50); + QVERIFY(textEditObject->cursorRectangle().bottom() > 50); + QVERIFY(textEditObject->positionToRectangle(0).top() < 50); + QVERIFY(textEditObject->positionToRectangle(0).bottom() > 50); } void tst_qquicktextedit::font() |