Added units_per_EM processing to parse_font_matrix, and added FT_Fixed
number handling to parse_font_bbox.
This commit is contained in:
parent
c2f44c1608
commit
025c2f3fb6
|
@ -160,15 +160,15 @@
|
|||
FT_Error parse_font_bbox( CID_Face face,
|
||||
CID_Parser* parser )
|
||||
{
|
||||
FT_Short temp[4];
|
||||
FT_Fixed temp[4];
|
||||
FT_BBox* bbox = &face->cid.font_bbox;
|
||||
|
||||
|
||||
(void)CID_ToCoordArray( parser, 4, temp );
|
||||
bbox->xMin = temp[0];
|
||||
bbox->yMin = temp[1];
|
||||
bbox->xMax = temp[2];
|
||||
bbox->yMax = temp[3];
|
||||
(void)CID_ToFixedArray( parser, 4, temp, 0 );
|
||||
bbox->xMin = FT_RoundFix( temp[0] );
|
||||
bbox->yMin = FT_RoundFix( temp[1] );
|
||||
bbox->xMax = FT_RoundFix( temp[2] );
|
||||
bbox->yMax = FT_RoundFix( temp[3] );
|
||||
|
||||
return T1_Err_Ok; /* this is a callback function; */
|
||||
/* we must return an error code */
|
||||
|
@ -182,8 +182,9 @@
|
|||
FT_Matrix* matrix;
|
||||
FT_Vector* offset;
|
||||
CID_FontDict* dict;
|
||||
FT_Face root = (FT_Face)&face->root;
|
||||
FT_Fixed temp[6];
|
||||
|
||||
FT_Fixed temp_scale;
|
||||
|
||||
if ( parser->num_dict >= 0 )
|
||||
{
|
||||
|
@ -193,14 +194,21 @@
|
|||
|
||||
(void)CID_ToFixedArray( parser, 6, temp, 3 );
|
||||
|
||||
temp_scale = ABS( temp[3] );
|
||||
|
||||
/* Set Units per EM based on FontMatrix values. We set the value to */
|
||||
/* 1000 / temp_scale, because temp_scale was already multiplied by */
|
||||
/* 1000 (in t1_tofixed, from psobjs.c). */
|
||||
root->units_per_EM = FT_DivFix( 0x10000L, FT_DivFix( temp_scale, 1000 ) );
|
||||
|
||||
/* we need to scale the values by 1.0/temp[3] */
|
||||
if ( temp[3] != 0x10000L )
|
||||
if ( temp_scale != 0x10000L )
|
||||
{
|
||||
temp[0] = FT_DivFix( temp[0], temp[3] );
|
||||
temp[1] = FT_DivFix( temp[1], temp[3] );
|
||||
temp[2] = FT_DivFix( temp[2], temp[3] );
|
||||
temp[4] = FT_DivFix( temp[4], temp[3] );
|
||||
temp[5] = FT_DivFix( temp[5], temp[3] );
|
||||
temp[0] = FT_DivFix( temp[0], temp_scale );
|
||||
temp[1] = FT_DivFix( temp[1], temp_scale );
|
||||
temp[2] = FT_DivFix( temp[2], temp_scale );
|
||||
temp[4] = FT_DivFix( temp[4], temp_scale );
|
||||
temp[5] = FT_DivFix( temp[5], temp_scale );
|
||||
temp[3] = 0x10000L;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue