Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Unified Diff: src/ports/SkFontConfigParser_android.cpp

Issue 427293003: Implement SkFontMgr_Android::onMatchFamilyStyleCharacter. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address comments, move mask to parser. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698