6961732: FontMetrics.getLeading() may be negative in freetype-based OpenJDK builds.
Summary: Fix premature integer roundings to preserve correct height, width and descent values for fonts
Reviewed-by: prr
--- a/jdk/src/share/native/sun/font/freetypeScaler.c Thu Jun 10 18:58:31 2010 -0700
+++ b/jdk/src/share/native/sun/font/freetypeScaler.c Wed Jun 16 20:46:10 2010 +0200
@@ -490,22 +490,23 @@
/* ascent */
ax = 0;
- ay = -(jfloat) FT26Dot6ToFloat(
- scalerInfo->face->size->metrics.ascender +
- bmodifier/2);
+ ay = -(jfloat) FT26Dot6ToFloat(FT_MulFix(
+ ((jlong) scalerInfo->face->ascender + bmodifier/2),
+ (jlong) scalerInfo->face->size->metrics.y_scale));
/* descent */
dx = 0;
- dy = -(jfloat) FT26Dot6ToFloat(
- scalerInfo->face->size->metrics.descender +
- bmodifier/2);
+ dy = -(jfloat) FT26Dot6ToFloat(FT_MulFix(
+ ((jlong) scalerInfo->face->descender + bmodifier/2),
+ (jlong) scalerInfo->face->size->metrics.y_scale));
/* baseline */
bx = by = 0;
/* leading */
lx = 0;
- ly = (jfloat) FT26Dot6ToFloat(
- scalerInfo->face->size->metrics.height +
- bmodifier) + ay - dy;
+ ly = (jfloat) FT26Dot6ToFloat(FT_MulFix(
+ (jlong) scalerInfo->face->height + bmodifier,
+ (jlong) scalerInfo->face->size->metrics.y_scale))
+ + ay - dy;
/* max advance */
mx = (jfloat) FT26Dot6ToFloat(
scalerInfo->face->size->metrics.max_advance +