#417: remove 10.7+ font handling and tune up gfx/thebes/ etc.

This commit is contained in:
Cameron Kaiser 2017-07-21 16:46:29 -07:00
parent 07656dbb88
commit e45c857b4f
3 changed files with 43 additions and 25 deletions

View File

@ -1720,6 +1720,8 @@ gfxFontFamily::ReadFaceNames(gfxPlatformFontList *aPlatformFontList,
}
#endif
#ifdef __LP64__
// Can't run on 10.4-10.6.
if (!mOtherFamilyNamesInitialized &&
aFontInfoData &&
aFontInfoData->mLoadOtherNames &&
@ -1742,6 +1744,7 @@ gfxFontFamily::ReadFaceNames(gfxPlatformFontList *aPlatformFontList,
(mFaceNamesInitialized || !aNeedFullnamePostscriptNames)) {
return;
}
#endif
FindStyleVariations(aFontInfoData);

View File

@ -223,18 +223,18 @@ gfxMacFont::InitMetrics()
{
ByteCount tableSize;
if (::ATSFontGetTable(myATSFont,
if (MOZ_UNLIKELY(::ATSFontGetTable(myATSFont,
TRUETYPE_TAG('h','e','a','d'),
0, 0, NULL, &tableSize) != noErr)
0, 0, NULL, &tableSize) != noErr))
return;
CFMutableDataRef data = ::CFDataCreateMutable(kCFAllocatorDefault,
tableSize);
if (!data) return;
if (MOZ_UNLIKELY(!data)) return;
::CFDataIncreaseLength(data, tableSize);
if (::ATSFontGetTable(myATSFont,
if (MOZ_UNLIKELY(::ATSFontGetTable(myATSFont,
TRUETYPE_TAG('h','e','a','d'),
0, tableSize, ::CFDataGetMutableBytePtr(data),
&tableSize) != noErr) {
&tableSize) != noErr)) {
::CFRelease(data);
return;
}
@ -253,7 +253,7 @@ gfxMacFont::InitMetrics()
upem = ::CGFontGetUnitsPerEm(mCGFont);
}
if (upem < 16 || upem > 16384) {
if (MOZ_UNLIKELY(upem < 16 || upem > 16384)) {
// See http://www.microsoft.com/typography/otspec/head.htm
#ifdef DEBUG
char warnBuf[1024];
@ -294,7 +294,7 @@ gfxMacFont::InitMetrics()
err = ::ATSFontGetHorizontalMetrics(myATSFont, kATSOptionFlagsDefault,
&atsMetrics);
if (err != noErr) {
if (MOZ_UNLIKELY(err != noErr)) {
NS_WARNING("could not get CGFontGetXHeight, no ATS fallback");
return; // just fail -- Cameron Kludge
}
@ -330,7 +330,7 @@ gfxMacFont::InitMetrics()
err = ::ATSFontGetHorizontalMetrics(myATSFont,
kATSOptionFlagsDefault,
&atsMetrics);
if (err != noErr) {
if (MOZ_UNLIKELY(err != noErr)) {
NS_WARNING("could not get CGFontGetXHeight again, no ATS fallback");
return; // just fail -- Cameron Kludge
}
@ -353,15 +353,15 @@ gfxMacFont::InitMetrics()
CFDataRef cmap;
{
ByteCount tableSize;
if (::ATSFontGetTable(myATSFont, TRUETYPE_TAG('c','m','a','p'), 0, 0, NULL,
&tableSize) != noErr) return;
if (MOZ_UNLIKELY(::ATSFontGetTable(myATSFont, TRUETYPE_TAG('c','m','a','p'), 0, 0, NULL,
&tableSize) != noErr)) return;
CFMutableDataRef data = ::CFDataCreateMutable(kCFAllocatorDefault,
tableSize);
if (!data) return;
if (MOZ_UNLIKELY(!data)) return;
::CFDataIncreaseLength(data, tableSize);
if (::ATSFontGetTable(myATSFont, TRUETYPE_TAG('c','m','a','p'),
if (MOZ_UNLIKELY(::ATSFontGetTable(myATSFont, TRUETYPE_TAG('c','m','a','p'),
0, tableSize,
::CFDataGetMutableBytePtr(data), &tableSize) != noErr)
::CFDataGetMutableBytePtr(data), &tableSize) != noErr))
{ ::CFRelease(data); return; }
cmap = data;
}
@ -512,7 +512,7 @@ static_cast<MacOSFontEntry*>(GetFontEntry())->GetATSFontRef();
err = ::ATSFontGetHorizontalMetrics(aFontRef, kATSOptionFlagsDefault,
&atsMetrics);
if (err != noErr) {
if (MOZ_UNLIKELY(err != noErr)) {
#ifdef DEBUG
char warnBuf[1024];
sprintf(warnBuf, "Bad font metrics for: %s err: %8.8x",

View File

@ -512,7 +512,7 @@ MacOSFontEntry::GetFontTable(uint32_t aTag)
#endif
OSStatus status = ::ATSFontGetTable(fontRef, aTag, 0, 0, 0,
&dataLength);
if (status != noErr) return nullptr;
if (MOZ_UNLIKELY(status != noErr)) return nullptr;
}
// Taking advantage of bridging CFMutableDataRef to CFDataRef.
@ -521,9 +521,9 @@ MacOSFontEntry::GetFontTable(uint32_t aTag)
if (!dataRef) return nullptr;
::CFDataIncreaseLength(dataRef, dataLength); // paranoia
if(::ATSFontGetTable(fontRef, aTag, 0, dataLength,
if(MOZ_UNLIKELY(::ATSFontGetTable(fontRef, aTag, 0, dataLength,
::CFDataGetMutableBytePtr(dataRef),
&dataLength) != noErr) {
&dataLength) != noErr)) {
::CFRelease(dataRef);
return nullptr;
}
@ -612,10 +612,10 @@ MacOSFontEntry::HasFontTable(uint32_t aTableTag)
ByteCount sizer;
if(::ATSFontGetTableDirectory(fontRef, 0, NULL, &sizer) == noErr) {
if(MOZ_LIKELY(::ATSFontGetTableDirectory(fontRef, 0, NULL, &sizer) == noErr)) {
// If the header is abnormal, try the old, slower way in case this
// is a gap in our algorithm.
if (sizer <= 12 || ((sizer-12) % 16) || sizer >= 1024) {
if (MOZ_UNLIKELY(sizer <= 12 || ((sizer-12) % 16) || sizer >= 1024)) {
fprintf(stderr, "Warning: TenFourFox found "
"abnormal font table dir in %s (%i).\n",
NS_ConvertUTF16toUTF8(mName).get(), sizer);
@ -631,8 +631,8 @@ MacOSFontEntry::HasFontTable(uint32_t aTableTag)
fprintf(stderr, "Size of %s font table directory: %i\nTables: ",
NS_ConvertUTF16toUTF8(mName).get(), mFontTableDir.Length());
#endif
if (::ATSFontGetTableDirectory(fontRef, mFontTableDirSize,
reinterpret_cast<void *>(mFontTableDir.Elements()), &sizer) == noErr) {
if (MOZ_LIKELY(::ATSFontGetTableDirectory(fontRef, mFontTableDirSize,
reinterpret_cast<void *>(mFontTableDir.Elements()), &sizer) == noErr)) {
// Push to platform.
if (!mIsDataUserFont || mIsLocalUserFont)
@ -1175,6 +1175,7 @@ const CGFloat kTextDisplayCrossover = 20.0; // use text family below this size
void
gfxMacPlatformFontList::InitSystemFonts()
{
#ifdef __LP64__
// system font under 10.11 are two distinct families for text/display sizes
if (nsCocoaFeatures::OnElCapitanOrLater()) {
mUseSizeSensitiveSystemFont = true;
@ -1209,6 +1210,16 @@ gfxMacPlatformFontList::InitSystemFonts()
"system text/display font size switch point is not as expected!");
#endif
}
#else // LP64
// Simplified version for 10.4-10.6
NSFont* sys = [NSFont systemFontOfSize: 0.0];
NSString* textFamilyName = GetRealFamilyName(sys);
nsAutoString familyName;
nsCocoaUtils::GetStringForNSString(textFamilyName, familyName);
mSystemTextFontFamily = FindSystemFontFamily(familyName);
NS_ASSERTION(mSystemTextFontFamily, "null system display font family");
#endif // LP64
#ifdef DEBUG
// different system font API's always map to the same family under OSX, so
@ -1583,7 +1594,7 @@ gfxMacPlatformFontList::MakePlatformFont(const nsAString& aFontName,
&containerRef);
mATSGeneration = ::ATSGetGeneration();
if (err != noErr) {
if (MOZ_UNLIKELY(err != noErr)) {
#if DEBUG
char warnBuf[1024];
sprintf(warnBuf, "downloaded font error, ATSFontActivateFromMemory err: %d",
@ -1596,7 +1607,7 @@ gfxMacPlatformFontList::MakePlatformFont(const nsAString& aFontName,
// ignoring containers with multiple fonts, use the first face only for now
err = ::ATSFontFindFromContainer(containerRef, kATSOptionFlagsDefault, 1,
&fontRef, NULL);
if (err != noErr) {
if (MOZ_UNLIKELY(err != noErr)) {
#if DEBUG
char warnBuf[1024];
sprintf(warnBuf, "downloaded font error, ATSFontFindFromContainer err: %d",
@ -1611,7 +1622,7 @@ gfxMacPlatformFontList::MakePlatformFont(const nsAString& aFontName,
OSStatus err;
NSString *psname = NULL;
err = ::ATSFontGetPostScriptName(fontRef, kATSOptionFlagsDefault, (CFStringRef*) (&psname));
if (err == noErr) {
if (MOZ_LIKELY(err == noErr)) {
#if(0)
fprintf(stderr, "Trying: %s.\n", [psname UTF8String]);
#endif
@ -1679,7 +1690,7 @@ gfxMacPlatformFontList::MakePlatformFont(const nsAString& aFontName,
containerRef, true, false);
// if succeeded and font cmap is good, return the new font
if (newFontEntry->mIsValid && NS_SUCCEEDED(newFontEntry->ReadCMAP())) {
if (MOZ_LIKELY(newFontEntry->mIsValid && NS_SUCCEEDED(newFontEntry->ReadCMAP()))) {
return newFontEntry;
}
@ -1753,10 +1764,12 @@ gfxMacPlatformFontList::FindFamily(const nsAString& aFamily, gfxFontStyle* aStyl
{
// search for special system font name, -apple-system
if (aFamily.EqualsLiteral(kSystemFont_system)) {
#ifdef __LP64__
if (mUseSizeSensitiveSystemFont &&
aStyle && (aStyle->size * aDevToCssSize) >= kTextDisplayCrossover) {
return mSystemDisplayFontFamily;
}
#endif
return mSystemTextFontFamily;
}
@ -1847,11 +1860,13 @@ public:
virtual ~MacFontInfo() {}
virtual void Load() {
#ifdef __LP64__
nsAutoreleasePool localPool;
// bug 975460 - async font loader crashes sometimes under 10.6, disable
if (nsCocoaFeatures::OnLionOrLater()) {
FontInfoData::Load();
}
#endif
}
// loads font data for all members of a given family