diff options
author | Raph Levien <raph@google.com> | 2013-01-15 09:52:45 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-01-15 09:52:45 -0800 |
commit | f892089516be024511acd5c8013e9bd305b7c25d (patch) | |
tree | 74efa25250863db019738e7f055c2c597db9b65b | |
parent | 454e75e7a602ac830ae4f3fa218b35675d094bf0 (diff) | |
parent | cfceaa81654c0b02a693e29d2763ef1540e55647 (diff) | |
download | skia-f892089516be024511acd5c8013e9bd305b7c25d.tar.gz |
am cfceaa81: Merge "Changes to Skia to support Harfbuzz NG"
* commit 'cfceaa81654c0b02a693e29d2763ef1540e55647':
Changes to Skia to support Harfbuzz NG
-rw-r--r-- | include/ports/SkTypeface_android.h | 4 | ||||
-rw-r--r-- | src/ports/SkFontHost_android.cpp | 90 |
2 files changed, 59 insertions, 35 deletions
diff --git a/include/ports/SkTypeface_android.h b/include/ports/SkTypeface_android.h index c3eb3d16bb..7e9204d91c 100644 --- a/include/ports/SkTypeface_android.h +++ b/include/ports/SkTypeface_android.h @@ -13,6 +13,7 @@ #include "SkPaint.h" #include "../harfbuzz/src/harfbuzz-shaper.h" +#include "../harfbuzz_ng/src/hb.h" /** * Return a new typeface for a fallback script. If the script is @@ -23,6 +24,9 @@ * @return reference to the matching typeface. Caller must call * unref() when they are done. */ +SK_API SkTypeface* SkCreateTypefaceForScriptNG(hb_script_t script, SkTypeface::Style style, + SkPaint::FontVariant fontVariant = SkPaint::kDefault_Variant); + SK_API SkTypeface* SkCreateTypefaceForScript(HB_Script script, SkTypeface::Style style, SkPaint::FontVariant fontVariant = SkPaint::kDefault_Variant); diff --git a/src/ports/SkFontHost_android.cpp b/src/ports/SkFontHost_android.cpp index 5788ab69c3..26ef052bb0 100644 --- a/src/ports/SkFontHost_android.cpp +++ b/src/ports/SkFontHost_android.cpp @@ -1107,50 +1107,64 @@ static SkFontID findFontIDForChar(SkUnichar uni, SkTypeface::Style style, } struct HB_UnicodeMapping { - HB_Script script; + // TODO: when the WebView no longer needs harfbuzz_old, remove + HB_Script script_old; + hb_script_t script; const SkUnichar unicode; }; /* * The following scripts are not complex fonts and we do not expect them to be parsed by this table - * HB_Script_Common, - * HB_Script_Greek, - * HB_Script_Cyrillic, - * HB_Script_Hangul - * HB_Script_Inherited + * HB_SCRIPT_COMMON, + * HB_SCRIPT_GREEK, + * HB_SCRIPT_CYRILLIC, + * HB_SCRIPT_HANGUL + * HB_SCRIPT_INHERITED */ -static HB_UnicodeMapping HB_UnicodeMappingArray[] { - {HB_Script_Armenian, 0x0531}, - {HB_Script_Hebrew, 0x0591}, - {HB_Script_Arabic, 0x0600}, - {HB_Script_Syriac, 0x0710}, - {HB_Script_Thaana, 0x0780}, - {HB_Script_Nko, 0x07C0}, - {HB_Script_Devanagari, 0x0901}, - {HB_Script_Bengali, 0x0981}, - {HB_Script_Gurmukhi, 0x0A10}, - {HB_Script_Gujarati, 0x0A90}, - {HB_Script_Oriya, 0x0B10}, - {HB_Script_Tamil, 0x0B82}, - {HB_Script_Telugu, 0x0C10}, - {HB_Script_Kannada, 0x0C90}, - {HB_Script_Malayalam, 0x0D10}, - {HB_Script_Sinhala, 0x0D90}, - {HB_Script_Thai, 0x0E01}, - {HB_Script_Lao, 0x0E81}, - {HB_Script_Tibetan, 0x0F00}, - {HB_Script_Myanmar, 0x1000}, - {HB_Script_Georgian, 0x10A0}, +static HB_UnicodeMapping HB_UnicodeMappingArray[] = { + {HB_Script_Armenian, HB_SCRIPT_ARMENIAN, 0x0531}, + {HB_Script_Hebrew, HB_SCRIPT_HEBREW, 0x0591}, + {HB_Script_Arabic, HB_SCRIPT_ARABIC, 0x0600}, + {HB_Script_Syriac, HB_SCRIPT_SYRIAC, 0x0710}, + {HB_Script_Thaana, HB_SCRIPT_THAANA, 0x0780}, + {HB_Script_Nko, HB_SCRIPT_NKO, 0x07C0}, + {HB_Script_Devanagari, HB_SCRIPT_DEVANAGARI, 0x0901}, + {HB_Script_Bengali, HB_SCRIPT_BENGALI, 0x0981}, + {HB_Script_Gurmukhi, HB_SCRIPT_GURMUKHI, 0x0A10}, + {HB_Script_Gujarati, HB_SCRIPT_GUJARATI, 0x0A90}, + {HB_Script_Oriya, HB_SCRIPT_ORIYA, 0x0B10}, + {HB_Script_Tamil, HB_SCRIPT_TAMIL, 0x0B82}, + {HB_Script_Telugu, HB_SCRIPT_TELUGU, 0x0C10}, + {HB_Script_Kannada, HB_SCRIPT_KANNADA, 0x0C90}, + {HB_Script_Malayalam, HB_SCRIPT_MALAYALAM, 0x0D10}, + {HB_Script_Sinhala, HB_SCRIPT_SINHALA, 0x0D90}, + {HB_Script_Thai, HB_SCRIPT_THAI, 0x0E01}, + {HB_Script_Lao, HB_SCRIPT_LAO, 0x0E81}, + {HB_Script_Tibetan, HB_SCRIPT_TIBETAN, 0x0F00}, + {HB_Script_Myanmar, HB_SCRIPT_MYANMAR, 0x1000}, + {HB_Script_Georgian, HB_SCRIPT_GEORGIAN, 0x10A0}, // we don't currently support HB_Script_Ethiopic, it is a placeholder for an upstream merge - //{HB_Script_Ethiopic, 0x1200}, - {HB_Script_Ogham, 0x1680}, - {HB_Script_Runic, 0x16A0}, - {HB_Script_Khmer, 0x1780}, + //{HB_Script_Ethiopic, HB_SCRIPT_ETHIOPIC, 0x1200}, + {HB_Script_Ogham, HB_SCRIPT_OGHAM, 0x1680}, + {HB_Script_Runic, HB_SCRIPT_RUNIC, 0x16A0}, + {HB_Script_Khmer, HB_SCRIPT_KHMER, 0x1780}, }; +static hb_script_t getHBScriptFromHBScriptOld(HB_Script script_old) { + hb_script_t script = HB_SCRIPT_INVALID; + int numSupportedFonts = sizeof(HB_UnicodeMappingArray) / sizeof(HB_UnicodeMapping); + for (int i = 0; i < numSupportedFonts; i++) { + if (script_old == HB_UnicodeMappingArray[i].script_old) { + script = HB_UnicodeMappingArray[i].script; + break; + } + } + return script; +} + // returns 0 for "Not Found" -static SkUnichar getUnicodeFromHBScript(HB_Script script) { +static SkUnichar getUnicodeFromHBScript(hb_script_t script) { SkUnichar unichar = 0; int numSupportedFonts = sizeof(HB_UnicodeMappingArray) / sizeof(HB_UnicodeMapping); for (int i = 0; i < numSupportedFonts; i++) { @@ -1163,7 +1177,7 @@ static SkUnichar getUnicodeFromHBScript(HB_Script script) { } struct TypefaceLookupStruct { - HB_Script script; + hb_script_t script; SkTypeface::Style style; SkPaint::FontVariant fontVariant; SkTypeface* typeface; @@ -1186,7 +1200,7 @@ static int typefaceLookupCompare(const TypefaceLookupStruct* first, return 0; } -SK_API SkTypeface* SkCreateTypefaceForScript(HB_Script script, SkTypeface::Style style, +SK_API SkTypeface* SkCreateTypefaceForScriptNG(hb_script_t script, SkTypeface::Style style, SkPaint::FontVariant fontVariant) { SkTypeface* retTypeface = NULL; @@ -1218,3 +1232,9 @@ SK_API SkTypeface* SkCreateTypefaceForScript(HB_Script script, SkTypeface::Style SkSafeRef(retTypeface); return retTypeface; } + +SK_API SkTypeface* SkCreateTypefaceForScript(HB_Script script, SkTypeface::Style style, + SkPaint::FontVariant fontVariant) { + return SkCreateTypefaceForScriptNG(getHBScriptFromHBScriptOld(script), style, fontVariant); +} + |