diff options
author | 2013-06-25 18:07:45 +0000 | |
---|---|---|
committer | 2013-06-25 18:07:45 +0000 | |
commit | 9a70f347c9f279bf7b4ad8f24e78e3e524767ed5 (patch) | |
tree | 559525db169cd7b77949b6b7c39dfa8b2f662e2e /src/ports/SkFontConfigInterface_android.cpp | |
parent | 8fd160350ca5f57fbb1b2e03383c5778414a9b48 (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.cpp | 22 |
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(); |