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

Unified Diff: src/ports/SkFontMgr_android.cpp

Issue 887113002: Add factory for Android font manager. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Remove no longer wanted function. Created 5 years, 10 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
« no previous file with comments | « src/ports/SkFontConfigParser_android.cpp ('k') | tests/FontConfigParser.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ports/SkFontMgr_android.cpp
diff --git a/src/ports/SkFontMgr_android.cpp b/src/ports/SkFontMgr_android.cpp
index 523deca0e3a0bd932c2be98e40600ee83fca7c3d..11f944997111e1b12ed972758e0ea89d1bf81fa2 100644
--- a/src/ports/SkFontMgr_android.cpp
+++ b/src/ports/SkFontMgr_android.cpp
@@ -9,6 +9,7 @@
#include "SkFontDescriptor.h"
#include "SkFontHost_FreeType_common.h"
#include "SkFontMgr.h"
+#include "SkFontMgr_android.h"
#include "SkFontStyle.h"
#include "SkStream.h"
#include "SkTDArray.h"
@@ -18,26 +19,11 @@
#include "SkTypefaceCache.h"
#include <limits>
-#include <stdlib.h>
-
-#ifndef SK_FONT_FILE_PREFIX
-# define SK_FONT_FILE_PREFIX "/fonts/"
-#endif
-
-#ifndef SK_DEBUG_FONTS
- #define SK_DEBUG_FONTS 0
-#endif
-
-#if SK_DEBUG_FONTS
-# define DEBUG_FONT(args) SkDebugf args
-#else
-# define DEBUG_FONT(args)
-#endif
// For test only.
-static const char* gTestMainConfigFile = NULL;
-static const char* gTestFallbackConfigFile = NULL;
-static const char* gTestFontFilePrefix = NULL;
+static const char* gTestFontsXml = NULL;
+static const char* gTestFallbackFontsXml = NULL;
+static const char* gTestBasePath = NULL;
class SkTypeface_Android : public SkTypeface_FreeType {
public:
@@ -126,19 +112,9 @@ private:
typedef SkTypeface_Android INHERITED;
};
-void get_path_for_sys_fonts(const char* basePath, const SkString& name, SkString* full) {
- if (basePath) {
- full->set(basePath);
- } else {
- full->set(getenv("ANDROID_ROOT"));
- full->append(SK_FONT_FILE_PREFIX);
- }
- full->append(name);
-}
-
class SkFontStyleSet_Android : public SkFontStyleSet {
public:
- explicit SkFontStyleSet_Android(const FontFamily& family, const char* basePath,
+ explicit SkFontStyleSet_Android(const FontFamily& family,
const SkTypeface_FreeType::Scanner& scanner)
{
const SkString* cannonicalFamilyName = NULL;
@@ -149,12 +125,13 @@ public:
for (int i = 0; i < family.fFonts.count(); ++i) {
const FontFileInfo& fontFile = family.fFonts[i];
- SkString pathName;
- get_path_for_sys_fonts(basePath, fontFile.fFileName, &pathName);
+ SkString pathName(family.fBasePath);
+ pathName.append(fontFile.fFileName);
SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(pathName.c_str()));
if (!stream.get()) {
- DEBUG_FONT(("---- SystemFonts[%d] file=%s (NOT EXIST)", i, pathName.c_str()));
+ SkDEBUGF(("Requested font file %s does not exist or cannot be opened.\n",
+ pathName.c_str()));
continue;
}
@@ -163,7 +140,8 @@ public:
SkFontStyle style;
bool isFixedWidth;
if (!scanner.scanFont(stream.get(), ttcIndex, &familyName, &style, &isFixedWidth)) {
- DEBUG_FONT(("---- SystemFonts[%d] file=%s (INVALID)", i, pathName.c_str()));
+ SkDEBUGF(("Requested font file %s exists, but is not a valid font.\n",
+ pathName.c_str()));
continue;
}
@@ -265,19 +243,26 @@ struct NameToFamily {
class SkFontMgr_Android : public SkFontMgr {
public:
- SkFontMgr_Android() {
- SkTDArray<FontFamily*> fontFamilies;
- SkFontConfigParser::GetFontFamilies(fontFamilies);
- this->buildNameToFamilyMap(fontFamilies, NULL);
- this->findDefaultFont();
- }
- SkFontMgr_Android(const char* mainConfigFile, const char* fallbackConfigFile,
- const char* basePath)
- {
- SkTDArray<FontFamily*> fontFamilies;
- SkFontConfigParser::GetTestFontFamilies(fontFamilies, mainConfigFile, fallbackConfigFile);
- this->buildNameToFamilyMap(fontFamilies, basePath);
+ SkFontMgr_Android(const SkFontMgr_Android_CustomFonts* custom) {
+ SkTDArray<FontFamily*> families;
+ if (custom && SkFontMgr_Android_CustomFonts::kPreferSystem != custom->fSystemFontUse) {
+ SkString base(custom->fBasePath);
+ SkFontConfigParser::GetCustomFontFamilies(families, base,
+ custom->fFontsXml, custom->fFallbackFontsXml);
+ }
+ if (!custom ||
+ (custom && SkFontMgr_Android_CustomFonts::kOnlyCustom != custom->fSystemFontUse))
+ {
+ SkFontConfigParser::GetSystemFontFamilies(families);
+ }
+ if (custom && SkFontMgr_Android_CustomFonts::kPreferSystem == custom->fSystemFontUse) {
+ SkString base(custom->fBasePath);
+ SkFontConfigParser::GetCustomFontFamilies(families, base,
+ custom->fFontsXml, custom->fFallbackFontsXml);
+ }
+ this->buildNameToFamilyMap(families);
this->findDefaultFont();
+ families.deleteAll();
}
protected:
@@ -456,7 +441,7 @@ private:
SkTDArray<NameToFamily> fNameToFamilyMap;
SkTDArray<NameToFamily> fFallbackNameToFamilyMap;
- void buildNameToFamilyMap(SkTDArray<FontFamily*> families, const char* basePath) {
+ void buildNameToFamilyMap(SkTDArray<FontFamily*> families) {
for (int i = 0; i < families.count(); i++) {
FontFamily& family = *families[i];
@@ -471,7 +456,7 @@ private:
}
SkFontStyleSet_Android* newSet =
- SkNEW_ARGS(SkFontStyleSet_Android, (family, basePath, fScanner));
+ SkNEW_ARGS(SkFontStyleSet_Android, (family, fScanner));
if (0 == newSet->count()) {
SkDELETE(newSet);
continue;
@@ -515,37 +500,50 @@ private:
};
///////////////////////////////////////////////////////////////////////////////
-
-SkFontMgr* SkFontMgr::Factory() {
- // The call to SkGetTestFontConfiguration is so that Chromium can override the environment.
- // TODO: these globals need to be removed, in favor of a constructor / separate Factory
- // which can be used instead.
- const char* mainConfigFile;
- const char* fallbackConfigFile;
- const char* basePath;
- SkGetTestFontConfiguration(&mainConfigFile, &fallbackConfigFile, &basePath);
- if (mainConfigFile) {
- return SkNEW_ARGS(SkFontMgr_Android, (mainConfigFile, fallbackConfigFile, basePath));
+#ifdef SK_DEBUG
+static char const * const gSystemFontUseStrings[] = {
+ "OnlyCustom", "PreferCustom", "PreferSystem"
+};
+#endif
+SkFontMgr* SkFontMgr_New_Android(const SkFontMgr_Android_CustomFonts* custom) {
+ if (custom) {
+ SkASSERT(0 <= custom->fSystemFontUse);
+ SkASSERT(custom->fSystemFontUse < SK_ARRAY_COUNT(gSystemFontUseStrings));
+ SkDEBUGF(("SystemFontUse: %s BasePath: %s Fonts: %s FallbackFonts: %s\n",
+ gSystemFontUseStrings[custom->fSystemFontUse],
+ custom->fBasePath,
+ custom->fFontsXml,
+ custom->fFallbackFontsXml));
}
- return SkNEW(SkFontMgr_Android);
+ return SkNEW_ARGS(SkFontMgr_Android, (custom));
}
-void SkUseTestFontConfigFile(const char* mainconf, const char* fallbackconf,
- const char* fontsdir) {
- gTestMainConfigFile = mainconf;
- gTestFallbackConfigFile = fallbackconf;
- gTestFontFilePrefix = fontsdir;
- SkASSERT(gTestMainConfigFile);
- SkASSERT(gTestFallbackConfigFile);
- SkASSERT(gTestFontFilePrefix);
- SkDEBUGF(("Use Test Config File Main %s, Fallback %s, Font Dir %s",
- gTestMainConfigFile, gTestFallbackConfigFile, gTestFontFilePrefix));
+SkFontMgr* SkFontMgr::Factory() {
+ // These globals exist so that Chromium can override the environment.
+ // TODO: these globals need to be removed, and Chromium use SkFontMgr_New_Android instead.
+ if ((gTestFontsXml || gTestFallbackFontsXml) && gTestBasePath) {
+ SkFontMgr_Android_CustomFonts custom = {
+ SkFontMgr_Android_CustomFonts::kOnlyCustom,
+ gTestBasePath,
+ gTestFontsXml,
+ gTestFallbackFontsXml
+ };
+ return SkFontMgr_New_Android(&custom);
+ }
+
+ return SkFontMgr_New_Android(NULL);
}
-void SkGetTestFontConfiguration(const char** mainconf, const char** fallbackconf,
- const char** fontsdir) {
- *mainconf = gTestMainConfigFile;
- *fallbackconf = gTestFallbackConfigFile;
- *fontsdir = gTestFontFilePrefix;
+void SkUseTestFontConfigFile(const char* fontsXml, const char* fallbackFontsXml,
+ const char* basePath)
+{
+ gTestFontsXml = fontsXml;
+ gTestFallbackFontsXml = fallbackFontsXml;
+ gTestBasePath = basePath;
+ SkASSERT(gTestFontsXml);
+ SkASSERT(gTestFallbackFontsXml);
+ SkASSERT(gTestBasePath);
+ SkDEBUGF(("Test BasePath: %s Fonts: %s FallbackFonts: %s\n",
+ gTestBasePath, gTestFontsXml, gTestFallbackFontsXml));
}
« no previous file with comments | « src/ports/SkFontConfigParser_android.cpp ('k') | tests/FontConfigParser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698