diff options
author | Ben Wagner <bungeman@google.com> | 2017-01-03 13:32:36 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-04 14:51:09 +0000 |
commit | 3546ff10c2e1e91f5afe1efaab4e5e14f71689d1 (patch) | |
tree | cbcf83ae724df22c6cc5704a75be9095a28058db /src/core/SkFontMgr.cpp | |
parent | 8bc9f7b32867cb46fd7b56c11bf9dfa79a7d246e (diff) |
Stage SkFontMgr factories to return smart pointers.
All the SkFontMgr factories currently return bare pointers and sometimes
even document the ownership rules. Since such factories can be
implemented by external ports, the ownership rules should be explicit in
order to prevent simple reference counting issues.
Change-Id: I25b598ce0954cd473a3fb1f8adc0cb86331583ca
Reviewed-on: https://skia-review.googlesource.com/6533
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'src/core/SkFontMgr.cpp')
-rw-r--r-- | src/core/SkFontMgr.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/core/SkFontMgr.cpp b/src/core/SkFontMgr.cpp index 57f82b03ba..b9865a2597 100644 --- a/src/core/SkFontMgr.cpp +++ b/src/core/SkFontMgr.cpp @@ -167,6 +167,7 @@ SkTypeface* SkFontMgr::legacyCreateTypeface(const char familyName[], SkFontStyle return this->onLegacyCreateTypeface(familyName, style); } +#ifdef SK_LEGACY_FONTMGR_FACTORY SkFontMgr* SkFontMgr::RefDefault() { static SkOnce once; static SkFontMgr* singleton; @@ -177,6 +178,18 @@ SkFontMgr* SkFontMgr::RefDefault() { }); return SkRef(singleton); } +#else +sk_sp<SkFontMgr> SkFontMgr::RefDefault() { + static SkOnce once; + static sk_sp<SkFontMgr> singleton; + + once([]{ + sk_sp<SkFontMgr> fm = SkFontMgr::Factory(); + singleton = fm ? std::move(fm) : sk_make_sp<SkEmptyFontMgr>(); + }); + return singleton; +} +#endif /** * Width has the greatest priority. |