src/share/native/sun/font/freetypeScaler.c

Print this page

        

*** 440,450 **** jlong pScalerContext, jlong pScaler) { jobject metrics; jfloat ax, ay, dx, dy, bx, by, lx, ly, mx, my; jfloat f0 = 0.0; - FT_Pos bmodifier = 0; FTScalerContext *context = (FTScalerContext*) jlong_to_ptr(pScalerContext); FTScalerInfo *scalerInfo = (FTScalerInfo*) jlong_to_ptr(pScaler); --- 440,449 ----
*** 473,519 **** it seems there is no way to adjust metrics accordingly. So, we have to do adust them explicitly and stay consistent with what freetype does to outlines. */ - /* For bolding glyphs are not just widened. Height is also changed - (see ftsynth.c). - - TODO: In vertical direction we could do better job and adjust metrics - proportionally to glyoh shape. */ - if (context->doBold) { - bmodifier = FT_MulFix( - scalerInfo->face->units_per_EM, - scalerInfo->face->size->metrics.y_scale)/24; - } - /**** Note: only some metrics are affected by styling ***/ /* ascent */ ax = 0; ! ay = -(jfloat) FT26Dot6ToFloat(FT_MulFix( ! ((jlong) scalerInfo->face->ascender + bmodifier/2), (jlong) scalerInfo->face->size->metrics.y_scale)); /* descent */ dx = 0; ! 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(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 + - 2*bmodifier + OBLIQUE_MODIFIER(scalerInfo->face->size->metrics.height)); my = 0; metrics = (*env)->NewObject(env, sunFontIDs.strikeMetricsClass, --- 472,513 ---- it seems there is no way to adjust metrics accordingly. So, we have to do adust them explicitly and stay consistent with what freetype does to outlines. */ /**** Note: only some metrics are affected by styling ***/ + /* See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657854 */ + #define FT_MulFixFloatShift6(a, b) (((float) (a)) * ((float) (b)) / 65536.0 / 64.0) + + /* + * See FreeType source code: src/base/ftobjs.c ft_recompute_scaled_metrics() + * http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=1659 + */ /* ascent */ ax = 0; ! ay = -(jfloat) (FT_MulFixFloatShift6( ! ((jlong) scalerInfo->face->ascender), (jlong) scalerInfo->face->size->metrics.y_scale)); /* descent */ dx = 0; ! dy = -(jfloat) (FT_MulFixFloatShift6( ! ((jlong) scalerInfo->face->descender), (jlong) scalerInfo->face->size->metrics.y_scale)); /* baseline */ bx = by = 0; /* leading */ lx = 0; ! ly = (jfloat) (FT_MulFixFloatShift6( ! (jlong) scalerInfo->face->height, (jlong) scalerInfo->face->size->metrics.y_scale)) + ay - dy; /* max advance */ mx = (jfloat) FT26Dot6ToFloat( scalerInfo->face->size->metrics.max_advance + OBLIQUE_MODIFIER(scalerInfo->face->size->metrics.height)); my = 0; metrics = (*env)->NewObject(env, sunFontIDs.strikeMetricsClass,