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