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

Commit 032a3595 authored by Raph Levien's avatar Raph Levien
Browse files

Don't do layout in hasGlyph for codepoint + vs

In the case where the input is a base codepoint + a variation selector,
the code currently checks hasVariationSelector and then does a layout,
checking for a single glyph. However, HarfBuzz in some cases will change
the VS into a space glyph, so hasGlyph will return false.

This patch makes hasGlyph rely entirely on the hasVariationSelector
method in the case of a base codepoint + a VS

Bug: 27531970
Bug: 28182689
Change-Id: Id190c427149213509f2d779ec1aa330feb4b62d8
parent be67c90f
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -815,10 +815,15 @@ namespace PaintGlue {
            }

            if (prevCp != kStartOfString &&
                ((0xFE00 <= cp && cp <= 0xFE0F) || (0xE0100 <= cp && cp <= 0xE01EF)) &&
                !MinikinUtils::hasVariationSelector(typeface, prevCp, cp)) {
                ((0xFE00 <= cp && cp <= 0xFE0F) || (0xE0100 <= cp && cp <= 0xE01EF))) {
                bool hasVS = MinikinUtils::hasVariationSelector(typeface, prevCp, cp);
                if (!hasVS) {
                    // No font has a glyph for the code point and variation selector pair.
                    return false;
                } else if (nChars == 1 && i + 1 == str.size()) {
                    // The string is just a codepoint and a VS, we have an authoritative answer
                    return true;
                }
            }
            nChars++;
            prevCp = cp;