6961732: FontMetrics.getLeading() may be negative in freetype-based OpenJDK builds.
authorneugens
Wed Jun 16 20:46:10 2010 +0200 (2 years ago)
changeset 393388276965253
parent 39240ad1b388fc2
child 394756f809dafab
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
src/share/native/sun/font/freetypeScaler.c
--- a/src/share/native/sun/font/freetypeScaler.c Fri Jun 18 01:18:22 2010 -0700
+++ b/src/share/native/sun/font/freetypeScaler.c Wed Jun 16 20:46:10 2010 +0200
@@ -490,22 +490,23 @@ Java_sun_font_FreetypeFontScaler_getFont
/* 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 +