From c63e7f576609e90e7cb6d1b4c107182ae8c2d6c6 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Sat, 2 Mar 2013 22:29:48 +0200 Subject: Fix selection of fonts that require OpenType features HB_Face's supported_scripts[] expects HB_Script, so QChar::Script should be remapped via script_to_hbscript(). Change-Id: Ib068c35ab76567fe9a61da7d8ab01133a6f58bc0 Reviewed-by: Lars Knoll --- src/gui/text/qfontengine.cpp | 5 +++++ src/gui/text/qfontengine_p.h | 1 + src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp | 3 +-- src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp | 3 +-- src/plugins/platforms/windows/qwindowsfontdatabase.cpp | 3 +-- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 1a7f2b7b4d..2d09cf9f78 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -236,6 +236,11 @@ HB_Face QFontEngine::initializedHarfbuzzFace() const return face; } +bool QFontEngine::supportsScript(QChar::Script script) const +{ + return initializedHarfbuzzFace()->supported_scripts[script_to_hbscript(script)]; +} + glyph_metrics_t QFontEngine::boundingBox(glyph_t glyph, const QTransform &matrix) { glyph_metrics_t metrics = boundingBox(glyph); diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index a373c3d5f1..7ce920b6af 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -255,6 +255,7 @@ public: HB_Font harfbuzzFont() const; HB_Face harfbuzzFace() const; HB_Face initializedHarfbuzzFace() const; + bool supportsScript(QChar::Script script) const; virtual HB_Error getPointInOutline(HB_Glyph glyph, int flags, hb_uint32 point, HB_Fixed *xpos, HB_Fixed *ypos, hb_uint32 *nPoints); diff --git a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp index e65a5f5aec..f17eff4dd7 100644 --- a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp @@ -262,8 +262,7 @@ QFontEngine *QBasicFontDatabase::fontEngine(const QFontDef &fontDef, QChar::Scri delete engine; engine = 0; } else if (scriptRequiresOpenType(script)) { - HB_Face hbFace = engine->initializedHarfbuzzFace(); - if (!hbFace || !hbFace->supported_scripts[script]) { + if (!engine->supportsScript(script)) { delete engine; engine = 0; } diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index 728d11500a..329268395e 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -638,8 +638,7 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QChar::Script sc delete engine; engine = 0; } else if (scriptRequiresOpenType(script)) { - HB_Face hbFace = engine->initializedHarfbuzzFace(); - if (!hbFace || !hbFace->supported_scripts[script]) { + if (!engine->supportsScript(script)) { delete engine; engine = 0; } diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp index c1c906523f..6fdb10288a 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp @@ -1883,8 +1883,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(int script, const QFontDef &requ // 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)) { - HB_Face hbFace = few->harfbuzzFace(); - if (!hbFace || !hbFace->supported_scripts[script]) { + if (!few->supportsScript(QChar::Script(script))) { qWarning(" OpenType support missing for script\n"); delete few; return 0; -- cgit v1.2.3