diff --git a/include/ports/SkFontMgr_fontconfig.h b/include/ports/SkFontMgr_fontconfig.h index 4b2bb2d297..2b82cbfedd 100644 --- include/ports/SkFontMgr_fontconfig.h +++ include/ports/SkFontMgr_fontconfig.h @@ -19,4 +19,9 @@ class SkFontMgr; */ SK_API sk_sp SkFontMgr_New_FontConfig(FcConfig* fc); +struct _FcPattern; +typedef struct _FcPattern FcPattern; +class SkTypeface; +SK_API sk_sp SkFontMgr_createTypefaceFromFcPattern(const sk_sp& mgr, FcPattern* pattern); + #endif // #ifndef SkFontMgr_fontconfig_DEFINED diff --git a/src/ports/SkFontMgr_fontconfig.cpp b/src/ports/SkFontMgr_fontconfig.cpp index c2da39b28f..28483faf02 100644 --- src/ports/SkFontMgr_fontconfig.cpp +++ src/ports/SkFontMgr_fontconfig.cpp @@ -690,6 +690,7 @@ class SkFontMgr_fontconfig : public SkFontMgr { /** Creates a typeface using a typeface cache. * @param pattern a complete pattern from FcFontRenderPrepare. */ +public: sk_sp createTypefaceFromFcPattern(SkAutoFcPattern pattern) const { if (!pattern) { return nullptr; @@ -1043,3 +1044,13 @@ protected: SK_API sk_sp SkFontMgr_New_FontConfig(FcConfig* fc) { return sk_make_sp(fc); } + +SK_API sk_sp SkFontMgr_createTypefaceFromFcPattern(const sk_sp& mgr, FcPattern* pattern) +{ + SkAutoFcPattern p([pattern]() { + FCLocker lock; + FcPatternReference(pattern); + return pattern; + }()); + return static_cast(mgr.get())->createTypefaceFromFcPattern(std::move(p)); +}