6930980: Disable TrueType hinting for fonts known not to hint well

Reviewed-by: igor, jgodinez
This commit is contained in:
Phil Race 2011-01-14 15:07:48 -08:00
parent 01e63ab0d1
commit 07cf679af3
4 changed files with 25 additions and 6 deletions

View File

@ -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();

View File

@ -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:

View File

@ -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);

View File

@ -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();
}