From b4ef33a9ccf66b0883cd3cc5c004afd98342ca10 Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Mon, 19 Nov 2012 10:22:10 +0000 Subject: [PATCH] bug 811312 - part 2 - fold CGFontEntry subclass into MacOSFontEntry. r=jdaggett --- gfx/thebes/gfxMacPlatformFontList.h | 63 ++++++---------- gfx/thebes/gfxMacPlatformFontList.mm | 109 ++++++++++++--------------- 2 files changed, 70 insertions(+), 102 deletions(-) diff --git a/gfx/thebes/gfxMacPlatformFontList.h b/gfx/thebes/gfxMacPlatformFontList.h index ba1293d10988..c4f55a67c7cc 100644 --- a/gfx/thebes/gfxMacPlatformFontList.h +++ b/gfx/thebes/gfxMacPlatformFontList.h @@ -26,48 +26,17 @@ class MacOSFontEntry : public gfxFontEntry public: friend class gfxMacPlatformFontList; - virtual ~MacOSFontEntry() { - ::CGFontRelease(mFontRef); - } - - virtual CGFontRef GetFontRef() = 0; - - virtual nsresult GetFontTable(uint32_t aTableTag, - FallibleTArray& aBuffer) = 0; - - nsresult ReadCMAP(); - - bool RequiresAATLayout() const { return mRequiresAAT; } - - bool IsCFF(); - -protected: MacOSFontEntry(const nsAString& aPostscriptName, int32_t aWeight, gfxFontFamily *aFamily, bool aIsStandardFace = false); - virtual gfxFont* CreateFontInstance(const gfxFontStyle *aFontStyle, bool aNeedsBold); - - virtual bool HasFontTable(uint32_t aTableTag) = 0; - - CGFontRef mFontRef; // owning reference to the CGFont, released on destruction - - bool mFontRefInitialized; - bool mRequiresAAT; - bool mIsCFF; - bool mIsCFFInitialized; -}; - -// concrete subclass of MacOSFontEntry: CGFontEntry for 10.6+ -class CGFontEntry : public MacOSFontEntry -{ -public: - CGFontEntry(const nsAString& aPostscriptName, int32_t aWeight, - gfxFontFamily *aFamily, bool aIsStandardFace = false); - // for use with data fonts - CGFontEntry(const nsAString& aPostscriptName, CGFontRef aFontRef, - uint16_t aWeight, uint16_t aStretch, uint32_t aItalicStyle, - bool aIsUserFont, bool aIsLocal); + MacOSFontEntry(const nsAString& aPostscriptName, CGFontRef aFontRef, + uint16_t aWeight, uint16_t aStretch, uint32_t aItalicStyle, + bool aIsUserFont, bool aIsLocal); + + virtual ~MacOSFontEntry() { + ::CGFontRelease(mFontRef); + } virtual CGFontRef GetFontRef(); @@ -77,8 +46,23 @@ public: virtual void SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf, FontListSizes* aSizes) const; + nsresult ReadCMAP(); + + bool RequiresAATLayout() const { return mRequiresAAT; } + + bool IsCFF(); + protected: + virtual gfxFont* CreateFontInstance(const gfxFontStyle *aFontStyle, bool aNeedsBold); + virtual bool HasFontTable(uint32_t aTableTag); + + CGFontRef mFontRef; // owning reference to the CGFont, released on destruction + + bool mFontRefInitialized; + bool mRequiresAAT; + bool mIsCFF; + bool mIsCFFInitialized; }; class gfxMacPlatformFontList : public gfxPlatformFontList { @@ -113,9 +97,6 @@ private: // special case font faces treated as font families (set via prefs) void InitSingleFaceList(); - gfxFontEntry* MakePlatformFontCG(const gfxProxyFontEntry *aProxyEntry, - const uint8_t *aFontData, uint32_t aLength); - static void ATSNotification(ATSFontNotificationInfoRef aInfo, void* aUserArg); // search fonts system-wide for a given character, null otherwise diff --git a/gfx/thebes/gfxMacPlatformFontList.mm b/gfx/thebes/gfxMacPlatformFontList.mm index 3205a2083c34..63ff2334a77e 100644 --- a/gfx/thebes/gfxMacPlatformFontList.mm +++ b/gfx/thebes/gfxMacPlatformFontList.mm @@ -145,23 +145,8 @@ static NSString* GetNSStringForString(const nsAString& aSrc) #endif // PR_LOGGING -/* MacOSFontEntry - abstract superclass for CG font entries */ #pragma mark- -MacOSFontEntry::MacOSFontEntry(const nsAString& aPostscriptName, - int32_t aWeight, - gfxFontFamily *aFamily, - bool aIsStandardFace) - : gfxFontEntry(aPostscriptName, aFamily, aIsStandardFace), - mFontRef(NULL), - mFontRefInitialized(false), - mRequiresAAT(false), - mIsCFF(false), - mIsCFFInitialized(false) -{ - mWeight = aWeight; -} - // Complex scripts will not render correctly unless appropriate AAT or OT // layout tables are present. // For OpenType, we also check that the GSUB table supports the relevant @@ -356,23 +341,31 @@ MacOSFontEntry::IsCFF() return mIsCFF; } -/* CGFontEntry - used on Mac OS X 10.6+ */ -#pragma mark- - -CGFontEntry::CGFontEntry(const nsAString& aPostscriptName, - int32_t aWeight, - gfxFontFamily *aFamily, - bool aIsStandardFace) - : MacOSFontEntry(aPostscriptName, aWeight, aFamily, aIsStandardFace) +MacOSFontEntry::MacOSFontEntry(const nsAString& aPostscriptName, + int32_t aWeight, + gfxFontFamily *aFamily, + bool aIsStandardFace) + : gfxFontEntry(aPostscriptName, aFamily, aIsStandardFace), + mFontRef(NULL), + mFontRefInitialized(false), + mRequiresAAT(false), + mIsCFF(false), + mIsCFFInitialized(false) { + mWeight = aWeight; } -CGFontEntry::CGFontEntry(const nsAString& aPostscriptName, - CGFontRef aFontRef, - uint16_t aWeight, uint16_t aStretch, - uint32_t aItalicStyle, - bool aIsUserFont, bool aIsLocal) - : MacOSFontEntry(aPostscriptName, aWeight, nullptr, false) +MacOSFontEntry::MacOSFontEntry(const nsAString& aPostscriptName, + CGFontRef aFontRef, + uint16_t aWeight, uint16_t aStretch, + uint32_t aItalicStyle, + bool aIsUserFont, bool aIsLocal) + : gfxFontEntry(aPostscriptName, nullptr, false), + mFontRef(NULL), + mFontRefInitialized(false), + mRequiresAAT(false), + mIsCFF(false), + mIsCFFInitialized(false) { mFontRef = aFontRef; mFontRefInitialized = true; @@ -387,7 +380,7 @@ CGFontEntry::CGFontEntry(const nsAString& aPostscriptName, } CGFontRef -CGFontEntry::GetFontRef() +MacOSFontEntry::GetFontRef() { if (!mFontRefInitialized) { mFontRefInitialized = true; @@ -398,7 +391,8 @@ CGFontEntry::GetFontRef() } nsresult -CGFontEntry::GetFontTable(uint32_t aTableTag, FallibleTArray& aBuffer) +MacOSFontEntry::GetFontTable(uint32_t aTableTag, + FallibleTArray& aBuffer) { nsAutoreleasePool localPool; @@ -426,7 +420,7 @@ CGFontEntry::GetFontTable(uint32_t aTableTag, FallibleTArray& aBuffer) } bool -CGFontEntry::HasFontTable(uint32_t aTableTag) +MacOSFontEntry::HasFontTable(uint32_t aTableTag) { nsAutoreleasePool localPool; @@ -445,8 +439,8 @@ CGFontEntry::HasFontTable(uint32_t aTableTag) } void -CGFontEntry::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf, - FontListSizes* aSizes) const +MacOSFontEntry::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf, + FontListSizes* aSizes) const { aSizes->mFontListSize += aMallocSizeOf(this); SizeOfExcludingThis(aMallocSizeOf, aSizes); @@ -547,8 +541,8 @@ gfxMacFontFamily::FindStyleVariations() // create a font entry MacOSFontEntry *fontEntry = - new CGFontEntry(postscriptFontName, cssWeight, this, - isStandardFace); + new MacOSFontEntry(postscriptFontName, cssWeight, this, + isStandardFace); if (!fontEntry) { break; } @@ -973,39 +967,31 @@ gfxMacPlatformFontList::LookupLocalFont(const gfxProxyFontEntry *aProxyEntry, NS_ASSERTION(w >= 100 && w <= 900, "bogus font weight value!"); newFontEntry = - new CGFontEntry(aFontName, fontRef, - w, aProxyEntry->mStretch, - aProxyEntry->mItalic ? - NS_FONT_STYLE_ITALIC : NS_FONT_STYLE_NORMAL, - true, true); + new MacOSFontEntry(aFontName, fontRef, + w, aProxyEntry->mStretch, + aProxyEntry->mItalic ? + NS_FONT_STYLE_ITALIC : NS_FONT_STYLE_NORMAL, + true, true); } else { newFontEntry = - new CGFontEntry(aFontName, fontRef, - 400, 0, NS_FONT_STYLE_NORMAL, - false, false); + new MacOSFontEntry(aFontName, fontRef, + 400, 0, NS_FONT_STYLE_NORMAL, + false, false); } ::CFRelease(fontRef); return newFontEntry; } -gfxFontEntry* -gfxMacPlatformFontList::MakePlatformFont(const gfxProxyFontEntry *aProxyEntry, - const uint8_t *aFontData, - uint32_t aLength) -{ - return MakePlatformFontCG(aProxyEntry, aFontData, aLength); -} - static void ReleaseData(void *info, const void *data, size_t size) { NS_Free((void*)data); } gfxFontEntry* -gfxMacPlatformFontList::MakePlatformFontCG(const gfxProxyFontEntry *aProxyEntry, - const uint8_t *aFontData, - uint32_t aLength) +gfxMacPlatformFontList::MakePlatformFont(const gfxProxyFontEntry *aProxyEntry, + const uint8_t *aFontData, + uint32_t aLength) { NS_ASSERTION(aFontData, "MakePlatformFont called with null data"); @@ -1030,12 +1016,13 @@ gfxMacPlatformFontList::MakePlatformFontCG(const gfxProxyFontEntry *aProxyEntry, return nullptr; } - nsAutoPtr - newFontEntry(new CGFontEntry(uniqueName, fontRef, w, - aProxyEntry->mStretch, - aProxyEntry->mItalic ? - NS_FONT_STYLE_ITALIC : NS_FONT_STYLE_NORMAL, - true, false)); + nsAutoPtr + newFontEntry(new MacOSFontEntry(uniqueName, fontRef, w, + aProxyEntry->mStretch, + aProxyEntry->mItalic ? + NS_FONT_STYLE_ITALIC : + NS_FONT_STYLE_NORMAL, + true, false)); ::CFRelease(fontRef); // if succeeded and font cmap is good, return the new font