summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qtextengine.cpp
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2014-03-10 17:25:10 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-10 20:28:52 +0100
commitb7f013bf1919486dab56a4436a17a3878341a1d5 (patch)
tree98e280b4de823f26915807f1c7939e52a88eb434 /src/gui/text/qtextengine.cpp
parent4c9885a0f580c8273a211a92b6fc55af1d4f03c0 (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.cpp31
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));
}