static bool typefacesMatchesFamily(const SkTypeface* tf, const AtomicString& family) { SkTypeface::LocalizedStrings* actualFamilies = tf->createFamilyNameIterator(); bool matchesRequestedFamily = false; SkTypeface::LocalizedString actualFamily; while (actualFamilies->next(&actualFamily)) { if (equalIgnoringCase(family, actualFamily.fString)) { matchesRequestedFamily = true; break; } } actualFamilies->unref(); // getFamilyName may return a name not returned by the createFamilyNameIterator. // Specifically in cases where Windows substitutes the font based on the // HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes registry entries. if (!matchesRequestedFamily) { SkString familyName; tf->getFamilyName(&familyName); if (equalIgnoringCase(family, familyName)) matchesRequestedFamily = true; } return matchesRequestedFamily; }
String FontPlatformData::fontFamilyName() const { ASSERT(this->typeface()); SkTypeface::LocalizedStrings* fontFamilyIterator = this->typeface()->createFamilyNameIterator(); SkTypeface::LocalizedString localizedString; while (fontFamilyIterator->next(&localizedString) && !localizedString.fString.size()) { } fontFamilyIterator->unref(); return String(localizedString.fString.c_str()); }
String FontPlatformData::fontFamilyName() const { // FIXME(crbug.com/326582): come up with a proper way of handling SVG. if (!this->typeface()) return ""; SkTypeface::LocalizedStrings* fontFamilyIterator = this->typeface()->createFamilyNameIterator(); SkTypeface::LocalizedString localizedString; while (fontFamilyIterator->next(&localizedString) && !localizedString.fString.size()) { } fontFamilyIterator->unref(); return String(localizedString.fString.c_str()); }