| Index: src/ports/SkFontHost_mac.cpp
|
| diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
|
| index ff23b99905117c486e4c682bfbe3339aee5d4ad7..d4920986ebd95a377dd59b7ffe4d53ad351d1222 100755
|
| --- a/src/ports/SkFontHost_mac.cpp
|
| +++ b/src/ports/SkFontHost_mac.cpp
|
| @@ -427,13 +427,13 @@ static const uint32_t SkCTFontColorGlyphsTrait = (1 << 13);
|
|
|
| class SkTypeface_Mac : public SkTypeface {
|
| public:
|
| - SkTypeface_Mac(const SkFontStyle& fs, bool isFixedPitch,
|
| - CTFontRef fontRef, const char requestedName[], bool isLocalStream,
|
| - CGFontRef originatingCGFontRef = NULL)
|
| + SkTypeface_Mac(CTFontRef fontRef, CFTypeRef resourceRef,
|
| + const SkFontStyle& fs, bool isFixedPitch,
|
| + const char requestedName[], bool isLocalStream)
|
| : SkTypeface(fs, SkTypefaceCache::NewFontID(), isFixedPitch)
|
| , fRequestedName(requestedName)
|
| , fFontRef(fontRef) // caller has already called CFRetain for us
|
| - , fOriginatingCGFontRef(originatingCGFontRef)
|
| + , fOriginatingCFTypeRef(resourceRef) // caller has already called CFRetain for us
|
| , fHasColorGlyphs(SkToBool(CTFontGetSymbolicTraits(fFontRef) & SkCTFontColorGlyphsTrait))
|
| , fIsLocalStream(isLocalStream)
|
| {
|
| @@ -442,7 +442,7 @@ public:
|
|
|
| SkString fRequestedName;
|
| AutoCFRelease<CTFontRef> fFontRef;
|
| - AutoCFRelease<CGFontRef> fOriginatingCGFontRef;
|
| + AutoCFRelease<CFTypeRef> fOriginatingCFTypeRef;
|
| const bool fHasColorGlyphs;
|
|
|
| protected:
|
| @@ -471,15 +471,14 @@ private:
|
| };
|
|
|
| /** Creates a typeface without searching the cache. Takes ownership of the CTFontRef. */
|
| -static SkTypeface* NewFromFontRef(CTFontRef fontRef, const char name[], bool isLocalStream,
|
| - CGFontRef originatingCGFontRef = NULL)
|
| +static SkTypeface* NewFromFontRef(CTFontRef fontRef, CFTypeRef resourceRef,
|
| + const char name[], bool isLocalStream)
|
| {
|
| SkASSERT(fontRef);
|
| bool isFixedPitch;
|
| SkFontStyle style = SkFontStyle(computeStyleBits(fontRef, &isFixedPitch));
|
|
|
| - return new SkTypeface_Mac(style, isFixedPitch, fontRef, name, isLocalStream,
|
| - originatingCGFontRef);
|
| + return new SkTypeface_Mac(fontRef, resourceRef, style, isFixedPitch, name, isLocalStream);
|
| }
|
|
|
| static bool find_by_CTFontRef(SkTypeface* cached, const SkFontStyle&, void* context) {
|
| @@ -539,7 +538,7 @@ static SkTypeface* NewFromName(const char familyName[], const SkFontStyle& theSt
|
|
|
| SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_CTFontRef, (void*)ctFont.get());
|
| if (!face) {
|
| - face = NewFromFontRef(ctFont.detach(), NULL, false);
|
| + face = NewFromFontRef(ctFont.detach(), NULL, NULL, false);
|
| SkTypefaceCache::Add(face, face->fontStyle());
|
| }
|
| return face;
|
| @@ -569,11 +568,14 @@ CTFontRef SkTypeface_GetCTFontRef(const SkTypeface* face) {
|
| /* This function is visible on the outside. It first searches the cache, and if
|
| * not found, returns a new entry (after adding it to the cache).
|
| */
|
| -SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef fontRef) {
|
| +SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef fontRef, CFTypeRef resourceRef) {
|
| SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_CTFontRef, (void*)fontRef);
|
| if (!face) {
|
| CFRetain(fontRef);
|
| - face = NewFromFontRef(fontRef, NULL, false);
|
| + if (resourceRef) {
|
| + CFRetain(resourceRef);
|
| + }
|
| + face = NewFromFontRef(fontRef, resourceRef, NULL, false);
|
| SkTypefaceCache::Add(face, face->fontStyle());
|
| }
|
| return face;
|
| @@ -1459,7 +1461,7 @@ static SkTypeface* create_from_dataProvider(CGDataProviderRef provider) {
|
| return NULL;
|
| }
|
| CTFontRef ct = CTFontCreateWithGraphicsFont(cg, 0, NULL, NULL);
|
| - return ct ? NewFromFontRef(ct, NULL, true) : NULL;
|
| + return ct ? NewFromFontRef(ct, NULL, NULL, true) : NULL;
|
| }
|
|
|
| // Web fonts added to the the CTFont registry do not return their character set.
|
| @@ -2195,8 +2197,9 @@ static SkTypeface* createFromDesc(CFStringRef cfFamilyName, CTFontDescriptorRef
|
| bool isFixedPitch;
|
| (void)computeStyleBits(ctFont, &isFixedPitch);
|
|
|
| - face = SkNEW_ARGS(SkTypeface_Mac, (cacheRequest.fStyle, isFixedPitch,
|
| - ctFont.detach(), skFamilyName.c_str(), false));
|
| + face = SkNEW_ARGS(SkTypeface_Mac, (ctFont.detach(), NULL,
|
| + cacheRequest.fStyle, isFixedPitch,
|
| + skFamilyName.c_str(), false));
|
| SkTypefaceCache::Add(face, face->fontStyle());
|
| return face;
|
| }
|
| @@ -2443,7 +2446,7 @@ protected:
|
| if (!ct) {
|
| return NULL;
|
| }
|
| - return NewFromFontRef(ct, NULL, true, cg.detach());
|
| + return NewFromFontRef(ct, cg.detach(), NULL, true);
|
| }
|
|
|
| SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const override {
|
|
|