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
This commit is contained in:
@@ -815,10 +815,15 @@ namespace PaintGlue {
|
||||
}
|
||||
|
||||
if (prevCp != kStartOfString &&
|
||||
((0xFE00 <= cp && cp <= 0xFE0F) || (0xE0100 <= cp && cp <= 0xE01EF)) &&
|
||||
!MinikinUtils::hasVariationSelector(typeface, prevCp, cp)) {
|
||||
// No font has a glyph for the code point and variation selector pair.
|
||||
return false;
|
||||
((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;
|
||||
|
||||
Reference in New Issue
Block a user