# HG changeset patch # User Omair Majid # Date 1292010233 18000 # Node ID c7fb03394c5becb5414121eb023c0eae5449bcfd # Parent c12e7cd9ae66e8a051b0fde8af5e7eaabc570636 Backport S4356282, S6954424: OpenType font support 2010-12-10 Omair Majid Backport S4356282, S6954424, RH525870. * NEWS: Update with OpenType support. * Makefile.am: Apply the two new patches. * patches/openjdk/4356282-opentype.patch: Adds OpenType font support. * patches/openjdk/6954424-opentype_javadoc.patch: Fixes javadocs to mention OpenType font support. diff -r c12e7cd9ae66 -r c7fb03394c5b ChangeLog --- a/ChangeLog Fri Dec 10 11:54:02 2010 -0500 +++ b/ChangeLog Fri Dec 10 14:43:53 2010 -0500 @@ -1,3 +1,12 @@ +2010-12-10 Omair Majid + + Backport S4356282, S6954424, RH525870. + * NEWS: Update with OpenType support. + * Makefile.am: Apply the two new patches. + * patches/openjdk/4356282-opentype.patch: Adds OpenType font support. + * patches/openjdk/6954424-opentype_javadoc.patch: Fixes javadocs to + mention OpenType font support. + 2010-12-10 Omair Majid Fixes RH569121, S6438179 diff -r c12e7cd9ae66 -r c7fb03394c5b Makefile.am --- a/Makefile.am Fri Dec 10 11:54:02 2010 -0500 +++ b/Makefile.am Fri Dec 10 14:43:53 2010 -0500 @@ -377,7 +377,9 @@ patches/applet_hole.patch \ patches/openjdk/7003777-bad-html-entity-parse.patch \ patches/openjdk/6967436-6976265-6967434-pisces.patch \ - patches/openjdk/6438179-systray_check.patch + patches/openjdk/6438179-systray_check.patch \ + patches/openjdk/4356282-opentype.patch \ + patches/openjdk/6954424-opentype_javadoc.patch if WITH_ALT_HSBUILD ICEDTEA_PATCHES += patches/hotspot/$(HSBUILD)/openjdk-6886353-ignore_deoptimizealot.patch \ diff -r c12e7cd9ae66 -r c7fb03394c5b NEWS --- a/NEWS Fri Dec 10 11:54:02 2010 -0500 +++ b/NEWS Fri Dec 10 14:43:53 2010 -0500 @@ -11,6 +11,8 @@ New in release 1.7.7 (201X-XX-XX): * Backports - S6438179, RH569121: XToolkit.isTraySupported() result has nothing to do with the system tray + - S4356282: RFE: JDK should support OpenType/CFF fonts + - S6954424, RH525870: Support OpenType/CFF fonts in JDK 7 New in release 1.7.6 (2010-11-24): diff -r c12e7cd9ae66 -r c7fb03394c5b patches/openjdk/4356282-opentype.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/4356282-opentype.patch Fri Dec 10 14:43:53 2010 -0500 @@ -0,0 +1,227 @@ + +# HG changeset patch +# User igor +# Date 1217861443 -14400 +# Node ID b577c70564b8053092bf35f012fa29efe22f56c9 +# Parent 2b1a7d4b9ac69c2366f38b5b0e9ebcf61f1e3277 +4356282: RFE: T2K should be used to rasterize CID/CFF fonts +Reviewed-by: bae, prr + +--- openjdk.orig/jdk/src/share/classes/sun/font/FontManager.java Fri Jun 25 11:53:15 2010 -0700 ++++ openjdk/jdk/src/share/classes/sun/font/FontManager.java Mon Aug 04 18:50:43 2008 +0400 +@@ -3269,7 +3269,7 @@ public final class FontManager { + int fontFormat = FONTFORMAT_NONE; + int fontRank = Font2D.UNKNOWN_RANK; + +- if (ext.equals(".ttf") || isTTC) { ++ if (ext.equals(".ttf") || ext.equals(".otf") || isTTC) { + fontFormat = FONTFORMAT_TRUETYPE; + fontRank = Font2D.TTF_RANK; + } else if (ext.equals(".pfa") || ext.equals(".pfb")) { +--- openjdk.orig/jdk/src/share/classes/sun/font/TrueTypeFont.java Fri Jun 25 11:53:15 2010 -0700 ++++ openjdk/jdk/src/share/classes/sun/font/TrueTypeFont.java Mon Aug 04 18:50:43 2008 +0400 +@@ -90,6 +90,7 @@ public class TrueTypeFont extends FileFo + public static final int ttcfTag = 0x74746366; // 'ttcf' - TTC file + public static final int v1ttTag = 0x00010000; // 'v1tt' - Version 1 TT font + public static final int trueTag = 0x74727565; // 'true' - Version 2 TT font ++ public static final int ottoTag = 0x4f54544f; // 'otto' - OpenType font + + /* -- ID's used in the 'name' table */ + public static final int MS_PLATFORM_ID = 3; +@@ -499,6 +500,7 @@ public class TrueTypeFont extends FileFo + + case v1ttTag: + case trueTag: ++ case ottoTag: + break; + + default: +--- openjdk.orig/jdk/src/share/classes/sun/java2d/SunGraphicsEnvironment.java Fri Jun 25 11:53:15 2010 -0700 ++++ openjdk/jdk/src/share/classes/sun/java2d/SunGraphicsEnvironment.java Mon Aug 04 18:50:43 2008 +0400 +@@ -792,7 +792,9 @@ public abstract class SunGraphicsEnviron + return(name.startsWith(".ttf", offset) || + name.startsWith(".TTF", offset) || + name.startsWith(".ttc", offset) || +- name.startsWith(".TTC", offset)); ++ name.startsWith(".TTC", offset) || ++ name.startsWith(".otf", offset) || ++ name.startsWith(".OTF", offset)); + } + } + } +@@ -815,31 +817,11 @@ public abstract class SunGraphicsEnviron + } + } + +- public static class TTorT1Filter implements FilenameFilter { +- public boolean accept(File dir, String name) { +- +- /* all conveniently have the same suffix length */ +- int offset = name.length()-4; +- if (offset <= 0) { /* must be at least A.ttf or A.pfa */ +- return false; +- } else { +- boolean isTT = +- name.startsWith(".ttf", offset) || +- name.startsWith(".TTF", offset) || +- name.startsWith(".ttc", offset) || +- name.startsWith(".TTC", offset); +- if (isTT) { +- return true; +- } else if (noType1Font) { +- return false; +- } else { +- return(name.startsWith(".pfa", offset) || +- name.startsWith(".pfb", offset) || +- name.startsWith(".PFA", offset) || +- name.startsWith(".PFB", offset)); +- } +- } +- } ++ public static class TTorT1Filter implements FilenameFilter { ++ public boolean accept(File dir, String name) { ++ return SunGraphicsEnvironment.ttFilter.accept(dir, name) || ++ SunGraphicsEnvironment.t1Filter.accept(dir, name); ++ } + } + + /* No need to keep consing up new instances - reuse a singleton. +--- openjdk.orig/jdk/src/windows/native/sun/font/fontpath.c Fri Jun 25 11:53:15 2010 -0700 ++++ openjdk/jdk/src/windows/native/sun/font/fontpath.c Mon Aug 04 18:50:43 2008 +0400 +@@ -153,7 +153,8 @@ static int CALLBACK EnumFontFacesInFamil + JNIEnv *env = fmi->env; + jstring fullname, fullnameLC; + +- if (FontType != TRUETYPE_FONTTYPE) { ++ /* Both Vista and XP return DEVICE_FONTTYPE for OTF fonts */ ++ if (FontType != TRUETYPE_FONTTYPE && FontType != DEVICE_FONTTYPE) { + return 1; + } + +@@ -227,7 +228,8 @@ static int CALLBACK EnumFontFacesInFamil + JNIEnv *env = fmi->env; + jstring fullname, fullnameLC; + +- if (FontType != TRUETYPE_FONTTYPE) { ++ /* Both Vista and XP return DEVICE_FONTTYPE for OTF fonts */ ++ if (FontType != TRUETYPE_FONTTYPE && FontType != DEVICE_FONTTYPE) { + return 1; + } + +@@ -274,7 +276,8 @@ static int CALLBACK EnumFamilyNamesA( + jstring familyLC; + LOGFONTA lfa; + +- if (FontType != TRUETYPE_FONTTYPE) { ++ /* Both Vista and XP return DEVICE_FONTTYPE for OTF fonts */ ++ if (FontType != TRUETYPE_FONTTYPE && FontType != DEVICE_FONTTYPE) { + return 1; + } + +@@ -323,7 +326,8 @@ static int CALLBACK EnumFamilyNamesW( + int slen; + LOGFONTW lfw; + +- if (FontType != TRUETYPE_FONTTYPE) { ++ /* Both Vista and XP return DEVICE_FONTTYPE for OTF fonts */ ++ if (FontType != TRUETYPE_FONTTYPE && FontType != DEVICE_FONTTYPE) { + return 1; + } + /* wprintf(L"FAMILY=%s charset=%d FULL=%s\n", */ +@@ -383,15 +387,16 @@ static int CALLBACK EnumFamilyNamesW( + * Also if a Font has a name for this locale that name also + * exists in the registry using the appropriate platform encoding. + * What do we do then? +- */ +- +-/* static const wchar_t W_TTSUFFIX[] = L" (TrueType)"; */ +-/* static const char C_TTSUFFIX[] = " (TrueType)"; */ +-/* static int TTSLEN = 11; hard-coded - be careful */ +-static BOOL RegistryToBaseTTNameA(LPCSTR name) { ++ * ++ * Note: OpenType fonts seems to have " (TrueType)" suffix on Vista ++ * but " (OpenType)" on XP. ++ */ ++ ++static BOOL RegistryToBaseTTNameA(LPSTR name) { + static const char TTSUFFIX[] = " (TrueType)"; ++ static const char OTSUFFIX[] = " (OpenType)"; + int TTSLEN = strlen(TTSUFFIX); +- char *match; ++ char *suffix; + + int len = strlen(name); + if (len == 0) { +@@ -403,19 +408,21 @@ static BOOL RegistryToBaseTTNameA(LPCSTR + if (len <= TTSLEN) { + return FALSE; + } +- match = strstr(name, TTSUFFIX); +- if ((match != NULL) && (match == name+(len-TTSLEN))) { +- match[0] = '\0'; /* truncate name */ ++ ++ /* suffix length is the same for truetype and opentype fonts */ ++ suffix = name + len - TTSLEN; ++ if (strcmp(suffix, TTSUFFIX) == 0 || strcmp(suffix, OTSUFFIX) == 0) { ++ suffix[0] = '\0'; /* truncate name */ + return TRUE; +- } else { +- return FALSE; +- } ++ } ++ return FALSE; + } + + static BOOL RegistryToBaseTTNameW(LPWSTR name) { + static const wchar_t TTSUFFIX[] = L" (TrueType)"; ++ static const wchar_t OTSUFFIX[] = L" (OpenType)"; + int TTSLEN = wcslen(TTSUFFIX); +- wchar_t *match; ++ wchar_t *suffix; + + int len = wcslen(name); + if (len == 0) { +@@ -427,13 +434,13 @@ static BOOL RegistryToBaseTTNameW(LPWSTR + if (len <= TTSLEN) { + return FALSE; + } +- match = wcsstr(name, TTSUFFIX); +- if ((match != NULL) && (match == name+(len-TTSLEN))) { +- match[0] = L'\0'; /* truncate name */ ++ /* suffix length is the same for truetype and opentype fonts */ ++ suffix = name + (len - TTSLEN); ++ if (wcscmp(suffix, TTSUFFIX) == 0 || wcscmp(suffix, OTSUFFIX) == 0) { ++ suffix[0] = L'\0'; /* truncate name */ + return TRUE; +- } else { +- return FALSE; +- } ++ } ++ return FALSE; + } + + static void registerFontA(GdiFontMapInfo *fmi, jobject fontToFileMap, +@@ -675,18 +682,19 @@ Java_sun_font_FontManager_populateFontFi + } + if (IS_NT) { + if (!RegistryToBaseTTNameW((LPWSTR)wname) ) { +- /* If the filename ends with ".ttf" also accept it. ++ /* If the filename ends with ".ttf" or ".otf" also accept it. + * Not expecting to need to do this for .ttc files. + * Also note this code is not mirrored in the "A" (win9x) path. + */ + LPWSTR dot = wcsrchr((LPWSTR)data, L'.'); +- if (dot == NULL || (wcsicmp(dot, L".ttf") != 0)) { ++ if (dot == NULL || ((wcsicmp(dot, L".ttf") != 0) ++ && (wcsicmp(dot, L".otf") != 0))) { + continue; /* not a TT font... */ + } + } + registerFontW(&fmi, fontToFileMap, (LPWSTR)wname, (LPWSTR)data); + } else { +- if (!RegistryToBaseTTNameA(cname) ) { ++ if (!RegistryToBaseTTNameA((LPSTR)cname)) { + continue; /* not a TT font... */ + } + registerFontA(&fmi, fontToFileMap, cname, (LPCSTR)data); + diff -r c12e7cd9ae66 -r c7fb03394c5b patches/openjdk/6954424-opentype_javadoc.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/6954424-opentype_javadoc.patch Fri Dec 10 14:43:53 2010 -0500 @@ -0,0 +1,23 @@ + +# HG changeset patch +# User prr +# Date 1274975625 25200 +# Node ID acb763ebef9585000dda40e379d4e615be25c6b1 +# Parent 80a618f36d003b3e64fe8dd86f723d980db0d0bc +6954424: Support OpenType/CFF fonts in JDK 7 +Reviewed-by: bae, igor + +--- openjdk.orig/jdk/src/share/classes/java/awt/Font.java Wed Aug 04 00:07:49 2010 +0100 ++++ openjdk/jdk/src/share/classes/java/awt/Font.java Thu May 27 08:53:45 2010 -0700 +@@ -325,6 +325,10 @@ public class Font implements java.io.Ser + * Identify a font resource of type TRUETYPE. + * Used to specify a TrueType font resource to the + * {@link #createFont} method. ++ * The TrueType format was extended to become the OpenType ++ * format, which adds support for fonts with Postscript outlines, ++ * this tag therefore references these fonts, as well as those ++ * with TrueType outlines. + * @since 1.3 + */ + +