Index: src/pcf/pcfdrivr.c =================================================================== RCS file: /cvs/freetype/freetype2/src/pcf/pcfdrivr.c,v retrieving revision 1.7 diff -u -r1.7 pcfdrivr.c --- pcfdrivr.c 2003/12/11 06:55:59 1.7 +++ pcfdrivr.c 2004/02/07 06:59:16 @@ -336,9 +336,9 @@ FT_TRACE4(( "rec %d - pres %d\n", size->metrics.y_ppem, - face->root.available_sizes->height )); + face->root.available_sizes->y_ppem >> 6 )); - if ( size->metrics.y_ppem == face->root.available_sizes->height ) + if ( size->metrics.y_ppem == face->root.available_sizes->y_ppem >> 6 ) { size->metrics.ascender = face->accel.fontAscent << 6; size->metrics.descender = face->accel.fontDescent * (-64); Index: src/pcf/pcfread.c =================================================================== RCS file: /cvs/freetype/freetype2/src/pcf/pcfread.c,v retrieving revision 1.46 diff -u -r1.46 pcfread.c --- pcfread.c 2003/12/19 20:25:14 1.46 +++ pcfread.c 2004/02/07 06:59:17 @@ -1070,39 +1070,47 @@ { FT_Bitmap_Size* bsize = root->available_sizes; + FT_Short resolution_x = 0, resolution_y = 0; - FT_MEM_ZERO( bsize, sizeof ( FT_Bitmap_Size ) ); - prop = pcf_find_property( face, "PIXEL_SIZE" ); - if ( prop ) - bsize->height = (FT_Short)prop->value.integer; - + bsize->height = face->accel.fontAscent + face->accel.fontDescent; + prop = pcf_find_property( face, "AVERAGE_WIDTH" ); if ( prop ) bsize->width = (FT_Short)( ( prop->value.integer + 5 ) / 10 ); + else + bsize->width = bsize->height * 2/3; prop = pcf_find_property( face, "POINT_SIZE" ); if ( prop ) - /* convert from 722,7 decipoints to 72 points per inch */ + /* convert from 722.7 decipoints to 72 points per inch */ bsize->size = (FT_Pos)( ( prop->value.integer * 64 * 7200 + 36135L ) / 72270L ); - prop = pcf_find_property( face, "RESOLUTION_X" ); + prop = pcf_find_property( face, "PIXEL_SIZE" ); if ( prop ) - bsize->x_ppem = - (FT_Pos)( ( prop->value.integer * bsize->size + 36 ) / 72 ); + bsize->y_ppem = (FT_Short)prop->value.integer << 6; + prop = pcf_find_property( face, "RESOLUTION_X" ); + if ( prop ) + resolution_x = (FT_Short) prop->value.integer; + prop = pcf_find_property( face, "RESOLUTION_Y" ); if ( prop ) - bsize->y_ppem = - (FT_Pos)( ( prop->value.integer * bsize->size + 36 ) / 72 ); - - if ( bsize->height == 0 ) - bsize->height = (FT_Short)( ( bsize->y_ppem + 32 ) / 64 ); + resolution_y = (FT_Short) prop->value.integer; + + if (bsize->y_ppem == 0) + { + bsize->y_ppem = bsize->size; + if (resolution_y) + bsize->y_ppem = bsize->y_ppem * resolution_y / 72; + } + if (resolution_x && resolution_y) + bsize->x_ppem = bsize->y_ppem * resolution_x / resolution_y; + else + bsize->x_ppem = bsize->y_ppem; - if ( bsize->height == 0 ) - bsize->height = 12; } /* set up charset */