Fix justification of RTL text
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Wed, 24 Aug 2011 07:13:45 +0000 (09:13 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 25 Aug 2011 13:00:31 +0000 (15:00 +0200)
Since the trailing space is included in the QScriptLine, it may affect
the positions of preceding script items when the text is RTL. The best
solution for this would be to disregard the trailing space in the layout
process, or somehow make it have an advance of 0 so it doesn't affect
the layout. However, to minimize the impact of the change, and to be
consistent with previous work arounds such as
bf992df6434fc37715f728ca09601c5567dd83c9, we simply include the trailing
(visually leading) space in the justification pass for now.

Task-number: QTBUG-20920
Reviewed-by: Lars
(cherry picked from commit 1a8a36eb6b6df9e2550b5eaa4606f2d411fd4294)

Change-Id: I94972ebaea2e1bdb09950523c43844351b304abe
Reviewed-on: http://codereview.qt.nokia.com/3462
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
src/gui/text/qtextengine.cpp

index f7b7aa2..53cd2ba 100644 (file)
@@ -2093,7 +2093,8 @@ void QTextEngine::justify(const QScriptLine &line)
         }
     }
 
-    QFixed need = line.width - line.textWidth;
+    QFixed leading = leadingSpaceWidth(line);
+    QFixed need = line.width - line.textWidth - leading;
     if (need < 0) {
         // line overflows already!
         const_cast<QScriptLine &>(line).justified = true;