Index: ui/gfx/font_fallback_mac.mm |
diff --git a/ui/gfx/font_fallback_mac.mm b/ui/gfx/font_fallback_mac.mm |
index 6cfc7e36b8b713de6d9cfacfd347fcc0279bd98e..6ad582dcc8edb42bf4307373ff6c44fb8545af35 100644 |
--- a/ui/gfx/font_fallback_mac.mm |
+++ b/ui/gfx/font_fallback_mac.mm |
@@ -4,45 +4,32 @@ |
#include "ui/gfx/font_fallback.h" |
-#include <CoreText/CoreText.h> |
+#include <dlfcn.h> |
#import <Foundation/Foundation.h> |
+#include <string> |
+#include <vector> |
#include "base/mac/foundation_util.h" |
#import "base/mac/mac_util.h" |
-#include "base/mac/scoped_cftyperef.h" |
#import "base/strings/sys_string_conversions.h" |
#include "ui/gfx/font.h" |
+// TODO(thakis): Remove this prototype once the deployment target is 10.8+. |
+extern "C" CFArrayRef CTFontCopyDefaultCascadeListForLanguages( |
+ CTFontRef font, |
+ CFArrayRef languagePrefList); |
+ |
namespace gfx { |
-namespace { |
- |
-// CTFontCreateForString() sometimes re-wraps its result in a new CTFontRef with |
-// identical attributes. This wastes time shaping the text run and confounds |
-// Skia's internal typeface cache. |
-bool FontsEqual(CTFontRef lhs, CTFontRef rhs) { |
- if (lhs == rhs) |
- return true; |
- |
- // Compare ATSFontRef typeface IDs. These are typedef uint32_t. Typically if |
- // RenderText decided to hunt for a fallback in the first place, this check |
- // fails and FontsEqual returns here. |
- if (CTFontGetPlatformFont(lhs, nil) != CTFontGetPlatformFont(rhs, nil)) |
- return false; |
- |
- // Comparing addresses of descriptors seems to be sufficient for other cases. |
- base::ScopedCFTypeRef<CTFontDescriptorRef> lhs_descriptor( |
- CTFontCopyFontDescriptor(lhs)); |
- base::ScopedCFTypeRef<CTFontDescriptorRef> rhs_descriptor( |
- CTFontCopyFontDescriptor(rhs)); |
- return lhs_descriptor.get() == rhs_descriptor.get(); |
-} |
- |
-} // namespace |
std::vector<Font> GetFallbackFonts(const Font& font) { |
// On Mac "There is a system default cascade list (which is polymorphic, based |
// on the user's language setting and current font)" - CoreText Programming |
// Guide. |
+ // The CoreText APIs provide CTFontCreateForString(font, string, range), but |
+ // it requires a text string "hint", and the returned font can't be |
+ // represented by name for easy retrieval later. |
+ // In 10.8, CTFontCopyDefaultCascadeListForLanguages(font, language_list) |
+ // showed up which is a good fit GetFallbackFonts(). |
NSArray* languages = [[NSUserDefaults standardUserDefaults] |
stringArrayForKey:@"AppleLanguages"]; |
CFArrayRef languages_cf = base::mac::NSToCFCast(languages); |
@@ -69,21 +56,4 @@ |
return fallback_fonts; |
} |
-bool GetFallbackFont(const Font& font, |
- const base::char16* text, |
- int text_length, |
- Font* result) { |
- base::ScopedCFTypeRef<CFStringRef> cf_string( |
- CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, text, text_length, |
- kCFAllocatorNull)); |
- CTFontRef ct_font = base::mac::NSToCFCast(font.GetNativeFont()); |
- base::ScopedCFTypeRef<CTFontRef> ct_result( |
- CTFontCreateForString(ct_font, cf_string, {0, text_length})); |
- if (FontsEqual(ct_font, ct_result)) |
- return false; |
- |
- *result = Font(base::mac::CFToNSCast(ct_result.get())); |
- return true; |
-} |
- |
} // namespace gfx |