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) { |