Chromium Code Reviews| Index: src/ports/SkFontHost_mac.cpp |
| diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp |
| index 53d5610575b1f4867a7ae13188823a0b78bb4dbf..ca6c24d50df82fa9c4632dbde8f2cfa0787a140d 100644 |
| --- a/src/ports/SkFontHost_mac.cpp |
| +++ b/src/ports/SkFontHost_mac.cpp |
| @@ -558,10 +558,11 @@ static SkTypeface* NewFromName(const char familyName[], const SkFontStyle& theSt |
| } |
| SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_CTFontRef, (void*)ctFont.get()); |
| - if (!face) { |
| - face = NewFromFontRef(ctFont.release(), nullptr, nullptr, false); |
| - SkTypefaceCache::Add(face, face->fontStyle()); |
| + if (face) { |
| + return face; |
| } |
| + face = NewFromFontRef(ctFont.release(), nullptr, nullptr, false); |
| + SkTypefaceCache::Add(face, face->fontStyle()); |
| return face; |
| } |
| @@ -573,7 +574,6 @@ static SkTypeface* GetDefaultFace() { |
| if (nullptr == gDefaultFace) { |
| gDefaultFace = NewFromName(FONT_DEFAULT_NAME, SkFontStyle()); |
| - SkTypefaceCache::Add(gDefaultFace, SkFontStyle()); |
| } |
| return gDefaultFace; |
| } |
| @@ -591,14 +591,15 @@ CTFontRef SkTypeface_GetCTFontRef(const SkTypeface* face) { |
| */ |
| SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef fontRef, CFTypeRef resourceRef) { |
| SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_CTFontRef, (void*)fontRef); |
| - if (!face) { |
| - CFRetain(fontRef); |
| - if (resourceRef) { |
| - CFRetain(resourceRef); |
| - } |
| - face = NewFromFontRef(fontRef, resourceRef, nullptr, false); |
| - SkTypefaceCache::Add(face, face->fontStyle()); |
| + if (face) { |
| + return face; |
| } |
| + CFRetain(fontRef); |
| + if (resourceRef) { |
| + CFRetain(resourceRef); |
| + } |
| + face = NewFromFontRef(fontRef, resourceRef, nullptr, false); |
| + SkTypefaceCache::Add(face, face->fontStyle()); |
| return face; |
| } |
| @@ -2180,27 +2181,20 @@ static int compute_metric(const SkFontStyle& a, const SkFontStyle& b) { |
| } |
| static SkTypeface* createFromDesc(CFStringRef cfFamilyName, CTFontDescriptorRef desc) { |
| - NameStyle cacheRequest; |
| SkString skFamilyName; |
| CFStringToSkString(cfFamilyName, &skFamilyName); |
| - cacheRequest.fName = skFamilyName.c_str(); |
| - cacheRequest.fStyle = fontstyle_from_descriptor(desc); |
| - |
| - SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_NameStyle, &cacheRequest); |
| - if (face) { |
| - return face; |
| - } |
| AutoCFRelease<CTFontRef> ctFont(CTFontCreateWithFontDescriptor(desc, 0, nullptr)); |
| if (!ctFont) { |
| return nullptr; |
| } |
| - bool isFixedPitch; |
| - (void)computeStyleBits(ctFont, &isFixedPitch); |
| + SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_CTFontRef, (void*)ctFont.get()); |
| + if (face) { |
| + return face; |
| + } |
| - face = new SkTypeface_Mac(ctFont.release(), nullptr, cacheRequest.fStyle, isFixedPitch, |
| - skFamilyName.c_str(), false); |
| + face = NewFromFontRef(ctFont.release(), nullptr, skFamilyName.c_str(), false); |
| SkTypefaceCache::Add(face, face->fontStyle()); |
| return face; |
| } |
| @@ -2612,17 +2606,16 @@ protected: |
| NameStyle cacheRequest = { familyName, style }; |
| SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_NameStyle, &cacheRequest); |
|
bungeman-skia
2016/04/05 22:03:26
Leaving this find_by_NameStyle here is trouble, wh
|
| + if (face) { |
| + return face; |
| + } |
| - if (nullptr == face) { |
| - face = NewFromName(familyName, style); |
| - if (face) { |
| - SkTypefaceCache::Add(face, style); |
| - } else { |
| - face = GetDefaultFace(); |
| - face->ref(); |
| - } |
| + face = NewFromName(familyName, style); |
| + if (face) { |
| + return face; |
| } |
| - return face; |
| + |
| + return SkSafeRef(GetDefaultFace()); |
| } |
| }; |