# HG changeset patch
# User neugens
# Date 1276713970 -7200
# Node ID 388276965253fbfd368d9d095cfb1efd746181d9
# Parent  40ad1b388fc2df199ee50d233fdc3f1eac273701
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

diff -r 40ad1b388fc2 -r 388276965253 src/share/native/sun/font/freetypeScaler.c
--- openjdk.orig/jdk/src/share/native/sun/font/freetypeScaler.c	Fri Jun 18 01:18:22 2010 -0700
+++ openjdk/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 +
