--- ./include/ports/SkTypeface_win.h +++ ./include/ports/SkTypeface_win.h @@ -75,5 +75,13 @@ SK_API sk_sp SkFontMgr_New_DirectWriteRenderer(sk_sp SkRemotableFontMgr_New_DirectWrite(); +struct IDWriteFontFace; +struct IDWriteFont; +struct IDWriteFontFamily; +SK_API SkTypeface* SkCreateTypefaceDirectWrite(sk_sp fontMgr, + IDWriteFontFace* fontFace, + IDWriteFont* font, + IDWriteFontFamily* fontFamily); + #endif // SK_BUILD_FOR_WIN #endif // SkTypeface_win_DEFINED --- ./src/ports/SkFontMgr_win_dw.cpp +++ ./src/ports/SkFontMgr_win_dw.cpp @@ -320,6 +320,10 @@ private: friend class SkFontStyleSet_DirectWrite; friend class FontFallbackRenderer; + friend SK_API SkTypeface* SkCreateTypefaceDirectWrite(sk_sp fontMgr, + IDWriteFontFace* fontFace, + IDWriteFont* font, + IDWriteFontFamily* fontFamily); }; class SkFontStyleSet_DirectWrite : public SkFontStyleSet { @@ -1215,6 +1219,18 @@ SK_API sk_sp SkFontMgr_New_DirectWrite(IDWriteFactory* factory, defaultFamilyName, defaultFamilyNameLen); } +SkTypeface* SkCreateTypefaceDirectWrite(sk_sp fontMgr, + IDWriteFontFace* fontFace, + IDWriteFont* font, + IDWriteFontFamily* fontFamily) +{ + SkFontMgr_DirectWrite* mgr = dynamic_cast(fontMgr.get()); + if(!mgr) + return nullptr; + sk_sp typeface = mgr->makeTypefaceFromDWriteFont(fontFace, font, fontFamily); + return typeface.release(); +} + #include "include/ports/SkFontMgr_indirect.h" SK_API sk_sp SkFontMgr_New_DirectWriteRenderer(sk_sp proxy) { sk_sp impl(SkFontMgr_New_DirectWrite());