summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2020-03-18 05:36:49 +0300
committerKonstantin Ritt <ritt.ks@gmail.com>2020-03-24 02:00:22 +0300
commit7c3700c070822674ffc61b080e43fbe956cf439b (patch)
tree82f4151d3de1b713488e675ca5f358500667f326
parent1ab2e4baefaeca28b667415f7609649c2f826a17 (diff)
Darwin: get rid of Harfbuzz/CoreText specific code
once CoreText shaper in Harfbuzz has been disabled, we do not need the hack-ish enablers to support it Follows-up 21c242f9fd27523d0016b821d0a962231c4bafa6 Change-Id: I40d598b2c9b57ca7953716a56e4e119b2fc06a9b Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--src/gui/text/qtextengine.cpp60
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm5
2 files changed, 7 insertions, 58 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index fa0352514b..81fc9db9c7 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1642,20 +1642,6 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si,
hb_buffer_clear_contents(buffer);
hb_buffer_add_utf16(buffer, reinterpret_cast<const uint16_t *>(string) + item_pos, item_length, 0, item_length);
-#if defined(Q_OS_DARWIN)
- // ### temporary workaround for QTBUG-38113
- // CoreText throws away the PDF token, while the OpenType backend will replace it with
- // a zero-advance glyph. This becomes a real issue when PDF is the last character,
- // since it gets treated like if it were a grapheme extender, so we
- // temporarily replace it with some visible grapheme starter.
- bool endsWithPDF = actualFontEngine->type() == QFontEngine::Mac && string[item_pos + item_length - 1] == 0x202c;
- if (Q_UNLIKELY(endsWithPDF)) {
- uint num_glyphs;
- hb_glyph_info_t *infos = hb_buffer_get_glyph_infos(buffer, &num_glyphs);
- infos[num_glyphs - 1].codepoint = '.';
- }
-#endif
-
hb_buffer_set_segment_properties(buffer, &props);
uint buffer_flags = HB_BUFFER_FLAG_DEFAULT;
@@ -1686,21 +1672,13 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si,
{ HB_TAG('h','l','i','g'), !dontLigate, 0, uint(-1) } };
const int num_features = dontLigate ? 5 : 1;
- const char *const *shaper_list = nullptr;
-#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",
- nullptr
- };
- shaper_list = s_shaper_list_without_coretext;
- }
-#endif
+ // whitelist cross-platforms shapers only
+ static const char *shaper_list[] = {
+ "graphite2",
+ "ot",
+ "fallback",
+ nullptr
+ };
bool shapedOk = hb_shape_full(hb_font, buffer, features, num_features, shaper_list);
if (Q_UNLIKELY(!shapedOk)) {
@@ -1752,35 +1730,11 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si,
while (str_pos < item_length)
log_clusters[str_pos++] = last_glyph_pos;
-#if defined(Q_OS_DARWIN)
- if (Q_UNLIKELY(endsWithPDF)) {
- int last_glyph_idx = num_glyphs - 1;
- g.glyphs[last_glyph_idx] = 0xffff;
- g.advances[last_glyph_idx] = QFixed();
- g.offsets[last_glyph_idx].x = QFixed();
- g.offsets[last_glyph_idx].y = QFixed();
- g.attributes[last_glyph_idx].clusterStart = true;
- g.attributes[last_glyph_idx].dontPrint = true;
-
- log_clusters[item_length - 1] = glyphs_shaped + last_glyph_idx;
- }
-#endif
-
if (Q_UNLIKELY(engineIdx != 0)) {
for (quint32 i = 0; i < num_glyphs; ++i)
g.glyphs[i] |= (engineIdx << 24);
}
-#ifdef Q_OS_DARWIN
- if (actualFontEngine->type() == QFontEngine::Mac) {
- if (actualFontEngine->fontDef.stretch != 100 && actualFontEngine->fontDef.stretch != QFont::AnyStretch) {
- QFixed stretch = QFixed(int(actualFontEngine->fontDef.stretch)) / QFixed(100);
- for (uint i = 0; i < num_glyphs; ++i)
- g.advances[i] *= stretch;
- }
- }
-#endif
-
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
if (!actualFontEngine->supportsSubPixelPositions() || (actualFontEngine->fontDef.styleStrategy & QFont::ForceIntegerMetrics)) {
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
index 115b13d60d..2437051274 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
@@ -282,11 +282,6 @@ void QCoreTextFontEngine::init()
cache_cost = (CTFontGetAscent(ctfont) + CTFontGetDescent(ctfont)) * avgCharWidth.toInt() * 2000;
- // HACK hb_coretext requires both CTFont and CGFont but user_data is only void*
- Q_ASSERT((void *)(&ctfont + 1) == (void *)&cgFont);
- faceData.user_data = &ctfont;
- faceData.get_font_table = ct_getSfntTable;
-
kerningPairsLoaded = false;
}