Index: third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp |
diff --git a/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp b/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp |
index ddaadd6acb74065fc9110dea7aa420929d4d0afc..6b8b3c71e69c760f66964a7e0bcf1f02f60ccca1 100644 |
--- a/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp |
+++ b/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp |
@@ -33,6 +33,7 @@ |
#include "SkFontMgr.h" |
#include "SkTypeface_win.h" |
+#include "platform/Language.h" |
#include "platform/RuntimeEnabledFeatures.h" |
#include "platform/fonts/FontDescription.h" |
#include "platform/fonts/FontFaceCreationParams.h" |
@@ -142,6 +143,37 @@ PassRefPtr<SimpleFontData> FontCache::fallbackFontForCharacter( |
data = getFontPlatformData(fontDescription, createByFamily); |
} |
+ if ((!data || !data->fontContainsCharacter(character)) && s_useSkiaFontFallback) { |
+ const char* bcp47Locale = nullptr; |
+ int localeCount = 0; |
+ CString fontLocale; |
+ // If the font description has a locale, use that. Otherwise, Skia will |
+ // fall back on the user's default locale. |
+ // TODO(kulshin): extract locale fallback logic from |
+ // FontCacheAndroid.cpp and share that code |
+ if (!fontDescription.locale().isEmpty()) { |
+ fontLocale = toSkFontMgrLocale(fontDescription.locale()); |
+ bcp47Locale = fontLocale.data(); |
+ localeCount = 1; |
+ } |
+ |
+ CString familyName = fontDescription.family().family().utf8(); |
+ |
+ SkTypeface* typeface = m_fontManager->matchFamilyStyleCharacter( |
+ familyName.data(), |
+ fontDescription.skiaFontStyle(), |
+ &bcp47Locale, |
+ localeCount, |
+ character); |
+ if (typeface) { |
+ SkString skiaFamily; |
+ typeface->getFamilyName(&skiaFamily); |
+ FontFaceCreationParams createByFamily( |
+ AtomicString(skiaFamily.c_str())); |
+ data = getFontPlatformData(fontDescription, createByFamily); |
+ } |
+ } |
+ |
// Last resort font list : PanUnicode. CJK fonts have a pretty |
// large repertoire. Eventually, we need to scan all the fonts |
// on the system to have a Firefox-like coverage. |