changeset 2017:c7fb03394c5b

Backport S4356282, S6954424: OpenType font support 2010-12-10 Omair Majid <omajid@redhat.com> 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.
author Omair Majid <omajid@redhat.com>
date Fri, 10 Dec 2010 14:43:53 -0500
parents c12e7cd9ae66
children 73b9ce7485d3
files ChangeLog Makefile.am NEWS patches/openjdk/4356282-opentype.patch patches/openjdk/6954424-opentype_javadoc.patch
diffstat 5 files changed, 264 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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  <omajid@redhat.com>
+
+	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  <omajid@redhat.com>
 
 	Fixes RH569121, S6438179
--- 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 \
--- 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):
 
--- /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);
+
--- /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
+      */
+ 
+