aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-07-10 11:30:53 +1000
committerQt by Nokia <qt-info@nokia.com>2012-07-16 02:30:52 +0200
commit6e5944df6349c080b4e4550e2fd085cfc34cf207 (patch)
treee24a33d2554bf485ebfac34ce83aa83cca455598 /tests/auto
parent80dd824864df17bb1293a4438325f2b20306861b (diff)
Fix horizontal alignment of unwrapped text in TextEdit.
When the actual width of the text in a QTextDocument exceeds the specificed textWidth it is aligned left irregardless of the text alignment. Compensate by doing our own alignment of the laid out document. Change-Id: I7df900316ffb3ecdf01ddb053480a60a8258182d Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/quick/qquicktextedit/data/mouseselection_align_bl.qml14
-rw-r--r--tests/auto/quick/qquicktextedit/data/mouseselection_align_center.qml14
-rw-r--r--tests/auto/quick/qquicktextedit/data/mouseselection_align_tr.qml14
-rw-r--r--tests/auto/quick/qquicktextedit/data/positionAt.qml1
-rw-r--r--tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp67
5 files changed, 105 insertions, 5 deletions
diff --git a/tests/auto/quick/qquicktextedit/data/mouseselection_align_bl.qml b/tests/auto/quick/qquicktextedit/data/mouseselection_align_bl.qml
new file mode 100644
index 0000000000..4387cbcfc6
--- /dev/null
+++ b/tests/auto/quick/qquicktextedit/data/mouseselection_align_bl.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.0
+
+TextEdit {
+ focus: true
+ text:
+"0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ
+9876543210
+
+ZXYWVUTSRQPON MLKJIHGFEDCBA"
+ width: implicitWidth - 10
+ selectByMouse: true
+ horizontalAlignment: TextEdit.AlignLeft
+ verticalAlignment: TextEdit.AlignBottom
+}
diff --git a/tests/auto/quick/qquicktextedit/data/mouseselection_align_center.qml b/tests/auto/quick/qquicktextedit/data/mouseselection_align_center.qml
new file mode 100644
index 0000000000..e8ee14cdf0
--- /dev/null
+++ b/tests/auto/quick/qquicktextedit/data/mouseselection_align_center.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.0
+
+TextEdit {
+ focus: true
+ text:
+"0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ
+9876543210
+
+ZXYWVUTSRQPON MLKJIHGFEDCBA"
+ width: implicitWidth - 10
+ selectByMouse: true
+ horizontalAlignment: TextEdit.AlignHCenter
+ verticalAlignment: TextEdit.AlignVCenter
+}
diff --git a/tests/auto/quick/qquicktextedit/data/mouseselection_align_tr.qml b/tests/auto/quick/qquicktextedit/data/mouseselection_align_tr.qml
new file mode 100644
index 0000000000..a69bd8d9b9
--- /dev/null
+++ b/tests/auto/quick/qquicktextedit/data/mouseselection_align_tr.qml
@@ -0,0 +1,14 @@
+import QtQuick 2.0
+
+TextEdit {
+ focus: true
+ text:
+"0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ
+9876543210
+
+ZXYWVUTSRQPON MLKJIHGFEDCBA"
+ width: implicitWidth - 10
+ selectByMouse: true
+ horizontalAlignment: TextEdit.AlignRight
+ verticalAlignment: TextEdit.AlignTop
+}
diff --git a/tests/auto/quick/qquicktextedit/data/positionAt.qml b/tests/auto/quick/qquicktextedit/data/positionAt.qml
index 19093281fe..af0950c9ba 100644
--- a/tests/auto/quick/qquicktextedit/data/positionAt.qml
+++ b/tests/auto/quick/qquicktextedit/data/positionAt.qml
@@ -5,5 +5,6 @@ TextEdit {
objectName: "myInput"
width: 50
height: 25
+ font.pixelSize: 12
text: "This is\n a long piece of text"
}
diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
index 562f24edd6..ffff922e52 100644
--- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
+++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp
@@ -134,6 +134,7 @@ private slots:
void dragMouseSelection();
void inputMethodHints();
+ void positionAt_data();
void positionAt();
void linkActivated();
@@ -217,6 +218,8 @@ Q_DECLARE_METATYPE(IntList)
typedef QList<Key> KeyList;
Q_DECLARE_METATYPE(KeyList)
+Q_DECLARE_METATYPE(QQuickTextEdit::HAlignment)
+Q_DECLARE_METATYPE(QQuickTextEdit::VAlignment)
Q_DECLARE_METATYPE(QQuickTextEdit::TextFormat)
void tst_qquicktextedit::simulateKeys(QWindow *window, const QList<Key> &keys)
@@ -1789,6 +1792,10 @@ void tst_qquicktextedit::mouseSelection_data()
QTest::newRow("on triple click (40,50)") << testFile("mouseselection_true.qml") << 40 << 50 << "9876543210\n\nZXYWVUTSRQPON MLKJIHGFEDCBA" << true << true << 3;
QTest::newRow("on triple click (50,25)") << testFile("mouseselection_true.qml") << 50 << 25 << "0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ\n9876543210\n\nZXYWVUTSRQPON MLKJIHGFEDCBA" << true << true << 3;
QTest::newRow("on triple click (50,40)") << testFile("mouseselection_true.qml") << 50 << 40 << "9876543210\n\nZXYWVUTSRQPON MLKJIHGFEDCBA" << true << true << 3;
+
+ QTest::newRow("on tr align") << testFile("mouseselection_align_tr.qml") << 4 << 9 << "45678" << true << true << 1;
+ QTest::newRow("on center align") << testFile("mouseselection_align_center.qml") << 4 << 9 << "45678" << true << true << 1;
+ QTest::newRow("on bl align") << testFile("mouseselection_align_bl.qml") << 4 << 9 << "45678" << true << true << 1;
}
void tst_qquicktextedit::mouseSelection()
@@ -1943,8 +1950,26 @@ void tst_qquicktextedit::inputMethodHints()
QCOMPARE(plainTextEdit.inputMethodHints(), Qt::ImhNone);
}
+void tst_qquicktextedit::positionAt_data()
+{
+ QTest::addColumn<QQuickTextEdit::HAlignment>("horizontalAlignment");
+ QTest::addColumn<QQuickTextEdit::VAlignment>("verticalAlignment");
+
+ QTest::newRow("top-left") << QQuickTextEdit::AlignLeft << QQuickTextEdit::AlignTop;
+ QTest::newRow("bottom-left") << QQuickTextEdit::AlignLeft << QQuickTextEdit::AlignBottom;
+ QTest::newRow("center-left") << QQuickTextEdit::AlignLeft << QQuickTextEdit::AlignVCenter;
+
+ QTest::newRow("top-right") << QQuickTextEdit::AlignRight << QQuickTextEdit::AlignTop;
+ QTest::newRow("top-center") << QQuickTextEdit::AlignHCenter << QQuickTextEdit::AlignTop;
+
+ QTest::newRow("center") << QQuickTextEdit::AlignHCenter << QQuickTextEdit::AlignVCenter;
+}
+
void tst_qquicktextedit::positionAt()
{
+ QFETCH(QQuickTextEdit::HAlignment, horizontalAlignment);
+ QFETCH(QQuickTextEdit::VAlignment, verticalAlignment);
+
QQuickView canvas(testFileUrl("positionAt.qml"));
QVERIFY(canvas.rootObject() != 0);
canvas.show();
@@ -1953,8 +1978,10 @@ void tst_qquicktextedit::positionAt()
QQuickTextEdit *texteditObject = qobject_cast<QQuickTextEdit *>(canvas.rootObject());
QVERIFY(texteditObject != 0);
+ texteditObject->setHAlign(horizontalAlignment);
+ texteditObject->setVAlign(verticalAlignment);
- QTextLayout layout(texteditObject->text());
+ QTextLayout layout(texteditObject->text().replace(QLatin1Char('\n'), QChar::LineSeparator));
layout.setFont(texteditObject->font());
if (!qmlDisableDistanceField()) {
@@ -1965,15 +1992,45 @@ void tst_qquicktextedit::positionAt()
layout.beginLayout();
QTextLine line = layout.createLine();
+ line.setLineWidth(texteditObject->width());
+ QTextLine secondLine = layout.createLine();
+ secondLine.setLineWidth(texteditObject->width());
layout.endLayout();
- const int y0 = line.height() / 2;
- const int y1 = line.height() * 3 / 2;
+ qreal y0;
+ qreal y1;
+
+ switch (verticalAlignment) {
+ case QQuickTextEdit::AlignTop:
+ y0 = line.height() / 2;
+ y1 = line.height() * 3 / 2;
+ break;
+ case QQuickTextEdit::AlignVCenter:
+ y0 = (texteditObject->height() - line.height()) / 2;
+ y1 = (texteditObject->height() + line.height()) / 2;
+ break;
+ case QQuickTextEdit::AlignBottom:
+ y0 = texteditObject->height() - line.height() * 3 / 2;
+ y1 = texteditObject->height() - line.height() / 2;
+ break;
+ }
+ qreal xoff;
+ switch (horizontalAlignment) {
+ case QQuickTextEdit::AlignLeft:
+ xoff = 0;
+ break;
+ case QQuickTextEdit::AlignHCenter:
+ xoff = (texteditObject->width() - secondLine.naturalTextWidth()) / 2;
+ break;
+ case QQuickTextEdit::AlignRight:
+ xoff = texteditObject->width() - secondLine.naturalTextWidth();
+ break;
+ }
int pos = texteditObject->positionAt(texteditObject->width()/2, y0);
- int widthBegin = floor(line.cursorToX(pos - 1));
- int widthEnd = ceil(line.cursorToX(pos + 1));
+ int widthBegin = floor(xoff + line.cursorToX(pos - 1));
+ int widthEnd = ceil(xoff + line.cursorToX(pos + 1));
QVERIFY(widthBegin <= texteditObject->width() / 2);
QVERIFY(widthEnd >= texteditObject->width() / 2);