Index: src/ports/SkFontHost_mac.cpp |
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp |
index 0c2e5c26281851030e53f41930f3406722310c90..7d1ef750bd5d3f74336fe7e0a14d25c942103f53 100644 |
--- a/src/ports/SkFontHost_mac.cpp |
+++ b/src/ports/SkFontHost_mac.cpp |
@@ -28,6 +28,7 @@ |
#include "SkFontDescriptor.h" |
#include "SkFontMgr.h" |
#include "SkGlyph.h" |
+#include "SkMakeUnique.h" |
#include "SkMaskGamma.h" |
#include "SkMathPriv.h" |
#include "SkMutex.h" |
@@ -511,7 +512,7 @@ public: |
protected: |
int onGetUPEM() const override; |
SkStreamAsset* onOpenStream(int* ttcIndex) const override; |
- SkFontData* onCreateFontData() const override; |
+ std::unique_ptr<SkFontData> onMakeFontData() const override; |
void onGetFamilyName(SkString* familyName) const override; |
SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override; |
int onGetTableTags(SkFontTableTag tags[]) const override; |
@@ -1885,16 +1886,17 @@ static bool get_variations(CTFontRef fFontRef, CFIndex* cgAxisCount, |
return true; |
} |
-SkFontData* SkTypeface_Mac::onCreateFontData() const { |
+std::unique_ptr<SkFontData> SkTypeface_Mac::onMakeFontData() const { |
int index; |
- SkAutoTDelete<SkStreamAsset> stream(this->onOpenStream(&index)); |
+ std::unique_ptr<SkStreamAsset> stream(this->onOpenStream(&index)); |
CFIndex cgAxisCount; |
SkAutoSTMalloc<4, SkFixed> axisValues; |
if (get_variations(fFontRef, &cgAxisCount, &axisValues)) { |
- return new SkFontData(stream.release(), index, axisValues.get(), cgAxisCount); |
+ return skstd::make_unique<SkFontData>(std::move(stream), index, |
+ axisValues.get(), cgAxisCount); |
} |
- return new SkFontData(stream.release(), index, nullptr, 0); |
+ return skstd::make_unique<SkFontData>(std::move(stream), index, nullptr, 0); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -2367,15 +2369,16 @@ protected: |
} |
SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const override { |
- AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromData(data)); |
+ AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromData(sk_ref_sp(data))); |
if (nullptr == pr) { |
return nullptr; |
} |
return create_from_dataProvider(pr); |
} |
- SkTypeface* onCreateFromStream(SkStreamAsset* stream, int ttcIndex) const override { |
- AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromStream(stream)); |
+ SkTypeface* onCreateFromStream(SkStreamAsset* bareStream, int ttcIndex) const override { |
+ std::unique_ptr<SkStreamAsset> stream(bareStream); |
+ AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromStream(std::move(stream))); |
if (nullptr == pr) { |
return nullptr; |
} |
@@ -2493,8 +2496,9 @@ protected: |
} |
return dict; |
} |
- SkTypeface* onCreateFromStream(SkStreamAsset* s, const FontParameters& params) const override { |
- AutoCFRelease<CGDataProviderRef> provider(SkCreateDataProviderFromStream(s)); |
+ SkTypeface* onCreateFromStream(SkStreamAsset* bs, const FontParameters& params) const override { |
+ std::unique_ptr<SkStreamAsset> s(bs); |
+ AutoCFRelease<CGDataProviderRef> provider(SkCreateDataProviderFromStream(std::move(s))); |
if (nullptr == provider) { |
return nullptr; |
} |
@@ -2574,10 +2578,9 @@ protected: |
} |
return dict; |
} |
- SkTypeface* onCreateFromFontData(SkFontData* data) const override { |
- SkAutoTDelete<SkFontData> fontData(data); |
- SkStreamAsset* stream = fontData->detachStream(); |
- AutoCFRelease<CGDataProviderRef> provider(SkCreateDataProviderFromStream(stream)); |
+ SkTypeface* onCreateFromFontData(std::unique_ptr<SkFontData> fontData) const override { |
+ AutoCFRelease<CGDataProviderRef> provider( |
+ SkCreateDataProviderFromStream(fontData->detachStream())); |
if (nullptr == provider) { |
return nullptr; |
} |
@@ -2586,7 +2589,7 @@ protected: |
return nullptr; |
} |
- AutoCFRelease<CFDictionaryRef> cgVariations(get_axes(cg, fontData)); |
+ AutoCFRelease<CFDictionaryRef> cgVariations(get_axes(cg, fontData.get())); |
// The CGFontRef returned by CGFontCreateCopyWithVariations when the passed CGFontRef was |
// created from a data provider does not appear to have any ownership of the underlying |
// data. The original CGFontRef must be kept alive until the copy will no longer be used. |