8164818: Reg. test java/awt/font/TextLayout/VisibleAdvance.java fails

Reviewed-by: serb, psadhukhan
This commit is contained in:
Phil Race 2016-08-31 13:40:06 -07:00
parent b7149b5cc7
commit 0d1ad07556
4 changed files with 14 additions and 14 deletions

View File

@ -78,7 +78,7 @@ int storeGVData(JNIEnv* env,
int i;
float x=0, y=0;
float startX, startY;
float scale = 1.0f/64.0f/devScale;
float scale = 1.0f / FloatToFixedScale / devScale;
unsigned int* glyphs;
float* positions;
int initialCount, glyphArrayLen, posArrayLen, maxGlyphs, storeadv;

View File

@ -55,10 +55,6 @@ hb_jdk_get_glyph (hb_font_t *font HB_UNUSED,
return (*glyph != 0);
}
// This is also define in freetypescaler.c and similar macros are
// in fontscalerdefs.h. Consider tidying this up.
#define FloatToF26Dot6(x) ((unsigned int) ((x)*64))
static hb_position_t
hb_jdk_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
void *font_data,
@ -84,7 +80,7 @@ hb_jdk_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
fadv *= jdkFontInfo->devScale;
env->DeleteLocalRef(pt);
return FloatToF26Dot6(fadv); // should this round ?
return FloatToFixed(fadv);
}
static hb_position_t
@ -111,7 +107,7 @@ hb_jdk_get_glyph_v_advance (hb_font_t *font HB_UNUSED,
fadv = env->GetFloatField(pt, sunFontIDs.yFID);
env->DeleteLocalRef(pt);
return FloatToF26Dot6(fadv); // should this round ?
return FloatToFixed(fadv);
}
@ -205,8 +201,8 @@ hb_jdk_get_glyph_contour_point (hb_font_t *font HB_UNUSED,
*x = 0; *y = 0;
return true;
}
*x = FloatToF26Dot6(env->GetFloatField(pt, sunFontIDs.xFID));
*y = FloatToF26Dot6(env->GetFloatField(pt, sunFontIDs.yFID));
*x = FloatToFixed(env->GetFloatField(pt, sunFontIDs.xFID));
*y = FloatToFixed(env->GetFloatField(pt, sunFontIDs.yFID));
env->DeleteLocalRef(pt);
return true;
@ -325,8 +321,8 @@ static hb_font_t* _hb_jdk_font_create(JDKFontInfo *jdkFontInfo,
_hb_jdk_get_font_funcs (),
jdkFontInfo, (hb_destroy_func_t) _do_nothing);
hb_font_set_scale (font,
FloatToF26Dot6(jdkFontInfo->ptSize*jdkFontInfo->devScale),
FloatToF26Dot6(jdkFontInfo->ptSize*jdkFontInfo->devScale));
FloatToFixed(jdkFontInfo->ptSize*jdkFontInfo->devScale),
FloatToFixed(jdkFontInfo->ptSize*jdkFontInfo->devScale));
return font;
}
@ -343,8 +339,8 @@ static hb_font_t* _hb_jdk_ct_font_create(JDKFontInfo *jdkFontInfo) {
hb_face_destroy(face);
hb_font_set_scale(font,
FloatToF26Dot6(jdkFontInfo->ptSize),
FloatToF26Dot6(jdkFontInfo->ptSize));
FloatToFixed(jdkFontInfo->ptSize),
FloatToFixed(jdkFontInfo->ptSize));
return font;
}
#endif

View File

@ -48,6 +48,10 @@ typedef struct JDKFontInfo_Struct {
} JDKFontInfo;
// Use 16.16 for better precision than 26.6
#define FloatToFixedScale ((float)(1 << 16))
#define FloatToFixed(f) ((unsigned int)((f) * FloatToFixedScale))
/*
* Note:
*

View File

@ -29,7 +29,7 @@ import java.text.*;
/* @test
* @summary verify TextLine advance
* @bug 6582460
* @bug 6582460 8164818
*/
/*