From f7fc7e1a7f36485642c5c44af31a67986f006cf8 Mon Sep 17 00:00:00 2001
From: Michael Brasser <michael.brasser@live.com>
Date: Wed, 6 Nov 2013 22:05:52 -0600
Subject: [PATCH] Ensure correct horizontal alignment when onLineLaidOut is
 used.

Task-number: QTBUG-34647
Change-Id: I07cb1f6f433d64c8889750a1fef06cd3b3bcc9e5
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
---
 src/quick/items/qquicktext.cpp                |  5 +++--
 .../qquicktext/data/lineLayoutHAlign.qml      | 20 +++++++++++++++++++
 .../auto/quick/qquicktext/tst_qquicktext.cpp  | 18 +++++++++++++++++
 3 files changed, 41 insertions(+), 2 deletions(-)
 create mode 100644 tests/auto/quick/qquicktext/data/lineLayoutHAlign.qml

diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index d62bf8efa1..bde9637ea0 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -669,8 +669,9 @@ void QQuickTextPrivate::setupCustomLineGeometry(QTextLine &line, qreal &height,
     textLine->setHeight(0);
     textLine->setLineOffset(lineOffset);
 
-    // use the text item's width by default if it has one and wrap is on
-    if (q->widthValid() && q->wrapMode() != QQuickText::NoWrap)
+    // use the text item's width by default if it has one and wrap is on or text must be aligned
+    if (q->widthValid() && (q->wrapMode() != QQuickText::NoWrap ||
+                            q->effectiveHAlign() != QQuickText::AlignLeft))
         textLine->setWidth(q->width());
     else
         textLine->setWidth(INT_MAX);
diff --git a/tests/auto/quick/qquicktext/data/lineLayoutHAlign.qml b/tests/auto/quick/qquicktext/data/lineLayoutHAlign.qml
new file mode 100644
index 0000000000..6349f7a644
--- /dev/null
+++ b/tests/auto/quick/qquicktext/data/lineLayoutHAlign.qml
@@ -0,0 +1,20 @@
+import QtQuick 2.0
+
+Item {
+    id: main
+    width: 200; height: 200
+
+    Text {
+        id: myText
+        objectName: "myText"
+        width: parent.width
+        font.family: "__Qt__Box__Engine__"
+        font.pixelSize: 14
+        horizontalAlignment: Text.AlignHCenter
+        text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+
+        onLineLaidOut: {
+            // do nothing
+        }
+    }
+}
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
index 78e03be9c2..dfbd190a65 100644
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
@@ -126,6 +126,7 @@ private slots:
     void clipRect();
     void lineLaidOut();
     void lineLaidOutRelayout();
+    void lineLaidOutHAlign();
 
     void imgTagsBaseUrl_data();
     void imgTagsBaseUrl();
@@ -2630,6 +2631,23 @@ void tst_qquicktext::lineLaidOutRelayout()
     delete window;
 }
 
+void tst_qquicktext::lineLaidOutHAlign()
+{
+    QQuickView *window = createView(testFile("lineLayoutHAlign.qml"));
+
+    QQuickText *myText = window->rootObject()->findChild<QQuickText*>("myText");
+    QVERIFY(myText != 0);
+
+    QQuickTextPrivate *textPrivate = QQuickTextPrivate::get(myText);
+    QVERIFY(textPrivate != 0);
+
+    QCOMPARE(textPrivate->layout.lineCount(), 1);
+
+    QVERIFY(textPrivate->layout.lineAt(0).naturalTextRect().x() < 0.0);
+
+    delete window;
+}
+
 void tst_qquicktext::imgTagsBaseUrl_data()
 {
     QTest::addColumn<QUrl>("src");
-- 
GitLab