Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd0a9129 authored by Raph Levien's avatar Raph Levien
Browse files

Fix bug 8717690 Full-width Latin Letters Garbled on Tumblr App

For fullwidth latin (or, more generally, a font considered as a complex
script, but not supported by the font specified), and for a font other
than a system default font, we were getting a mismatch in baseGlyphCount
between the shaping and painting fonts.

This patch preserves the original typeface in this case. In that sense,
it is a slightly more general fix for bug 8127795.

Change-Id: Ibdbfdb34eb7dc39cc8f0784a67c93c9af4ce6ab2
parent 339ac854
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -826,27 +826,26 @@ size_t TextLayoutShaper::shapeFontRun(const SkPaint* paint) {
        baseGlyphCount = paint->getBaseGlyphCount(firstUnichar);
    }

    SkTypeface* scriptTypeface = NULL;
    if (baseGlyphCount != 0) {
        SkTypeface::Style style = SkTypeface::kNormal;
        if (typeface != NULL) {
            style = typeface->style();
        }
        typeface = typefaceForScript(paint, typeface, hb_buffer_get_script(mBuffer));
        if (!typeface) {
            baseGlyphCount = 0;
            typeface = SkFontHost::CreateTypeface(NULL, NULL, style);
        scriptTypeface = typefaceForScript(paint, typeface,
            hb_buffer_get_script(mBuffer));
#if DEBUG_GLYPHS
            ALOGD("Using Default Typeface");
        ALOGD("Using Default Typeface for script %c%c%c%c",
            HB_UNTAG(hb_buffer_get_script(mBuffer)));
#endif
    }
    if (scriptTypeface) {
        typeface = scriptTypeface;
    } else {
        baseGlyphCount = 0;
        if (typeface) {
            SkSafeRef(typeface);
        } else {
        if (!typeface) {
            typeface = SkFontHost::CreateTypeface(NULL, NULL, SkTypeface::kNormal);
#if DEBUG_GLYPHS
            ALOGD("Using Default Typeface (normal style)");
#endif
        } else {
            SkSafeRef(typeface);
        }
    }