aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ports/SkFontConfigInterface_android.cpp
diff options
context:
space:
mode:
authorGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-06-25 18:07:45 +0000
committerGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-06-25 18:07:45 +0000
commit9a70f347c9f279bf7b4ad8f24e78e3e524767ed5 (patch)
tree559525db169cd7b77949b6b7c39dfa8b2f662e2e /src/ports/SkFontConfigInterface_android.cpp
parent8fd160350ca5f57fbb1b2e03383c5778414a9b48 (diff)
Ensure we use the current locale when looking up fallback fonts per character
http://crbug.com/183830 R=scroggo@google.com Review URL: https://codereview.chromium.org/17691002 git-svn-id: http://skia.googlecode.com/svn/trunk@9751 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/ports/SkFontConfigInterface_android.cpp')
-rw-r--r--src/ports/SkFontConfigInterface_android.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/ports/SkFontConfigInterface_android.cpp b/src/ports/SkFontConfigInterface_android.cpp
index 2e2d88d689..738b11434e 100644
--- a/src/ports/SkFontConfigInterface_android.cpp
+++ b/src/ports/SkFontConfigInterface_android.cpp
@@ -107,6 +107,7 @@ public:
private:
void addFallbackFont(FontRecID fontRecID);
SkTypeface* getTypefaceForFontRec(FontRecID fontRecID);
+ FallbackFontList* getCurrentLocaleFallbackFontList();
FallbackFontList* findFallbackFontList(const SkLanguage& lang, bool isOriginal = true);
SkTArray<FontRec> fFonts;
@@ -118,6 +119,10 @@ private:
SkTDict<FallbackFontList*> fFallbackFontDict;
SkTDict<FallbackFontList*> fFallbackFontAliasDict;
FallbackFontList fDefaultFallbackList;
+
+ // fallback info for current locale
+ SkString fCachedLocale;
+ FallbackFontList* fLocaleFallbackFontList;
};
///////////////////////////////////////////////////////////////////////////////
@@ -193,7 +198,8 @@ SkFontConfigInterfaceAndroid::SkFontConfigInterfaceAndroid(SkTDArray<FontFamily*
fFamilyNameDict(1024),
fDefaultFamilyRecID(INVALID_FAMILY_REC_ID),
fFallbackFontDict(128),
- fFallbackFontAliasDict(128) {
+ fFallbackFontAliasDict(128),
+ fLocaleFallbackFontList(NULL) {
for (int i = 0; i < fontFamilies.count(); ++i) {
FontFamily* family = fontFamilies[i];
@@ -489,8 +495,9 @@ SkTypeface* SkFontConfigInterfaceAndroid::getTypefaceForFontRec(FontRecID fontRe
}
bool SkFontConfigInterfaceAndroid::getFallbackFamilyNameForChar(SkUnichar uni, SkString* name) {
- for (int i = 0; i < fDefaultFallbackList.count(); i++) {
- FontRecID fontRecID = fDefaultFallbackList[i];
+ FallbackFontList* fallbackFontList = this->getCurrentLocaleFallbackFontList();
+ for (int i = 0; i < fallbackFontList->count(); i++) {
+ FontRecID fontRecID = fallbackFontList->getAt(i);
SkTypeface* face = this->getTypefaceForFontRec(fontRecID);
SkPaint paint;
@@ -533,6 +540,15 @@ SkTypeface* SkFontConfigInterfaceAndroid::getTypefaceForChar(SkUnichar uni,
return NULL;
}
+FallbackFontList* SkFontConfigInterfaceAndroid::getCurrentLocaleFallbackFontList() {
+ SkString locale = SkFontConfigParser::GetLocale();
+ if (NULL == fLocaleFallbackFontList || locale != fCachedLocale) {
+ fCachedLocale = locale;
+ fLocaleFallbackFontList = this->findFallbackFontList(locale);
+ }
+ return fLocaleFallbackFontList;
+}
+
FallbackFontList* SkFontConfigInterfaceAndroid::findFallbackFontList(const SkLanguage& lang,
bool isOriginal) {
const SkString& langTag = lang.getTag();