| Index: src/ports/SkFontHost_mac.cpp
|
| diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
|
| index 4e573541ca2780b2a9383a9e471a1cb294317e58..a63152817a684e702aaec932d7627ceece2804b7 100755
|
| --- a/src/ports/SkFontHost_mac.cpp
|
| +++ b/src/ports/SkFontHost_mac.cpp
|
| @@ -450,16 +450,16 @@ static SkFontID CTFontRef_to_SkFontID(CTFontRef fontRef) {
|
| class SkTypeface_Mac : public SkTypeface {
|
| public:
|
| SkTypeface_Mac(const SkFontStyle& fs, SkFontID fontID, bool isFixedPitch,
|
| - CTFontRef fontRef, const char name[], bool isLocalStream)
|
| + CTFontRef fontRef, const char requestedName[], bool isLocalStream)
|
| : SkTypeface(fs, fontID, isFixedPitch)
|
| - , fName(name)
|
| + , fRequestedName(requestedName)
|
| , fFontRef(fontRef) // caller has already called CFRetain for us
|
| , fIsLocalStream(isLocalStream)
|
| {
|
| SkASSERT(fontRef);
|
| }
|
|
|
| - SkString fName;
|
| + SkString fRequestedName;
|
| AutoCFRelease<CTFontRef> fFontRef;
|
|
|
| protected:
|
| @@ -586,16 +586,17 @@ SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef fontRef) {
|
| return face;
|
| }
|
|
|
| -struct NameStyleRec {
|
| - const char* fName;
|
| - SkFontStyle fStyle;
|
| +struct NameStyle {
|
| + const char* fName;
|
| + SkFontStyle fStyle;
|
| };
|
|
|
| -static bool FindByNameStyle(SkTypeface* face, const SkFontStyle& style, void* ctx) {
|
| - const SkTypeface_Mac* mface = reinterpret_cast<SkTypeface_Mac*>(face);
|
| - const NameStyleRec* rec = reinterpret_cast<const NameStyleRec*>(ctx);
|
| +static bool find_by_NameStyle(SkTypeface* cachedFace, const SkFontStyle& cachedStyle, void* ctx) {
|
| + const SkTypeface_Mac* cachedMacFace = static_cast<SkTypeface_Mac*>(cachedFace);
|
| + const NameStyle* requested = static_cast<const NameStyle*>(ctx);
|
|
|
| - return rec->fStyle == style && mface->fName.equals(rec->fName);
|
| + return cachedStyle == requested->fStyle
|
| + && cachedMacFace->fRequestedName.equals(requested->fName);
|
| }
|
|
|
| static const char* map_css_names(const char* name) {
|
| @@ -2016,25 +2017,14 @@ static int compute_metric(const SkFontStyle& a, const SkFontStyle& b) {
|
| sqr((a.isItalic() != b.isItalic()) * 900);
|
| }
|
|
|
| -struct NameFontStyleRec {
|
| - SkString fFamilyName;
|
| - SkFontStyle fFontStyle;
|
| -};
|
| -
|
| -static bool nameFontStyleProc(SkTypeface* face, const SkFontStyle&, void* ctx) {
|
| - SkTypeface_Mac* macFace = (SkTypeface_Mac*)face;
|
| - const NameFontStyleRec* rec = (const NameFontStyleRec*)ctx;
|
| -
|
| - return macFace->fontStyle() == rec->fFontStyle &&
|
| - macFace->fName == rec->fFamilyName;
|
| -}
|
| -
|
| static SkTypeface* createFromDesc(CFStringRef cfFamilyName, CTFontDescriptorRef desc) {
|
| - NameFontStyleRec rec;
|
| - CFStringToSkString(cfFamilyName, &rec.fFamilyName);
|
| - rec.fFontStyle = fontstyle_from_descriptor(desc, NULL);
|
| + NameStyle cacheRequest;
|
| + SkString skFamilyName;
|
| + CFStringToSkString(cfFamilyName, &skFamilyName);
|
| + cacheRequest.fName = skFamilyName.c_str();
|
| + cacheRequest.fStyle = fontstyle_from_descriptor(desc, NULL);
|
|
|
| - SkTypeface* face = SkTypefaceCache::FindByProcAndRef(nameFontStyleProc, &rec);
|
| + SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_NameStyle, &cacheRequest);
|
| if (face) {
|
| return face;
|
| }
|
| @@ -2051,16 +2041,13 @@ static SkTypeface* createFromDesc(CFStringRef cfFamilyName, CTFontDescriptorRef
|
| return NULL;
|
| }
|
|
|
| - SkString str;
|
| - CFStringToSkString(cfFamilyName, &str);
|
| -
|
| bool isFixedPitch;
|
| AutoCFRelease<CTFontDescriptorRef> ctFontDesc(CTFontCopyFontDescriptor(ctFont));
|
| (void)fontstyle_from_descriptor(ctFontDesc, &isFixedPitch);
|
| SkFontID fontID = CTFontRef_to_SkFontID(ctFont);
|
|
|
| - face = SkNEW_ARGS(SkTypeface_Mac, (rec.fFontStyle, fontID, isFixedPitch,
|
| - ctFont, str.c_str(), false));
|
| + face = SkNEW_ARGS(SkTypeface_Mac, (cacheRequest.fStyle, fontID, isFixedPitch,
|
| + ctFont, skFamilyName.c_str(), false));
|
| SkTypefaceCache::Add(face, face->fontStyle());
|
| return face;
|
| }
|
| @@ -2241,8 +2228,8 @@ protected:
|
| familyName = FONT_DEFAULT_NAME;
|
| }
|
|
|
| - NameStyleRec rec = { familyName, style };
|
| - SkTypeface* face = SkTypefaceCache::FindByProcAndRef(FindByNameStyle, &rec);
|
| + NameStyle cacheRequest = { familyName, style };
|
| + SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_by_NameStyle, &cacheRequest);
|
|
|
| if (NULL == face) {
|
| face = NewFromName(familyName, style);
|
|
|