mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
Bug 541924: fix regression in handling bad-underline fonts blacklist on Windows. r=jdaggett
This commit is contained in:
parent
9a4397fa5b
commit
11b4d1ada5
@ -354,6 +354,8 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
PRBool IsBadUnderlineFamily() const { return mIsBadUnderlineFamily; }
|
||||
|
||||
// sort available fonts to put preferred (standard) faces towards the end
|
||||
void SortAvailableFonts();
|
||||
|
||||
|
@ -121,10 +121,14 @@ gfxFT2FontList::AppendFacesFromFontFile(const PRUnichar *aFileName)
|
||||
if (!family) {
|
||||
family = new gfxFontFamily(name);
|
||||
mFontFamilies.Put(name, family);
|
||||
if (mBadUnderlineFamilyNames.GetEntry(name))
|
||||
family->SetBadUnderlineFamily();
|
||||
}
|
||||
family->AddFontEntry(fe);
|
||||
fe->SetFamily(family);
|
||||
family->SetHasStyles(PR_TRUE);
|
||||
if (family->IsBadUnderlineFamily())
|
||||
fe->mIsBadUnderlineFont = PR_TRUE;
|
||||
#ifdef PR_LOGGING
|
||||
if (LOG_ENABLED()) {
|
||||
LOG(("(fontinit) added (%s) to family (%s)"
|
||||
@ -203,8 +207,6 @@ gfxFT2FontList::InitFontList()
|
||||
mCodepointsWithNoFonts.SetRange(0x7f,0x9f); // C1 controls
|
||||
|
||||
FindFonts();
|
||||
|
||||
InitBadUnderlineList();
|
||||
}
|
||||
|
||||
struct FullFontNameSearch {
|
||||
|
@ -617,8 +617,6 @@ gfxGDIFontList::InitFontList()
|
||||
|
||||
GetFontSubstitutes();
|
||||
|
||||
InitBadUnderlineList();
|
||||
|
||||
StartLoader(kDelayBeforeLoadingFonts, kIntervalBetweenLoadingFonts);
|
||||
}
|
||||
|
||||
@ -643,6 +641,8 @@ gfxGDIFontList::EnumFontFamExProc(ENUMLOGFONTEXW *lpelfe,
|
||||
nsDependentString faceName(lf.lfFaceName);
|
||||
nsRefPtr<gfxFontFamily> family = new GDIFontFamily(faceName);
|
||||
fontList->mFontFamilies.Put(name, family);
|
||||
if (fontList->mBadUnderlineFamilyNames.GetEntry(name))
|
||||
family->SetBadUnderlineFamily();
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -648,6 +648,10 @@ gfxMacPlatformFontList::InitFontList()
|
||||
// add the family entry to the hash table
|
||||
ToLowerCase(availableFamilyName);
|
||||
mFontFamilies.Put(availableFamilyName, familyEntry);
|
||||
|
||||
// check the bad underline blacklist
|
||||
if (mBadUnderlineFamilyNames.GetEntry(availableFamilyName))
|
||||
familyEntry->SetBadUnderlineFamily();
|
||||
}
|
||||
|
||||
InitSingleFaceList();
|
||||
@ -670,8 +674,6 @@ gfxMacPlatformFontList::InitFontList()
|
||||
SetFixedPitch(NS_LITERAL_STRING("Monaco"));
|
||||
}
|
||||
|
||||
InitBadUnderlineList();
|
||||
|
||||
// start the delayed cmap loader
|
||||
StartLoader(kDelayBeforeLoadingCmaps, kIntervalBetweenLoadingCmaps);
|
||||
}
|
||||
|
@ -111,6 +111,9 @@ gfxPlatformFontList::gfxPlatformFontList()
|
||||
mOtherFamilyNamesInitialized = PR_FALSE;
|
||||
mPrefFonts.Init(10);
|
||||
|
||||
mBadUnderlineFamilyNames.Init(10);
|
||||
LoadBadUnderlineList();
|
||||
|
||||
// pref changes notification setup
|
||||
gfxFontListPrefObserver *observer = new gfxFontListPrefObserver();
|
||||
if (observer) {
|
||||
@ -202,19 +205,15 @@ gfxPlatformFontList::SetFixedPitch(const nsAString& aFamilyName)
|
||||
}
|
||||
|
||||
void
|
||||
gfxPlatformFontList::InitBadUnderlineList()
|
||||
gfxPlatformFontList::LoadBadUnderlineList()
|
||||
{
|
||||
nsAutoTArray<nsString, 10> blacklist;
|
||||
gfxFontUtils::GetPrefsFontList("font.blacklist.underline_offset", blacklist);
|
||||
PRUint32 numFonts = blacklist.Length();
|
||||
for (PRUint32 i = 0; i < numFonts; i++) {
|
||||
PRBool found;
|
||||
nsAutoString key;
|
||||
GenerateFontListKey(blacklist[i], key);
|
||||
|
||||
gfxFontFamily *familyEntry = mFontFamilies.GetWeak(key, &found);
|
||||
if (familyEntry)
|
||||
familyEntry->SetBadUnderlineFamily();
|
||||
mBadUnderlineFamilyNames.PutEntry(key);
|
||||
}
|
||||
}
|
||||
|
||||
@ -433,6 +432,8 @@ gfxPlatformFontList::AddOtherFamilyName(gfxFontFamily *aFamilyEntry, nsAString&
|
||||
PR_LOG(gFontListLog, PR_LOG_DEBUG, ("(fontlist-otherfamily) canonical family: %s, other family: %s\n",
|
||||
NS_ConvertUTF16toUTF8(aFamilyEntry->Name()).get(),
|
||||
NS_ConvertUTF16toUTF8(aOtherFamilyName).get()));
|
||||
if (mBadUnderlineFamilyNames.GetEntry(key))
|
||||
aFamilyEntry->SetBadUnderlineFamily();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -138,8 +138,8 @@ protected:
|
||||
// commonly used fonts for which the name table should be loaded at startup
|
||||
virtual void PreloadNamesList();
|
||||
|
||||
// initialize the bad underline blacklist from pref.
|
||||
virtual void InitBadUnderlineList();
|
||||
// load the bad underline blacklist from pref.
|
||||
void LoadBadUnderlineList();
|
||||
|
||||
// explicitly set fixed-pitch flag for all faces
|
||||
void SetFixedPitch(const nsAString& aFamilyName);
|
||||
@ -181,6 +181,8 @@ protected:
|
||||
// flag set after InitOtherFamilyNames is called upon first name lookup miss
|
||||
PRPackedBool mOtherFamilyNamesInitialized;
|
||||
|
||||
nsTHashtable<nsStringHashKey> mBadUnderlineFamilyNames;
|
||||
|
||||
// data used as part of the font cmap loading process
|
||||
nsTArray<nsRefPtr<gfxFontFamily> > mFontFamiliesToLoad;
|
||||
PRUint32 mStartIndex;
|
||||
|
Loading…
Reference in New Issue
Block a user