mirror of https://github.com/freetype/freetype
* src/bdf/bdfdrivr.c (BDF_Face_Init, BDF_Set_Pixel_Size): Fix
computation of various vertical and horizontal metric values. * src/pcfdrivr.c (PCF_Set_Pixel_Size), src/pcfread (pcf_load_font): Ditto.
This commit is contained in:
parent
9cef479d3b
commit
e0c5044fb8
|
@ -1,3 +1,11 @@
|
|||
2003-02-07 Keith Packard <keithp@keithp.com>
|
||||
|
||||
* src/bdf/bdfdrivr.c (BDF_Face_Init, BDF_Set_Pixel_Size): Fix
|
||||
computation of various vertical and horizontal metric values.
|
||||
|
||||
* src/pcfdrivr.c (PCF_Set_Pixel_Size), src/pcfread (pcf_load_font):
|
||||
Ditto.
|
||||
|
||||
2003-02-07 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* builds/win32/visualc/index.html,
|
||||
|
|
|
@ -32,6 +32,8 @@ LATEST CHANGES BETWEEN 2.1.8 and 2.1.7
|
|||
|
||||
- The flex operator didn't work for CFF fonts.
|
||||
|
||||
- Metrics for BDF and PCF bitmap font formats have been fixed.
|
||||
|
||||
|
||||
II. IMPORTANT CHANGES
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
FreeType font driver for bdf files
|
||||
|
||||
Copyright (C) 2001, 2002, 2003 by
|
||||
Copyright (C) 2001, 2002, 2003, 2004 by
|
||||
Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
@ -397,17 +397,18 @@ THE SOFTWARE.
|
|||
|
||||
{
|
||||
FT_Bitmap_Size* bsize = root->available_sizes;
|
||||
FT_Short resolution_x = 0, resolution_y = 0;
|
||||
|
||||
|
||||
FT_MEM_ZERO( bsize, sizeof ( FT_Bitmap_Size ) );
|
||||
|
||||
prop = bdf_get_font_property( font, "PIXEL_SIZE" );
|
||||
if ( prop )
|
||||
bsize->height = (FT_Short)prop->value.int32;
|
||||
bsize->height = font->font_ascent + font->font_descent;
|
||||
|
||||
prop = bdf_get_font_property( font, "AVERAGE_WIDTH" );
|
||||
if ( prop )
|
||||
bsize->width = (FT_Short)( ( prop->value.int32 + 5 ) / 10 );
|
||||
else
|
||||
bsize->width = bsize->height * 2/3;
|
||||
|
||||
prop = bdf_get_font_property( font, "POINT_SIZE" );
|
||||
if ( prop )
|
||||
|
@ -415,25 +416,28 @@ THE SOFTWARE.
|
|||
bsize->size =
|
||||
(FT_Pos)( ( prop->value.int32 * 64 * 7200 + 36135L ) / 72270L );
|
||||
|
||||
prop = bdf_get_font_property( font, "PIXEL_SIZE" );
|
||||
if ( prop )
|
||||
bsize->y_ppem = (FT_Short)prop->value.int32 << 6;
|
||||
|
||||
prop = bdf_get_font_property( font, "RESOLUTION_X" );
|
||||
if ( prop )
|
||||
bsize->x_ppem =
|
||||
(FT_Pos)( ( prop->value.int32 * bsize->size + 36 ) / 72 );
|
||||
resolution_x = (FT_Short)prop->value.int32;
|
||||
|
||||
prop = bdf_get_font_property( font, "RESOLUTION_Y" );
|
||||
if ( prop )
|
||||
bsize->y_ppem =
|
||||
(FT_Pos)( ( prop->value.int32 * bsize->size + 36 ) / 72 );
|
||||
resolution_y = (FT_Short)prop->value.int32;
|
||||
|
||||
if ( bsize->height == 0 )
|
||||
bsize->height = (FT_Short)( ( bsize->y_ppem + 32 ) / 64 );
|
||||
|
||||
if ( bsize->height == 0 )
|
||||
if ( bsize->y_ppem == 0 )
|
||||
{
|
||||
/* some fonts have a broken SIZE declaration (jiskan24.bdf) */
|
||||
FT_ERROR(( "BDF_Face_Init: reading size\n" ));
|
||||
bsize->height = (FT_Short)font->point_size;
|
||||
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;
|
||||
}
|
||||
|
||||
/* encoding table */
|
||||
|
@ -563,13 +567,14 @@ THE SOFTWARE.
|
|||
|
||||
|
||||
FT_TRACE4(( "rec %d - pres %d\n",
|
||||
size->metrics.y_ppem, root->available_sizes->height ));
|
||||
size->metrics.y_ppem, root->available_sizes->y_ppem ));
|
||||
|
||||
if ( size->metrics.y_ppem == root->available_sizes->height )
|
||||
if ( size->metrics.y_ppem == root->available_sizes->y_ppem >> 6 )
|
||||
{
|
||||
size->metrics.ascender = face->bdffont->bbx.ascent << 6;
|
||||
size->metrics.descender = face->bdffont->bbx.descent * ( -64 );
|
||||
size->metrics.height = face->bdffont->bbx.height << 6;
|
||||
size->metrics.ascender = face->bdffont->font_ascent << 6;
|
||||
size->metrics.descender = -face->bdffont->font_descent << 6;
|
||||
size->metrics.height = ( face->bdffont->font_ascent +
|
||||
face->bdffont->font_descent ) << 6;
|
||||
size->metrics.max_advance = face->bdffont->bbx.width << 6;
|
||||
|
||||
return BDF_Err_Ok;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
FreeType font driver for pcf files
|
||||
|
||||
Copyright (C) 2000, 2001, 2002, 2003 by
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004 by
|
||||
Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
@ -336,9 +336,9 @@ THE SOFTWARE.
|
|||
|
||||
|
||||
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);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
FreeType font driver for pcf fonts
|
||||
|
||||
Copyright 2000, 2001, 2002, 2003 by
|
||||
Copyright 2000, 2001, 2002, 2003, 2004 by
|
||||
Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
@ -1070,39 +1070,47 @@ THE SOFTWARE.
|
|||
|
||||
{
|
||||
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, "PIXEL_SIZE" );
|
||||
if ( prop )
|
||||
bsize->y_ppem = (FT_Short)prop->value.integer << 6;
|
||||
|
||||
prop = pcf_find_property( face, "RESOLUTION_X" );
|
||||
if ( prop )
|
||||
bsize->x_ppem =
|
||||
(FT_Pos)( ( prop->value.integer * bsize->size + 36 ) / 72 );
|
||||
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 );
|
||||
resolution_y = (FT_Short)prop->value.integer;
|
||||
|
||||
if ( bsize->height == 0 )
|
||||
bsize->height = (FT_Short)( ( bsize->y_ppem + 32 ) / 64 );
|
||||
|
||||
if ( bsize->height == 0 )
|
||||
bsize->height = 12;
|
||||
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;
|
||||
}
|
||||
|
||||
/* set up charset */
|
||||
|
|
Loading…
Reference in New Issue