Chromium Code Reviews| 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 5a61fc126196325097777b82e2cfa2d24a56a1ce..923e19fddbe07cd547b92a60befe520e159b398b 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" |
| @@ -139,6 +140,35 @@ PassRefPtr<SimpleFontData> FontCache::fallbackFontForCharacter( |
| data = getFontPlatformData(fontDescription, createByFamily); |
| } |
| + if (!data || !data->fontContainsCharacter(character)) { |
| + const char* bcp47Locale = nullptr; |
| + int localeCount = 0; |
| + CString fontLocale; |
| + // If the font description has a locale, use that. Otherwise, Skia will fall back |
|
eae
2016/02/29 23:11:26
Wrap at 80 col, you'll probably do a better job of
Ilya Kulshin
2016/03/01 03:31:14
Done.
|
| + // 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; |
|
eae
2016/02/29 23:11:26
This is set but never used. Please remove.
Ilya Kulshin
2016/03/01 03:31:14
This is used in the call to matchFamilyStyleCharac
|
| + } |
| + |
| + // LChar is unsigned, while matchFamilyStyleCharacter requires a plain char*. |
| + const LChar* fontDescriptionFamilyName = fontDescription.family().family().characters8(); |
| + const char* skiaFamilyName = reinterpret_cast<const char*>(fontDescriptionFamilyName); |
|
eae
2016/02/29 23:11:26
Elsewhere we convert the family name to utf8 befor
Ilya Kulshin
2016/03/01 03:31:14
Oh, not sure how I missed that API. That works muc
|
| + static_assert(sizeof(*fontDescriptionFamilyName) == sizeof(*skiaFamilyName), |
| + "skiaFamilyName and fontDescriptionFamilyName must be same size"); |
| + |
| + SkTypeface* typeface = m_fontManager->matchFamilyStyleCharacter( |
| + skiaFamilyName, 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. |