* src/bdf/bdfdrivr.c (BDF_Face_Init, BDF_Set_Pixel_Size): Fix


			
			
				LAYOUT
			
			
		
Werner Lemberg 21 years ago
parent 3c711454e2
commit 9963101dbe
  1. 8
      ChangeLog
  2. 2
      docs/CHANGES
  3. 45
      src/bdf/bdfdrivr.c
  4. 6
      src/pcf/pcfdrivr.c
  5. 36
      src/pcf/pcfread.c

@ -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 );
if ( bsize->height == 0 )
bsize->height = (FT_Short)( ( bsize->y_ppem + 32 ) / 64 );
resolution_y = (FT_Short)prop->value.int32;
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 );
if ( bsize->height == 0 )
bsize->height = (FT_Short)( ( bsize->y_ppem + 32 ) / 64 );
resolution_y = (FT_Short)prop->value.integer;
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…
Cancel
Save