summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qtextengine.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2018-08-22 10:35:12 +0200
committerLiang Qi <liang.qi@qt.io>2018-08-22 10:35:12 +0200
commit7533156b689c63fa26d66b3e6bacc598cb58456c (patch)
tree99a535c86e26284e807cd70e9af9a616b79bceaa /src/gui/text/qtextengine.cpp
parent07eda676e45f6c3c7237581c3f4a9e39695697ab (diff)
parent76c328b2b39617310993ce76e65665943b8c111c (diff)
Merge remote-tracking branch 'origin/5.11' into 5.12
Conflicts: src/gui/text/qtextengine.cpp tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.cpp tests/auto/corelib/itemmodels/qsortfilterproxymodel_common/tst_qsortfilterproxymodel.h Change-Id: Ib9f968edbb0f3387c89bc25e914321d0738bfadc
Diffstat (limited to 'src/gui/text/qtextengine.cpp')
-rw-r--r--src/gui/text/qtextengine.cpp29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index 6826f62b61..4e9b00f9c9 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1043,19 +1043,31 @@ struct QBidiAlgorithm {
}
}
- bool process()
+ bool checkForBidi() const
{
- memset(analysis, 0, length * sizeof(QScriptAnalysis));
-
- bool hasBidi = (baseLevel != 0);
- if (!hasBidi) {
- for (int i = 0; i < length; ++i) {
- if (text[i].unicode() >= 0x590) {
- hasBidi = true;
+ if (baseLevel != 0)
+ return true;
+ for (int i = 0; i < length; ++i) {
+ if (text[i].unicode() >= 0x590) {
+ switch (text[i].direction()) {
+ case QChar::DirR: case QChar::DirAN:
+ case QChar::DirLRE: case QChar::DirLRO: case QChar::DirAL:
+ case QChar::DirRLE: case QChar::DirRLO: case QChar::DirPDF:
+ case QChar::DirLRI: case QChar::DirRLI: case QChar::DirFSI: case QChar::DirPDI:
+ return true;
+ default:
break;
}
}
}
+ return false;
+ }
+
+ bool process()
+ {
+ memset(analysis, 0, length * sizeof(QScriptAnalysis));
+
+ bool hasBidi = checkForBidi();
if (!hasBidi)
return false;
@@ -2071,7 +2083,6 @@ void QTextEngine::itemize() const
case QChar::Nbsp:
if (option.flags() & QTextOption::ShowTabsAndSpaces) {
analysis->flags = (*uc == QChar::Space) ? QScriptAnalysis::Space : QScriptAnalysis::Nbsp;
- analysis->bidiLevel = bidi.baseLevel;
break;
}
Q_FALLTHROUGH();