| Index: content/common/font_list_mac.mm
|
| diff --git a/content/common/font_list_mac.mm b/content/common/font_list_mac.mm
|
| index 4ffb3de1804cb39bb6fe3b21989a258fc809d8ee..7dc70f33410a91f93ae149e188639e576d5ad4cf 100644
|
| --- a/content/common/font_list_mac.mm
|
| +++ b/content/common/font_list_mac.mm
|
| @@ -12,20 +12,58 @@
|
|
|
| namespace content {
|
|
|
| +static void AppendNewFontItemToList(NSString* font_value,
|
| + NSString* font_label,
|
| + ListValue* font_list) {
|
| + ListValue* font_item = new ListValue();
|
| + string16 value_string = base::SysNSStringToUTF16(font_value);
|
| + font_item->Append(Value::CreateStringValue(value_string));
|
| + string16 label_string = base::SysNSStringToUTF16(font_label);
|
| + font_item->Append(Value::CreateStringValue(label_string));
|
| + font_list->Append(font_item);
|
| +}
|
| +
|
| scoped_ptr<base::ListValue> GetFontList_SlowBlocking() {
|
| base::mac::ScopedNSAutoreleasePool autorelease_pool;
|
| scoped_ptr<base::ListValue> font_list(new base::ListValue);
|
| - NSFontManager* fontManager = [[[NSFontManager alloc] init] autorelease];
|
| - NSArray* fonts = [fontManager availableFontFamilies];
|
| - for (NSString* family_name in fonts) {
|
| - NSString* localized_family_name =
|
| - [fontManager localizedNameForFamily:family_name face:nil];
|
| - base::ListValue* font_item = new base::ListValue();
|
| - string16 family = base::SysNSStringToUTF16(family_name);
|
| - font_item->Append(new base::StringValue(family));
|
| - string16 loc_family = base::SysNSStringToUTF16(localized_family_name);
|
| - font_item->Append(new base::StringValue(loc_family));
|
| - font_list->Append(font_item);
|
| + NSFontManager* font_manager = [[[NSFontManager alloc] init] autorelease];
|
| + NSArray* family_names = [font_manager availableFontFamilies];
|
| + NSMutableArray* font_families = [NSMutableArray array];
|
| + for (NSString* family_name in family_names) {
|
| + NSString* localized_family_name = [font_manager
|
| + localizedNameForFamily:family_name face:nil];
|
| + [font_families addObject:[NSDictionary dictionaryWithObjectsAndKeys:
|
| + family_name, @"name", localized_family_name, @"localizedName", nil]];
|
| + }
|
| + NSSortDescriptor* sort_descriptor = [[NSSortDescriptor alloc]
|
| + initWithKey:@"localizedName" ascending:YES];
|
| + [font_families sortUsingDescriptors:
|
| + [NSArray arrayWithObject:sort_descriptor]];
|
| + [sort_descriptor release];
|
| + for (NSDictionary* family in font_families) {
|
| + NSString* family_name = [family objectForKey:@"name"];
|
| + AppendNewFontItemToList(family_name,
|
| + [family objectForKey:@"localizedName"],
|
| + font_list.get());
|
| + // Osaka-Mono is the only monospace Japanese font on the Mac,
|
| + // but since it is included as a member of the Osaka family, it cannot
|
| + // be selected. The code below exceptionally picks out monospace members in
|
| + // a proportionaly spaced family (or vice versa) to included.
|
| + BOOL is_family_fixed_point = [font_manager fontNamed:family_name
|
| + hasTraits:NSFixedPitchFontMask];
|
| + NSArray* family_members = [font_manager availableMembersOfFontFamily:
|
| + [family objectForKey:@"name"]];
|
| + for (NSArray* member in family_members) {
|
| + NSString* font_name = [member objectAtIndex:0];
|
| + if (is_family_fixed_point != [font_manager fontNamed:font_name
|
| + hasTraits:NSFixedPitchFontMask]) {
|
| + NSFont* font = [NSFont fontWithName:font_name size:0.0];
|
| + NSString* localized_font_name = [font displayName];
|
| + AppendNewFontItemToList(font_name,
|
| + localized_font_name,
|
| + font_list.get());
|
| + }
|
| + }
|
| }
|
| return font_list.Pass();
|
| }
|
|
|