summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/text/qtextengine.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index 67dedca760..a3059008be 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1298,8 +1298,12 @@ int QTextEngine::shapeTextWithHarfbuzz(const QScriptItem &si, const ushort *stri
attrs.justification = hbAttrs.justification;
}
- for (quint32 i = 0; i < shaper_item.item.length; ++i)
+ for (quint32 i = 0; i < shaper_item.item.length; ++i) {
+ // Workaround wrong log_clusters for surrogates (i.e. QTBUG-39875)
+ if (shaper_item.log_clusters[i] >= shaper_item.num_glyphs)
+ shaper_item.log_clusters[i] = shaper_item.num_glyphs - 1;
shaper_item.log_clusters[i] += glyph_pos;
+ }
if (kerningEnabled && !shaper_item.kerning_applied)
actualFontEngine->doKerning(&g, option.useDesignMetrics() ? QFontEngine::DesignMetrics : QFontEngine::ShaperFlags(0));