mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 962440 - use CTFontManager to get the list of available font families. r=bas
This commit is contained in:
parent
b28c502af5
commit
531be48b2d
@ -678,30 +678,48 @@ gfxMacPlatformFontList::InitFontList()
|
||||
gfxPlatformFontList::InitFontList();
|
||||
|
||||
// iterate over available families
|
||||
NSEnumerator *families = [[sFontManager availableFontFamilies]
|
||||
objectEnumerator]; // returns "canonical", non-localized family name
|
||||
|
||||
nsAutoString availableFamilyName;
|
||||
CFArrayRef familyNames = CTFontManagerCopyAvailableFontFamilyNames();
|
||||
|
||||
NSString *availableFamily = nil;
|
||||
while ((availableFamily = [families nextObject])) {
|
||||
// iterate over families
|
||||
uint32_t i, numFamilies;
|
||||
|
||||
// make a nsString
|
||||
GetStringForNSString(availableFamily, availableFamilyName);
|
||||
numFamilies = CFArrayGetCount(familyNames);
|
||||
for (i = 0; i < numFamilies; i++) {
|
||||
CFStringRef family = (CFStringRef)CFArrayGetValueAtIndex(familyNames, i);
|
||||
|
||||
// CTFontManager includes weird internal family names and
|
||||
// LastResort, skip over those
|
||||
if (!family ||
|
||||
::CFStringHasPrefix(family, CFSTR(".")) ||
|
||||
CFStringCompare(family, CFSTR("LastResort"),
|
||||
kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
|
||||
continue;
|
||||
}
|
||||
|
||||
nsAutoTArray<UniChar, 1024> buffer;
|
||||
CFIndex len = ::CFStringGetLength(family);
|
||||
buffer.SetLength(len+1);
|
||||
::CFStringGetCharacters(family, ::CFRangeMake(0, len),
|
||||
buffer.Elements());
|
||||
buffer[len] = 0;
|
||||
nsAutoString familyName(reinterpret_cast<char16_t*>(buffer.Elements()), len);
|
||||
|
||||
// create a family entry
|
||||
gfxFontFamily *familyEntry = new gfxMacFontFamily(availableFamilyName);
|
||||
gfxFontFamily *familyEntry = new gfxMacFontFamily(familyName);
|
||||
if (!familyEntry) break;
|
||||
|
||||
// add the family entry to the hash table
|
||||
ToLowerCase(availableFamilyName);
|
||||
mFontFamilies.Put(availableFamilyName, familyEntry);
|
||||
ToLowerCase(familyName);
|
||||
mFontFamilies.Put(familyName, familyEntry);
|
||||
|
||||
// check the bad underline blacklist
|
||||
if (mBadUnderlineFamilyNames.Contains(availableFamilyName))
|
||||
if (mBadUnderlineFamilyNames.Contains(familyName))
|
||||
familyEntry->SetBadUnderlineFamily();
|
||||
}
|
||||
|
||||
CFRelease(familyNames);
|
||||
|
||||
InitSingleFaceList();
|
||||
|
||||
// to avoid full search of font name tables, seed the other names table with localized names from
|
||||
|
Loading…
Reference in New Issue
Block a user