diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2013-12-17 09:49:40 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-12-19 05:49:20 +0100 |
commit | 4b2c73b4767bcb512cbc17f65186eac5d004db07 (patch) | |
tree | 9b68e2cb817a0054cefc6475c40b7875f5ef80c6 /src/gui/text/qplatformfontdatabase.cpp | |
parent | dbf3c559daba62d9411eb31a3204487397d41d44 (diff) |
Fix writingSystems determination by code page range bits
Do exactly what windows font database does to determine
writingSystems in case of non-truetype fonts.
Task-number: QTBUG-13585
Change-Id: I4a1a48d74c36e403c31f20847cf80295d89a34bc
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/gui/text/qplatformfontdatabase.cpp')
-rw-r--r-- | src/gui/text/qplatformfontdatabase.cpp | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/gui/text/qplatformfontdatabase.cpp b/src/gui/text/qplatformfontdatabase.cpp index 7076fba41b..37610a9099 100644 --- a/src/gui/text/qplatformfontdatabase.cpp +++ b/src/gui/text/qplatformfontdatabase.cpp @@ -459,10 +459,20 @@ static const ushort requiredUnicodeBits[QFontDatabase::WritingSystemsCount][2] = }; enum { + Latin1CsbBit = 0, + CentralEuropeCsbBit = 1, + TurkishCsbBit = 4, + BalticCsbBit = 7, + CyrillicCsbBit = 2, + GreekCsbBit = 3, + HebrewCsbBit = 5, + ArabicCsbBit = 6, + VietnameseCsbBit = 8, SimplifiedChineseCsbBit = 18, TraditionalChineseCsbBit = 20, JapaneseCsbBit = 17, - KoreanCsbBit = 21 + KoreanCsbBit = 19, + KoreanJohabCsbBit = 21 }; /*! @@ -492,6 +502,36 @@ QSupportedWritingSystems QPlatformFontDatabase::writingSystemsFromTrueTypeBits(q } } } + if (codePageRange[0] & ((1 << Latin1CsbBit) | (1 << CentralEuropeCsbBit) | (1 << TurkishCsbBit) | (1 << BalticCsbBit))) { + writingSystems.setSupported(QFontDatabase::Latin); + hasScript = true; + //qDebug("font %s supports Latin", familyName.latin1()); + } + if (codePageRange[0] & (1 << CyrillicCsbBit)) { + writingSystems.setSupported(QFontDatabase::Cyrillic); + hasScript = true; + //qDebug("font %s supports Cyrillic", familyName.latin1()); + } + if (codePageRange[0] & (1 << GreekCsbBit)) { + writingSystems.setSupported(QFontDatabase::Greek); + hasScript = true; + //qDebug("font %s supports Greek", familyName.latin1()); + } + if (codePageRange[0] & (1 << HebrewCsbBit)) { + writingSystems.setSupported(QFontDatabase::Hebrew); + hasScript = true; + //qDebug("font %s supports Hebrew", familyName.latin1()); + } + if (codePageRange[0] & (1 << ArabicCsbBit)) { + writingSystems.setSupported(QFontDatabase::Arabic); + hasScript = true; + //qDebug("font %s supports Arabic", familyName.latin1()); + } + if (codePageRange[0] & (1 << VietnameseCsbBit)) { + writingSystems.setSupported(QFontDatabase::Vietnamese); + hasScript = true; + //qDebug("font %s supports Vietnamese", familyName.latin1()); + } if (codePageRange[0] & (1 << SimplifiedChineseCsbBit)) { writingSystems.setSupported(QFontDatabase::SimplifiedChinese); hasScript = true; @@ -507,7 +547,7 @@ QSupportedWritingSystems QPlatformFontDatabase::writingSystemsFromTrueTypeBits(q hasScript = true; //qDebug("font %s supports Japanese", familyName.latin1()); } - if (codePageRange[0] & (1 << KoreanCsbBit)) { + if (codePageRange[0] & ((1 << KoreanCsbBit) | (1 << KoreanJohabCsbBit))) { writingSystems.setSupported(QFontDatabase::Korean); hasScript = true; //qDebug("font %s supports Korean", familyName.latin1()); |