diff options
Diffstat (limited to 'src/ports/SkFontHost_android.cpp')
-rw-r--r-- | src/ports/SkFontHost_android.cpp | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/src/ports/SkFontHost_android.cpp b/src/ports/SkFontHost_android.cpp index 37495e7a10..ce478def6b 100644 --- a/src/ports/SkFontHost_android.cpp +++ b/src/ports/SkFontHost_android.cpp @@ -878,40 +878,6 @@ SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) { // Function from SkTypeface_android.h /////////////////////////////////////////////////////////////////////////////// -struct FBScriptInfo { - const FallbackScripts fScript; - const char* fScriptID; - const SkTypeface::Style fStyle; - const SkUnichar fChar; // representative character for that script type - SkFontID fFontID; -}; - -#define SK_DEFINE_SCRIPT_ENTRY(script, style, unichar) \ - { script, #script, style, unichar, 0 } - -static FBScriptInfo gFBScriptInfo[] = { - SK_DEFINE_SCRIPT_ENTRY(kArabic_FallbackScript, SkTypeface::kNormal, 0x0627), - SK_DEFINE_SCRIPT_ENTRY(kArmenian_FallbackScript, SkTypeface::kNormal, 0x0531), - SK_DEFINE_SCRIPT_ENTRY(kBengali_FallbackScript, SkTypeface::kNormal, 0x0981), - SK_DEFINE_SCRIPT_ENTRY(kDevanagari_FallbackScript, SkTypeface::kNormal, 0x0901), - SK_DEFINE_SCRIPT_ENTRY(kEthiopic_FallbackScript, SkTypeface::kNormal, 0x1200), - SK_DEFINE_SCRIPT_ENTRY(kGeorgian_FallbackScript, SkTypeface::kNormal, 0x10A0), - SK_DEFINE_SCRIPT_ENTRY(kHebrewRegular_FallbackScript, SkTypeface::kNormal, 0x0591), - SK_DEFINE_SCRIPT_ENTRY(kHebrewBold_FallbackScript, SkTypeface::kBold, 0x0591), - SK_DEFINE_SCRIPT_ENTRY(kKannada_FallbackScript, SkTypeface::kNormal, 0x0C90), - SK_DEFINE_SCRIPT_ENTRY(kMalayalam_FallbackScript, SkTypeface::kNormal, 0x0D10), - SK_DEFINE_SCRIPT_ENTRY(kTamilRegular_FallbackScript, SkTypeface::kNormal, 0x0B82), - SK_DEFINE_SCRIPT_ENTRY(kTamilBold_FallbackScript, SkTypeface::kBold, 0x0B82), - SK_DEFINE_SCRIPT_ENTRY(kThai_FallbackScript, SkTypeface::kNormal, 0x0E01), - SK_DEFINE_SCRIPT_ENTRY(kTelugu_FallbackScript, SkTypeface::kNormal, 0x0C10), -}; - -static bool gFBScriptInitialized = false; -static const int gFBScriptInfoCount = sizeof(gFBScriptInfo) / sizeof(FBScriptInfo); - -// ensure that if any value is added to the public enum it is also added here -SK_COMPILE_ASSERT(gFBScriptInfoCount == kFallbackScriptNumber, FBScript_count_mismatch); - // this function can't be called if the gFamilyHeadAndNameListMutex is already locked static bool typefaceContainsChar(SkTypeface* face, SkUnichar uni) { SkPaint paint; @@ -940,103 +906,6 @@ static SkTypeface* findFallbackTypefaceForChar(SkUnichar uni) { return 0; } -// this function can't be called if the gFamilyHeadAndNameListMutex is already locked -static SkFontID findFallbackFontIDForChar(SkUnichar uni, SkTypeface::Style style) { - const SkTypeface* tf = findFallbackTypefaceForChar(uni); - if (!tf) { - return 0; - } - return find_typeface(tf, style)->uniqueID(); -} - -// this function can't be called if the gFamilyHeadAndNameListMutex is already locked -static void initFBScriptInfo() { - if (gFBScriptInitialized) { - return; - } - - // ensure the system fonts are loaded - gFamilyHeadAndNameListMutex.acquire(); - load_system_fonts(); - gFamilyHeadAndNameListMutex.release(); - - for (int i = 0; i < gFBScriptInfoCount; i++) { - FBScriptInfo& scriptInfo = gFBScriptInfo[i]; - // selects the best available style for the desired font. However, if - // bold is requested and no bold font exists for the typeface containing - // the character the next best style is chosen (e.g. normal). - scriptInfo.fFontID = findFallbackFontIDForChar(scriptInfo.fChar, scriptInfo.fStyle); -#if SK_DEBUG_FONTS - SkDebugf("gFBScriptInfo[%s] --> %d", scriptInfo.fScriptID, scriptInfo.fFontID); -#endif - } - // mark the value as initialized so we don't repeat our work unnecessarily - gFBScriptInitialized = true; -} - -SkTypeface* SkCreateTypefaceForScript(FallbackScripts script) { - if (!SkTypeface_ValidScript(script)) { - return NULL; - } - - // ensure that our table is populated - initFBScriptInfo(); - - FBScriptInfo& scriptInfo = gFBScriptInfo[script]; - - // ensure the element with that index actually maps to the correct script - SkASSERT(scriptInfo.fScript == script); - - // if a suitable script could not be found then return NULL - if (scriptInfo.fFontID == 0) { - return NULL; - } - - SkAutoMutexAcquire ac(gFamilyHeadAndNameListMutex); - - // retrieve the typeface the corresponds to this fontID - SkTypeface* tf = find_from_uniqueID(scriptInfo.fFontID); - // we ref(), since the semantic is to return a new instance - tf->ref(); - return tf; -} - -const char* SkGetFallbackScriptID(FallbackScripts script) { - for (int i = 0; i < gFBScriptInfoCount; i++) { - if (gFBScriptInfo[i].fScript == script) { - return gFBScriptInfo[i].fScriptID; - } - } - return NULL; -} - -FallbackScripts SkGetFallbackScriptFromID(const char* id) { - for (int i = 0; i < gFBScriptInfoCount; i++) { - if (strcmp(gFBScriptInfo[i].fScriptID, id) == 0) { - return gFBScriptInfo[i].fScript; - } - } - return kFallbackScriptNumber; // Use kFallbackScriptNumber as an invalid value. -} - -SkTypeface* SkCreateFallbackTypefaceForChar(SkUnichar uni, - SkTypeface::Style style) { - { - SkAutoMutexAcquire ac(gFamilyHeadAndNameListMutex); - load_system_fonts(); - } - - SkTypeface* tf = findFallbackTypefaceForChar(uni); - if (!tf) { - return NULL; - } - SkAutoMutexAcquire ac(gFamilyHeadAndNameListMutex); - tf = find_typeface(tf, style); - // we ref(), since the semantic is to return a new instance - tf->ref(); - return tf; -} - bool SkGetFallbackFamilyNameForChar(SkUnichar uni, SkString* name) { SkASSERT(name); { |