diff options
Diffstat (limited to 'src/gui/text/qtextengine.cpp')
-rw-r--r-- | src/gui/text/qtextengine.cpp | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 6b98c14205..530871f65b 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1120,15 +1120,6 @@ QT_BEGIN_INCLUDE_NAMESPACE QT_END_INCLUDE_NAMESPACE -#if defined(Q_OS_OSX) && !defined(QT_NO_FREETYPE) -static const char *s_shapersForOsxFreeType[] = -{ - "ot", - "fallback", - Q_NULLPTR -}; -#endif - int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si, const ushort *string, int itemLength, QFontEngine *fontEngine, const QVector<uint> &itemBoundaries, bool kerningEnabled) const { uint glyphs_shaped = 0; @@ -1182,13 +1173,21 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si, const ushort *st const int num_features = 1; const char *const *shaper_list = Q_NULLPTR; -#if defined(Q_OS_OSX) && !defined(QT_NO_FREETYPE) - // What's behind QFontEngine::FaceData::user_data isn't compatible between CoreText and - // FreeType font engines - specifically functions in hb-coretext.cc would run into undefined - // behavior with data from the FreeType engine. The OpenType shaper works with that engine. - if (actualFontEngine->type() == QFontEngine::Freetype) - shaper_list = s_shapersForOsxFreeType; +#if defined(Q_OS_DARWIN) + // What's behind QFontEngine::FaceData::user_data isn't compatible between different font engines + // - specifically functions in hb-coretext.cc would run into undefined behavior with data + // from non-CoreText engine. The other shapers works with that engine just fine. + if (actualFontEngine->type() != QFontEngine::Mac) { + static const char *s_shaper_list_without_coretext[] = { + "graphite2", + "ot", + "fallback", + Q_NULLPTR + }; + shaper_list = s_shaper_list_without_coretext; + } #endif + bool shapedOk = hb_shape_full(hb_font, buffer, features, num_features, shaper_list); if (Q_UNLIKELY(!shapedOk)) { hb_buffer_destroy(buffer); |