diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2014-03-10 17:25:10 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-10 20:28:52 +0100 |
commit | b7f013bf1919486dab56a4436a17a3878341a1d5 (patch) | |
tree | 98e280b4de823f26915807f1c7939e52a88eb434 /src/gui/text/qtextengine.cpp | |
parent | 4c9885a0f580c8273a211a92b6fc55af1d4f03c0 (diff) |
Fix CJK languages support with HarfBuzz-NG
By some reason, mapping to Han script doesn't work for some (most?)
fonts. Until the issue is really fixed, pretend the HB-old behavior
and simply map to Common script.
Change-Id: I4c146f5ff2a42f64b971b2f5ebd7f65e2513fdf0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/gui/text/qtextengine.cpp')
-rw-r--r-- | src/gui/text/qtextengine.cpp | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 2d7611774b..0298adde7a 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1506,18 +1506,8 @@ void QTextEngine::itemize() const { QVarLengthArray<uchar> scripts(length); QUnicodeTools::initScripts(string, length, scripts.data()); - for (int i = 0; i < length; ++i) { - ushort script = scripts.at(i); - switch (script) { - case QChar::Script_Hiragana: - case QChar::Script_Katakana: - script = QChar::Script_Han; - break; - default: - break; - } - analysis[i].script = script; - } + for (int i = 0; i < length; ++i) + analysis[i].script = scripts.at(i); } const ushort *uc = string; @@ -1564,8 +1554,21 @@ void QTextEngine::itemize() const (analysis-1)->flags = QScriptAnalysis::LineOrParagraphSeparator; // to exclude it from width } #ifdef QT_ENABLE_HARFBUZZ_NG - if (!useHarfbuzzNG) { - analysis = scriptAnalysis.data(); + analysis = scriptAnalysis.data(); + if (useHarfbuzzNG) { + for (int i = 0; i < length; ++i) { + switch (analysis[i].script) { + case QChar::Script_Han: + case QChar::Script_Hiragana: + case QChar::Script_Katakana: + case QChar::Script_Bopomofo: + analysis[i].script = QChar::Script_Common; + break; + default: + break; + } + } + } else { for (int i = 0; i < length; ++i) analysis[i].script = hbscript_to_script(script_to_hbscript(analysis[i].script)); } |