diff --git a/jdk/src/share/classes/sun/font/FileFontStrike.java b/jdk/src/share/classes/sun/font/FileFontStrike.java index 0ea31c7cfa6..3782c9ed3ba 100644 --- a/jdk/src/share/classes/sun/font/FileFontStrike.java +++ b/jdk/src/share/classes/sun/font/FileFontStrike.java @@ -151,6 +151,23 @@ public class FileFontStrike extends PhysicalStrike { } } + /* Amble fonts are better rendered unhinted although there's the + * inevitable fuzziness that accompanies this due to no longer + * snapping stems to the pixel grid. The exception is that in B&W + * mode they are worse without hinting. The down side to that is that + * B&W metrics will differ which normally isn't the case, although + * since AA mode is part of the measuring context that should be OK. + * We don't expect Amble to be installed in the Windows fonts folder. + * If we were to, then we'd also might want to disable using the + * native rasteriser path which is used for LCD mode for platform + * fonts. since we have no way to disable hinting by GDI. + * In the case of Amble, since its 'gasp' table says to disable + * hinting, I'd expect GDI to follow that, so likely it should + * all be consistent even if GDI used. + */ + boolean disableHinting = desc.aaHint != INTVAL_TEXT_ANTIALIAS_OFF && + fileFont.familyName.startsWith("Amble"); + /* If any of the values is NaN then substitute the null scaler context. * This will return null images, zero advance, and empty outlines * as no rendering need take place in this case. @@ -165,7 +182,7 @@ public class FileFontStrike extends PhysicalStrike { pScalerContext = fileFont.getScaler().createScalerContext(matrix, fileFont instanceof TrueTypeFont, desc.aaHint, desc.fmHint, - boldness, italic); + boldness, italic, disableHinting); } mapper = fileFont.getMapper(); diff --git a/jdk/src/share/classes/sun/font/FontScaler.java b/jdk/src/share/classes/sun/font/FontScaler.java index eae9fb22ab5..a2c1c09ef7f 100644 --- a/jdk/src/share/classes/sun/font/FontScaler.java +++ b/jdk/src/share/classes/sun/font/FontScaler.java @@ -242,9 +242,10 @@ public abstract class FontScaler implements DisposerRecord { freed when corresponding strike is being released. */ abstract long createScalerContext(double[] matrix, - boolean fontType, - int aa, int fm, - float boldness, float italic); + boolean fontType, + int aa, int fm, + float boldness, float italic, + boolean disableHinting); /* Marks context as invalid because native scaler is invalid. Notes: diff --git a/jdk/src/share/classes/sun/font/FreetypeFontScaler.java b/jdk/src/share/classes/sun/font/FreetypeFontScaler.java index bb4143c048d..69d0c53965e 100644 --- a/jdk/src/share/classes/sun/font/FreetypeFontScaler.java +++ b/jdk/src/share/classes/sun/font/FreetypeFontScaler.java @@ -211,7 +211,8 @@ class FreetypeFontScaler extends FontScaler { } long createScalerContext(double[] matrix, boolean fontType, - int aa, int fm, float boldness, float italic) { + int aa, int fm, float boldness, float italic, + boolean disableHinting) { if (nativeScaler != 0L) { return createScalerContextNative(nativeScaler, matrix, fontType, aa, fm, boldness, italic); diff --git a/jdk/src/share/classes/sun/font/NullFontScaler.java b/jdk/src/share/classes/sun/font/NullFontScaler.java index 1258243550b..857ec5a88c8 100644 --- a/jdk/src/share/classes/sun/font/NullFontScaler.java +++ b/jdk/src/share/classes/sun/font/NullFontScaler.java @@ -67,7 +67,7 @@ class NullFontScaler extends FontScaler { long getLayoutTableCache() {return 0L;} long createScalerContext(double[] matrix, boolean fontType, int aa, - int fm, float boldness, float italic) { + int fm, float boldness, float italic, boolean disableHinting) { return getNullScalerContext(); }