Index: src/ports/SkFontMgr_android.cpp |
diff --git a/src/ports/SkFontMgr_android.cpp b/src/ports/SkFontMgr_android.cpp |
index 1ab2f29642a1147be1bc0404e43faf951f3af113..b0af791d300a974f2898d336b3a3eb767b1be7c0 100644 |
--- a/src/ports/SkFontMgr_android.cpp |
+++ b/src/ports/SkFontMgr_android.cpp |
@@ -14,6 +14,7 @@ |
#include "SkTDArray.h" |
#include "SkTSearch.h" |
#include "SkTypeface.h" |
+#include "SkTypeface_android.h" |
#include "SkTypefaceCache.h" |
#include <limits> |
@@ -117,15 +118,19 @@ private: |
typedef SkTypeface_Android INHERITED; |
}; |
-void get_path_for_sys_fonts(SkString* full, const SkString& name) { |
- full->set(getenv("ANDROID_ROOT")); |
- full->append(SK_FONT_FILE_PREFIX); |
+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) { |
+ explicit SkFontStyleSet_Android(const FontFamily& family, const char* basePath) { |
const SkString* cannonicalFamilyName = NULL; |
if (family.fNames.count() > 0) { |
cannonicalFamilyName = &family.fNames[0]; |
@@ -135,7 +140,7 @@ public: |
const FontFileInfo& fontFile = family.fFontFiles[i]; |
SkString pathName; |
- get_path_for_sys_fonts(&pathName, fontFile.fFileName); |
+ get_path_for_sys_fonts(basePath, fontFile.fFileName, &pathName); |
SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(pathName.c_str())); |
if (!stream.get()) { |
@@ -260,7 +265,15 @@ public: |
SkFontMgr_Android() { |
SkTDArray<FontFamily*> fontFamilies; |
SkFontConfigParser::GetFontFamilies(fontFamilies); |
- this->buildNameToFamilyMap(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); |
this->findDefaultFont(); |
} |
@@ -425,7 +438,7 @@ private: |
SkTDArray<NameToFamily> fNameToFamilyMap; |
SkTDArray<NameToFamily> fFallbackNameToFamilyMap; |
- void buildNameToFamilyMap(SkTDArray<FontFamily*> families) { |
+ void buildNameToFamilyMap(SkTDArray<FontFamily*> families, const char* basePath) { |
for (int i = 0; i < families.count(); i++) { |
FontFamily& family = *families[i]; |
@@ -439,7 +452,7 @@ private: |
} |
} |
- SkFontStyleSet_Android* newSet = SkNEW_ARGS(SkFontStyleSet_Android, (family)); |
+ SkFontStyleSet_Android* newSet = SkNEW_ARGS(SkFontStyleSet_Android, (family, basePath)); |
if (0 == newSet->count()) { |
SkDELETE(newSet); |
continue; |
@@ -485,5 +498,16 @@ 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) { |
+ SkNEW_ARGS(SkFontMgr_Android, (mainConfigFile, fallbackConfigFile, basePath)); |
bungeman-skia
2014/08/11 17:45:23
Need to return here.
|
+ } |
+ |
return SkNEW(SkFontMgr_Android); |
} |