diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2013-09-10 17:17:47 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-13 02:29:01 +0200 |
commit | 02651060b6ce5b16b06721378a239a6d2bd9f528 (patch) | |
tree | 48688cacc0def0cc6ea1bbd73189adb0ef7e9e45 /src | |
parent | 741737b080cb50a99fd6c72be9128ffb41f6c66a (diff) |
Decrease code duplication in QFontDatabase-s
Move scriptRequiresOpenType() body right into QFontEngine::supportsScript(),
thus centralizing use of this performance cheat.
Change-Id: I5f494b086f8f900b631c491f41e9cb800002c0f6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src')
4 files changed, 18 insertions, 37 deletions
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 297bc5129a..810b51b9c4 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -309,6 +309,14 @@ void *QFontEngine::harfbuzzFace() const bool QFontEngine::supportsScript(QChar::Script script) const { + // ### TODO: This only works for scripts that require OpenType. More generally + // for scripts that do not require OpenType we should just look at the list of + // supported writing systems in the font's OS/2 table. + if (!((script >= QChar::Script_Syriac && script <= QChar::Script_Sinhala) + || script == QChar::Script_Khmer || script == QChar::Script_Nko)) { + return true; + } + #ifdef QT_ENABLE_HARFBUZZ_NG if (useHarfbuzzNG) { bool ret = false; diff --git a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp index 9b87418846..400dbbd0c6 100644 --- a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp @@ -91,12 +91,6 @@ typedef struct { quint16 stringOffset; } NAME_RECORD; -static inline bool scriptRequiresOpenType(int script) -{ - return ((script >= QChar::Script_Syriac && script <= QChar::Script_Sinhala) - || script == QChar::Script_Khmer || script == QChar::Script_Nko); -} - void QBasicFontDatabase::populateFontDatabase() { QString fontpath = fontDir(); @@ -137,11 +131,9 @@ QFontEngine *QBasicFontDatabase::fontEngine(const QFontDef &fontDef, QChar::Scri if (engine->invalid()) { delete engine; engine = 0; - } else if (scriptRequiresOpenType(script)) { - if (!engine->supportsScript(script)) { - delete engine; - engine = 0; - } + } else if (!engine->supportsScript(script)) { + delete engine; + engine = 0; } return engine; diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index 3e056af97c..6d497af686 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -69,12 +69,6 @@ static inline bool requiresOpenType(int writingSystem) || writingSystem == QFontDatabase::Khmer || writingSystem == QFontDatabase::Nko); } -static inline bool scriptRequiresOpenType(int script) -{ - return ((script >= QChar::Script_Syriac && script <= QChar::Script_Sinhala) - || script == QChar::Script_Khmer || script == QChar::Script_Nko); -} - static int getFCWeight(int fc_weight) { int qtweight = QFont::Black; @@ -602,11 +596,9 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QChar::Script sc if (engine->invalid()) { delete engine; engine = 0; - } else if (scriptRequiresOpenType(script)) { - if (!engine->supportsScript(script)) { - delete engine; - engine = 0; - } + } else if (!engine->supportsScript(script)) { + delete engine; + engine = 0; } return engine; diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp index 22be4418a9..60711d36f6 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp @@ -1407,12 +1407,6 @@ HFONT QWindowsFontDatabase::systemFont() // Creation functions -static inline bool scriptRequiresOpenType(int script) -{ - return ((script >= QChar::Script_Syriac && script <= QChar::Script_Sinhala) - || script == QChar::Script_Khmer || script == QChar::Script_Nko); -} - static const char *other_tryFonts[] = { "Arial", "MS UI Gothic", @@ -1763,15 +1757,10 @@ QFontEngine *QWindowsFontDatabase::createEngine(int script, const QFontDef &requ few->glyphFormat = QFontEngineGlyphCache::Raster_RGBMask; // Also check for OpenType tables when using complex scripts - // ### TODO: This only works for scripts that require OpenType. More generally - // for scripts that do not require OpenType we should just look at the list of - // supported writing systems in the font's OS/2 table. - if (scriptRequiresOpenType(script)) { - if (!few->supportsScript(QChar::Script(script))) { - qWarning(" OpenType support missing for script\n"); - delete few; - return 0; - } + if (!few->supportsScript(QChar::Script(script))) { + qWarning(" OpenType support missing for script\n"); + delete few; + return 0; } few->initFontInfo(request, fontHdc, dpi); |