aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaph Levien <raph@google.com>2013-01-15 09:52:45 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2013-01-15 09:52:45 -0800
commitf892089516be024511acd5c8013e9bd305b7c25d (patch)
tree74efa25250863db019738e7f055c2c597db9b65b
parent454e75e7a602ac830ae4f3fa218b35675d094bf0 (diff)
parentcfceaa81654c0b02a693e29d2763ef1540e55647 (diff)
downloadskia-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.h4
-rw-r--r--src/ports/SkFontHost_android.cpp90
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);
+}
+