Chromium Code Reviews| Index: src/ports/SkFontMgr_win_dw.cpp |
| diff --git a/src/ports/SkFontMgr_win_dw.cpp b/src/ports/SkFontMgr_win_dw.cpp |
| index 11afec3b53623205dad6612ab7cc0057c958181e..6b1004a009925f5feef0b0a46f4654cbe37cdab5 100644 |
| --- a/src/ports/SkFontMgr_win_dw.cpp |
| +++ b/src/ports/SkFontMgr_win_dw.cpp |
| @@ -264,8 +264,11 @@ class SkFontMgr_DirectWrite : public SkFontMgr { |
| public: |
| /** localeNameLength must include the null terminator. */ |
| SkFontMgr_DirectWrite(IDWriteFactory* factory, IDWriteFontCollection* fontCollection, |
| - WCHAR* localeName, int localeNameLength) |
| + IDWriteFontFallback* fallback, WCHAR* localeName, int localeNameLength) |
| : fFactory(SkRefComPtr(factory)) |
| +#if SK_HAS_DWRITE_2_H |
| + , fFontFallback(SkSafeRefComPtr(fallback)) |
| +#endif |
| , fFontCollection(SkRefComPtr(fontCollection)) |
| , fLocaleName(localeNameLength) |
| { |
| @@ -275,6 +278,9 @@ public: |
| // http://blogs.msdn.com/b/oldnewthing/archive/2004/03/26/96777.aspx |
| SkASSERT_RELEASE(nullptr == fFactory2.get()); |
| } |
| + if (fFontFallback.get()) { |
| + SkASSERT(fFactory2.get()); |
|
bungeman-skia
2016/04/14 21:48:39
nit: Skia uses 4 space indents.
Ilya Kulshin
2016/04/14 22:30:37
Done.
|
| + } |
| #endif |
| memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR)); |
| } |
| @@ -309,6 +315,7 @@ private: |
| SkTScopedComPtr<IDWriteFactory> fFactory; |
| #if SK_HAS_DWRITE_2_H |
| SkTScopedComPtr<IDWriteFactory2> fFactory2; |
| + SkTScopedComPtr<IDWriteFontFallback> fFontFallback; |
| #endif |
| SkTScopedComPtr<IDWriteFontCollection> fFontCollection; |
| SkSMallocWCHAR fLocaleName; |
| @@ -763,8 +770,13 @@ SkTypeface* SkFontMgr_DirectWrite::onMatchFamilyStyleCharacter(const char family |
| #if SK_HAS_DWRITE_2_H |
| if (fFactory2.get()) { |
| - SkTScopedComPtr<IDWriteFontFallback> fontFallback; |
| - HRNM(fFactory2->GetSystemFontFallback(&fontFallback), "Could not get system fallback."); |
| + SkTScopedComPtr<IDWriteFontFallback> systemFontFallback; |
| + IDWriteFontFallback* fontFallback = fFontFallback.get(); |
| + if (!fontFallback) { |
| + HRNM(fFactory2->GetSystemFontFallback(&systemFontFallback), |
| + "Could not get system fallback."); |
| + fontFallback = systemFontFallback.get(); |
| + } |
|
bungeman-skia
2016/04/14 21:48:39
Hmmm... I see. The idea is that while making the t
Ilya Kulshin
2016/04/14 22:30:37
Yes, after Chromium starts providing the fallback,
|
| SkTScopedComPtr<IDWriteNumberSubstitution> numberSubstitution; |
| HRNM(fFactory2->CreateNumberSubstitution(DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE, nullptr, TRUE, |
| @@ -1069,6 +1081,12 @@ SkTypeface* SkFontStyleSet_DirectWrite::matchStyle(const SkFontStyle& pattern) { |
| SK_API SkFontMgr* SkFontMgr_New_DirectWrite(IDWriteFactory* factory, |
| IDWriteFontCollection* collection) { |
| + return SkFontMgr_New_DirectWrite(factory, collection, nullptr); |
| +} |
| + |
| +SK_API SkFontMgr* SkFontMgr_New_DirectWrite(IDWriteFactory* factory, |
| + IDWriteFontCollection* collection, |
| + IDWriteFontFallback* fallback) { |
| if (nullptr == factory) { |
| factory = sk_get_dwrite_factory(); |
| if (nullptr == factory) { |
| @@ -1099,7 +1117,7 @@ SK_API SkFontMgr* SkFontMgr_New_DirectWrite(IDWriteFactory* factory, |
| }; |
| } |
| - return new SkFontMgr_DirectWrite(factory, collection, localeName, localeNameLen); |
| + return new SkFontMgr_DirectWrite(factory, collection, fallback, localeName, localeNameLen); |
| } |
| #include "SkFontMgr_indirect.h" |