From 02651060b6ce5b16b06721378a239a6d2bd9f528 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Tue, 10 Sep 2013 17:17:47 +0300 Subject: 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 --- src/gui/text/qfontengine.cpp | 8 ++++++++ .../fontdatabases/basic/qbasicfontdatabase.cpp | 14 +++----------- .../fontdatabases/fontconfig/qfontconfigdatabase.cpp | 14 +++----------- .../platforms/windows/qwindowsfontdatabase.cpp | 19 ++++--------------- 4 files changed, 18 insertions(+), 37 deletions(-) (limited to 'src') 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); -- cgit v1.2.3