aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-02-03 13:34:57 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-06 08:28:23 +0100
commit5260a562a96ddab77ec22693997e2c784e3b6613 (patch)
tree2fa1ec31715d20dc04b9a9d52c3120a6b227493f
parent5b9e19ff591f9460adc7a85fa9fe822c05ab3b41 (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.cpp2
-rw-r--r--src/quick/items/qquicktextnode.cpp4
-rw-r--r--tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp25
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()