From 2ae3d17883c0b24f7f4a5a1ea763105a2c8a7342 Mon Sep 17 00:00:00 2001 From: Lars Knoll <lars.knoll@nokia.com> Date: Sat, 5 Jun 2010 22:12:56 +0200 Subject: correctly initialize the bidi level in the text engine If the text options doesn't specify the layout direction, determine it from the content. Reviewed-by: Simon Hausmann --- src/gui/text/qtextengine.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 3486264..191508c 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1404,7 +1404,20 @@ void QTextEngine::itemize() const #else bool ignore = ignoreBidi; #endif - if (!ignore && option.textDirection() == Qt::LeftToRight) { + + bool rtl = false; + switch (option.textDirection()) { + case Qt::LeftToRight: + break; + case Qt::RightToLeft: + rtl = true; + break; + case Qt::LayoutDirectionAuto: + rtl = layoutData->string.isRightToLeft(); + break; + } + + if (!ignore && !rtl) { ignore = true; const QChar *start = layoutData->string.unicode(); const QChar * const end = start + length; @@ -1420,7 +1433,7 @@ void QTextEngine::itemize() const QVarLengthArray<QScriptAnalysis, 4096> scriptAnalysis(length); QScriptAnalysis *analysis = scriptAnalysis.data(); - QBidiControl control(option.textDirection() == Qt::RightToLeft); + QBidiControl control(rtl); if (ignore) { memset(analysis, 0, length*sizeof(QScriptAnalysis)); -- cgit v0.12