diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2013-03-02 22:29:48 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-04 14:54:57 +0100 |
commit | c63e7f576609e90e7cb6d1b4c107182ae8c2d6c6 (patch) | |
tree | ffe18bf8f58b5a3ae2d26c219375b98af0d3e42f | |
parent | ccdec0b7a6361fac2c38e82d25e4718dd61e4a71 (diff) |
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 <lars.knoll@digia.com>
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; |