Index: content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm |
diff --git a/content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm b/content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm |
index 4507325403b5e4cda365d6788c89a27e2bbf7e0e..4c7ec9415c48517e0820e214352152b39f99d4ab 100644 |
--- a/content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm |
+++ b/content/browser/renderer_host/pepper/pepper_truetype_font_list_mac.mm |
@@ -8,9 +8,32 @@ |
#include "base/mac/scoped_nsautorelease_pool.h" |
#include "base/strings/sys_string_conversions.h" |
+#include "ppapi/c/dev/ppb_truetype_font_dev.h" |
+#include "ppapi/proxy/serialized_structs.h" |
namespace content { |
+namespace { |
+ |
+// Table to map AppKit weights to Pepper ones. |
+const PP_TrueTypeFontWeight_Dev kPepperFontWeights[] = { |
+ PP_TRUETYPEFONTWEIGHT_THIN, // 0 is the minimum AppKit weight. |
+ PP_TRUETYPEFONTWEIGHT_ULTRALIGHT, |
+ PP_TRUETYPEFONTWEIGHT_ULTRALIGHT, |
+ PP_TRUETYPEFONTWEIGHT_LIGHT, |
+ PP_TRUETYPEFONTWEIGHT_LIGHT, |
+ PP_TRUETYPEFONTWEIGHT_NORMAL, // 5 is a 'normal' AppKit weight. |
+ PP_TRUETYPEFONTWEIGHT_MEDIUM, |
+ PP_TRUETYPEFONTWEIGHT_MEDIUM, |
+ PP_TRUETYPEFONTWEIGHT_SEMIBOLD, |
+ PP_TRUETYPEFONTWEIGHT_BOLD, // 9 is a 'bold' AppKit weight. |
+ PP_TRUETYPEFONTWEIGHT_ULTRABOLD, |
+ PP_TRUETYPEFONTWEIGHT_HEAVY, |
+}; |
+const NSInteger kPepperFontWeightsLength = arraysize(kPepperFontWeights); |
+ |
+} // namespace |
+ |
void GetFontFamilies_SlowBlocking(std::vector<std::string>* font_families) { |
base::mac::ScopedNSAutoreleasePool autorelease_pool; |
NSFontManager* fontManager = [[[NSFontManager alloc] init] autorelease]; |
@@ -20,4 +43,40 @@ void GetFontFamilies_SlowBlocking(std::vector<std::string>* font_families) { |
font_families->push_back(base::SysNSStringToUTF8(family_name)); |
} |
+void GetFontsInFamily_SlowBlocking( |
+ const std::string& family, |
+ std::vector<ppapi::proxy::SerializedTrueTypeFontDesc>* fonts_in_family) { |
+ base::mac::ScopedNSAutoreleasePool autorelease_pool; |
+ NSFontManager* fontManager = [[[NSFontManager alloc] init] autorelease]; |
+ NSString* ns_family = base::SysUTF8ToNSString(family); |
+ NSArray* ns_fonts_in_family = |
+ [fontManager availableMembersOfFontFamily:ns_family]; |
+ |
+ for (NSArray* font_info in ns_fonts_in_family) { |
+ ppapi::proxy::SerializedTrueTypeFontDesc desc; |
+ desc.family = family; |
+ NSInteger font_weight = [[font_info objectAtIndex:2] intValue]; |
+ font_weight = std::max(0, font_weight); |
kylesch
2013/04/19 05:10:58
font_weight = std::max(static_cast<NSInteger>(0),
bbudge
2013/04/19 10:30:03
Thanks, I can try to land this when I re-enable th
|
+ font_weight = std::min(kPepperFontWeightsLength - 1, font_weight); |
+ desc.weight = kPepperFontWeights[font_weight]; |
+ |
+ NSFontTraitMask font_traits = |
+ [[font_info objectAtIndex:3] unsignedIntValue]; |
+ desc.style = PP_TRUETYPEFONTSTYLE_NORMAL; |
+ if (font_traits & NSItalicFontMask) |
+ desc.style = PP_TRUETYPEFONTSTYLE_ITALIC; |
+ |
+ desc.width = PP_TRUETYPEFONTWIDTH_NORMAL; |
+ if (font_traits & NSCondensedFontMask) |
+ desc.width = PP_TRUETYPEFONTWIDTH_CONDENSED; |
+ else if (font_traits & NSExpandedFontMask) |
+ desc.width = PP_TRUETYPEFONTWIDTH_EXPANDED; |
+ |
+ // Mac doesn't support requesting non-default character sets. |
+ desc.charset = PP_TRUETYPEFONTCHARSET_DEFAULT; |
+ |
+ fonts_in_family->push_back(desc); |
+ } |
+} |
+ |
} // namespace content |