Chromium Code Reviews| Index: src/ports/SkFontConfigParser_android.cpp | 
| diff --git a/src/ports/SkFontConfigParser_android.cpp b/src/ports/SkFontConfigParser_android.cpp | 
| index cc2ca8cad92f7fe4fcc7e4e66a0c24833081635a..5bc9b346ebc57d8589496b5ab2584961eb2ab040 100644 | 
| --- a/src/ports/SkFontConfigParser_android.cpp | 
| +++ b/src/ports/SkFontConfigParser_android.cpp | 
| @@ -32,15 +32,19 @@ | 
| * can read these variables that are relevant to the current parsing. | 
| */ | 
| struct FamilyData { | 
| - FamilyData(XML_Parser *parserRef, SkTDArray<FontFamily*> &familiesRef) : | 
| - parser(parserRef), | 
| - families(familiesRef), | 
| - currentFamily(NULL), | 
| - currentFontInfo(NULL), | 
| - currentTag(NO_TAG) {}; | 
| + FamilyData(XML_Parser *parserRef, | 
| + SkTDArray<FontFamily*> &familiesRef, | 
| + uint32_t ignoredVariants) | 
| + : parser(parserRef) | 
| + , families(familiesRef) | 
| + , fIgnoredVariants(ignoredVariants) | 
| + , currentFamily(NULL) | 
| + , currentFontInfo(NULL) | 
| + , currentTag(NO_TAG) {}; | 
| XML_Parser *parser; // The expat parser doing the work | 
| SkTDArray<FontFamily*> &families; // The array that each family is put into as it is parsed | 
| + uint32_t fIgnoredVariants; // FontVariants which will be ignored. | 
| FontFamily *currentFamily; // The current family being created | 
| FontFileInfo *currentFontInfo; // The current fontInfo being created | 
| int currentTag; // A flag to indicate whether we're in nameset/fileset tags | 
| @@ -129,7 +133,13 @@ static void fontFileElementHandler(FamilyData *familyData, const char **attribut | 
| currentAttributeIndex += 2; | 
| } | 
| } | 
| - familyData->currentFontInfo = &newFileInfo; | 
| + | 
| + if (SkToBool(newFileInfo.fPaintOptions.getFontVariant() & familyData->fIgnoredVariants)) { | 
| + familyData->currentFamily->fFontFiles.pop_back(); | 
| + familyData->currentFontInfo = NULL; | 
| + } else { | 
| + familyData->currentFontInfo = &newFileInfo; | 
| + } | 
| XML_SetCharacterDataHandler(*familyData->parser, textHandler); | 
| } | 
| @@ -192,7 +202,10 @@ static void endElementHandler(void *data, const char *tag) { | 
| * This function parses the given filename and stores the results in the given | 
| * families array. | 
| */ | 
| -static void parseConfigFile(const char *filename, SkTDArray<FontFamily*> &families) { | 
| +static void parseConfigFile(const char *filename, | 
| + SkTDArray<FontFamily*> &families, | 
| + uint32_t ignoredVariants) | 
| 
 
djsollen
2014/07/31 14:51:37
ignoredVariants = 0;
 
bungeman-skia
2014/07/31 22:15:53
Actually, I'm trying to follow the "as few default
 
 | 
| +{ | 
| FILE* file = NULL; | 
| @@ -235,7 +248,7 @@ static void parseConfigFile(const char *filename, SkTDArray<FontFamily*> &famili | 
| } | 
| XML_Parser parser = XML_ParserCreate(NULL); | 
| - FamilyData *familyData = new FamilyData(&parser, families); | 
| + FamilyData *familyData = new FamilyData(&parser, families, ignoredVariants); | 
| XML_SetUserData(parser, familyData); | 
| XML_SetElementHandler(parser, startElementHandler, endElementHandler); | 
| @@ -254,13 +267,15 @@ static void parseConfigFile(const char *filename, SkTDArray<FontFamily*> &famili | 
| } | 
| static void getSystemFontFamilies(SkTDArray<FontFamily*> &fontFamilies) { | 
| - parseConfigFile(SYSTEM_FONTS_FILE, fontFamilies); | 
| + parseConfigFile(SYSTEM_FONTS_FILE, fontFamilies, 0); | 
| } | 
| -static void getFallbackFontFamilies(SkTDArray<FontFamily*> &fallbackFonts) { | 
| +static void getFallbackFontFamilies(SkTDArray<FontFamily*> &fallbackFonts, | 
| + uint32_t ignoredVariants) | 
| +{ | 
| SkTDArray<FontFamily*> vendorFonts; | 
| - parseConfigFile(FALLBACK_FONTS_FILE, fallbackFonts); | 
| - parseConfigFile(VENDOR_FONTS_FILE, vendorFonts); | 
| + parseConfigFile(FALLBACK_FONTS_FILE, fallbackFonts, ignoredVariants); | 
| + parseConfigFile(VENDOR_FONTS_FILE, vendorFonts, ignoredVariants); | 
| // This loop inserts the vendor fallback fonts in the correct order in the | 
| // overall fallbacks list. | 
| @@ -290,13 +305,14 @@ static void getFallbackFontFamilies(SkTDArray<FontFamily*> &fallbackFonts) { | 
| * Loads data on font families from various expected configuration files. The | 
| * resulting data is returned in the given fontFamilies array. | 
| */ | 
| -void SkFontConfigParser::GetFontFamilies(SkTDArray<FontFamily*> &fontFamilies) { | 
| - | 
| +void SkFontConfigParser::GetFontFamilies(SkTDArray<FontFamily*> &fontFamilies, | 
| + uint32_t ignoredFallbackVariants) | 
| +{ | 
| getSystemFontFamilies(fontFamilies); | 
| // Append all the fallback fonts to system fonts | 
| SkTDArray<FontFamily*> fallbackFonts; | 
| - getFallbackFontFamilies(fallbackFonts); | 
| + getFallbackFontFamilies(fallbackFonts, ignoredFallbackVariants); | 
| for (int i = 0; i < fallbackFonts.count(); ++i) { | 
| fallbackFonts[i]->fIsFallbackFont = true; | 
| *fontFamilies.append() = fallbackFonts[i]; | 
| @@ -306,10 +322,10 @@ void SkFontConfigParser::GetFontFamilies(SkTDArray<FontFamily*> &fontFamilies) { | 
| void SkFontConfigParser::GetTestFontFamilies(SkTDArray<FontFamily*> &fontFamilies, | 
| const char* testMainConfigFile, | 
| const char* testFallbackConfigFile) { | 
| - parseConfigFile(testMainConfigFile, fontFamilies); | 
| + parseConfigFile(testMainConfigFile, fontFamilies, 0); | 
| SkTDArray<FontFamily*> fallbackFonts; | 
| - parseConfigFile(testFallbackConfigFile, fallbackFonts); | 
| + parseConfigFile(testFallbackConfigFile, fallbackFonts, 0); | 
| 
 
djsollen
2014/07/31 14:51:37
will this break Chromium?
 
bungeman-skia
2014/07/31 22:15:53
Yes, I need to add the param here as well and fix
 
 | 
| // Append all fallback fonts to system fonts | 
| for (int i = 0; i < fallbackFonts.count(); ++i) { |