| Index: src/ports/SkFontHost_mac.cpp
|
| diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
|
| index e00b87b59b4b6d62a8e13c8dc80cc8444ad435fa..77bf4b873b7fd3e21ab2e7ed29fd321c891326f6 100755
|
| --- a/src/ports/SkFontHost_mac.cpp
|
| +++ b/src/ports/SkFontHost_mac.cpp
|
| @@ -426,21 +426,23 @@ static SkTypeface::Style fontstyle2stylebits(const SkFontStyle& fs) {
|
| class SkTypeface_Mac : public SkTypeface {
|
| public:
|
| SkTypeface_Mac(SkTypeface::Style style, SkFontID fontID, bool isFixedPitch,
|
| - CTFontRef fontRef, const char name[])
|
| + CTFontRef fontRef, const char name[], bool isLocalStream)
|
| : SkTypeface(style, fontID, isFixedPitch)
|
| , fName(name)
|
| , fFontRef(fontRef) // caller has already called CFRetain for us
|
| , fFontStyle(stylebits2fontstyle(style))
|
| + , fIsLocalStream(isLocalStream)
|
| {
|
| SkASSERT(fontRef);
|
| }
|
|
|
| SkTypeface_Mac(const SkFontStyle& fs, SkFontID fontID, bool isFixedPitch,
|
| - CTFontRef fontRef, const char name[])
|
| + CTFontRef fontRef, const char name[], bool isLocalStream)
|
| : SkTypeface(fontstyle2stylebits(fs), fontID, isFixedPitch)
|
| , fName(name)
|
| , fFontRef(fontRef) // caller has already called CFRetain for us
|
| , fFontStyle(fs)
|
| + , fIsLocalStream(isLocalStream)
|
| {
|
| SkASSERT(fontRef);
|
| }
|
| @@ -469,17 +471,18 @@ protected:
|
| virtual int onCountGlyphs() const SK_OVERRIDE;
|
|
|
| private:
|
| + bool fIsLocalStream;
|
|
|
| typedef SkTypeface INHERITED;
|
| };
|
|
|
| -static SkTypeface* NewFromFontRef(CTFontRef fontRef, const char name[]) {
|
| +static SkTypeface* NewFromFontRef(CTFontRef fontRef, const char name[], bool isLocalStream) {
|
| SkASSERT(fontRef);
|
| bool isFixedPitch;
|
| SkTypeface::Style style = computeStyleBits(fontRef, &isFixedPitch);
|
| SkFontID fontID = CTFontRef_to_SkFontID(fontRef);
|
|
|
| - return new SkTypeface_Mac(style, fontID, isFixedPitch, fontRef, name);
|
| + return new SkTypeface_Mac(style, fontID, isFixedPitch, fontRef, name, isLocalStream);
|
| }
|
|
|
| static SkTypeface* NewFromName(const char familyName[], SkTypeface::Style theStyle) {
|
| @@ -524,7 +527,7 @@ static SkTypeface* NewFromName(const char familyName[], SkTypeface::Style theSty
|
| }
|
| }
|
|
|
| - return ctFont ? NewFromFontRef(ctFont, familyName) : NULL;
|
| + return ctFont ? NewFromFontRef(ctFont, familyName, false) : NULL;
|
| }
|
|
|
| static SkTypeface* GetDefaultFace() {
|
| @@ -557,7 +560,7 @@ SkTypeface* SkCreateTypefaceFromCTFont(CTFontRef fontRef) {
|
| if (face) {
|
| face->ref();
|
| } else {
|
| - face = NewFromFontRef(fontRef, NULL);
|
| + face = NewFromFontRef(fontRef, NULL, false);
|
| SkTypefaceCache::Add(face, face->style());
|
| // NewFromFontRef doesn't retain the parameter, but the typeface it
|
| // creates does release it in its destructor, so we balance that with
|
| @@ -1438,7 +1441,7 @@ static SkTypeface* create_from_dataProvider(CGDataProviderRef provider) {
|
| return NULL;
|
| }
|
| CTFontRef ct = CTFontCreateWithGraphicsFont(cg, 0, NULL, NULL);
|
| - return cg ? SkCreateTypefaceFromCTFont(ct) : NULL;
|
| + return ct ? NewFromFontRef(ct, NULL, true) : NULL;
|
| }
|
|
|
| // Web fonts added to the the CTFont registry do not return their character set.
|
| @@ -1908,8 +1911,7 @@ void SkTypeface_Mac::onGetFontDescriptor(SkFontDescriptor* desc,
|
| desc->setFamilyName(get_str(CTFontCopyFamilyName(fFontRef), &tmpStr));
|
| desc->setFullName(get_str(CTFontCopyFullName(fFontRef), &tmpStr));
|
| desc->setPostscriptName(get_str(CTFontCopyPostScriptName(fFontRef), &tmpStr));
|
| - // TODO: need to add support for local-streams (here and openStream)
|
| - *isLocalStream = false;
|
| + *isLocalStream = fIsLocalStream;
|
| }
|
|
|
| int SkTypeface_Mac::onCharsToGlyphs(const void* chars, Encoding encoding,
|
| @@ -2128,7 +2130,7 @@ static SkTypeface* createFromDesc(CFStringRef cfFamilyName,
|
| SkFontID fontID = CTFontRef_to_SkFontID(ctFont);
|
|
|
| face = SkNEW_ARGS(SkTypeface_Mac, (rec.fFontStyle, fontID, isFixedPitch,
|
| - ctFont, str.c_str()));
|
| + ctFont, str.c_str(), false));
|
| SkTypefaceCache::Add(face, face->style());
|
| return face;
|
| }
|
|
|