* TODO: Updated.

* src/cid/cidload.c (parse_font_matrix): Added units_per_EM
* src/type1/t1load.c (parse_font_bbox): Changed to use FT_Fixed
This commit is contained in:
Werner Lemberg 2001-03-11 11:28:39 +00:00
parent 21fed911e2
commit 29bac136cb
5 changed files with 35 additions and 30 deletions

View File

@ -1,29 +1,29 @@
2001-03-11 Werner Lemberg <wl@gnu.org>
* TODO: Updated.
2001-03-10 Tom Kacvinsky <tjk@ams.org>
* TODO: New file.
* include/freetype/freetype.h: Added prototypes and notes for
three new functions: FT_RoundFix, FT_CeilFix, and FT_FloorFix.
* src/base/ftcalc.c (FT_RoundFix, FT_CeilFix, FT_FloorFix): Added
implementation code.
* src/cid/cidobjs.c (CID_Init_Face): Use calculated units_per_EM,
and if that is not available, default to 1000 units per EM. Changed
assignment code for ascender and descender values.
* src/cid/cidload.c (parse_font_matrix): Added units_per_EM
* src/cid/cidload.c (parse_font_matrix): Added units_per_EM
processing.
(parse_font_bbox): Changed to use FT_Fixed number handling.
* src/type1/t1objs.c (T1_Init_Face): Changed the assignment code
for ascender, descender, and max_advance_width.
* src/type1/t1load.c (parse_font_bbox): Changed to use FT_Fixed
* src/type1/t1load.c (parse_font_bbox): Changed to use FT_Fixed
number handling.
2001-03-10 Henrik Grubbström <grubba@roxen.com>
2001-03-10 Henrik Grubbström <grubba@roxen.com>
* src/*/*.c: Added many casts to make code more 64bit-safe.

14
TODO
View File

@ -1,10 +1,12 @@
Here is a list of items that need to be addressed in FreeType 2:
* Add synthesized Unicode charmap processing to the CFF driver.
* Add synthesized Unicode charmap processing to the CFF driver.
* Investigate usage of casts and bit width of integer types used. The idea is
to typedef FT_Fixed, FT_Long, FT_Int, etc... to use the appropriate built in
integer types. This is so that we may avoid unnecessary explict typecasts and
side affects inherent in implict casts. This is mostly an issue on platforms
where long integers are 64 bits wide (instead of 32 bits wide).
* Investigate usage of casts and bit width of integer types used. The idea is
to typedef FT_Fixed, FT_Long, FT_Int, etc. to use the appropriate built in
integer types. This is so that we may avoid unnecessary explict typecasts
and side affects inherent in implict casts. This is mostly an issue on
platforms where long integers are 64 bits wide (instead of 32 bits wide).
* Fix exact bbox calculation. The current code uses an iterative algorithm
which can fail miserably.

View File

@ -2331,7 +2331,7 @@ FT_BEGIN_HEADER
/* FT_RoundFix */
/* */
/* <Description> */
/* A very simple function used to round a 16.16 fixed number */
/* A very simple function used to round a 16.16 fixed number. */
/* */
/* <Input> */
/* a :: The number to be rounded. */
@ -2340,10 +2340,10 @@ FT_BEGIN_HEADER
/* The result of `(a + 0x8000) & -0x10000'. */
/* */
/* <Note> */
/* This function assumes that the target platform supports 32 bit */
/* This function assumes that the target platform supports 32-bit */
/* signed integers. */
/* */
FT_EXPORT( FT_Fixed ) FT_RoundFix( FT_Fixed a );
FT_EXPORT( FT_Fixed ) FT_RoundFix( FT_Fixed a );
/*************************************************************************/
@ -2353,7 +2353,7 @@ FT_BEGIN_HEADER
/* */
/* <Description> */
/* A very simple function used to compute the ceiling function of a */
/* 16.16 fixed number */
/* 16.16 fixed number. */
/* */
/* <Input> */
/* a :: The number for which the ceiling function is to be computed. */
@ -2362,10 +2362,10 @@ FT_BEGIN_HEADER
/* The result of `(a + 0x10000 - 1) & -0x10000'. */
/* */
/* <Note> */
/* This function assumes that the target platform supports 32 bit */
/* This function assumes that the target platform supports 32-bit */
/* signed integers. */
/* */
FT_EXPORT( FT_Fixed ) FT_CeilFix( FT_Fixed a );
FT_EXPORT( FT_Fixed ) FT_CeilFix( FT_Fixed a );
/*************************************************************************/
@ -2375,7 +2375,7 @@ FT_BEGIN_HEADER
/* */
/* <Description> */
/* A very simple function used to compute the floor function of a */
/* 16.16 fixed number */
/* 16.16 fixed number. */
/* */
/* <Input> */
/* a :: The number for which the floor function is to be computed. */
@ -2384,10 +2384,10 @@ FT_BEGIN_HEADER
/* The result of `a & -0x10000'. */
/* */
/* <Note> */
/* This function assumes that the target platform supports 32 bit */
/* This function assumes that the target platform supports 32-bit */
/* signed integers. */
/* */
FT_EXPORT( FT_Fixed ) FT_FloorFix( FT_Fixed a );
FT_EXPORT( FT_Fixed ) FT_FloorFix( FT_Fixed a );
/*************************************************************************/

View File

@ -47,12 +47,13 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_calc
/* The following three functions are available regardless of whether */
/* FT_LONG64 or FT_CONFIG_OPTION_OLD_CALCS is defined. */
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Fixed ) FT_RoundFix( FT_Fixed a )
FT_EXPORT_DEF( FT_Fixed ) FT_RoundFix( FT_Fixed a )
{
return( ( a + 0x8000L ) & -0x10000L );
}
@ -60,7 +61,7 @@
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Fixed ) FT_CeilFix( FT_Fixed a )
FT_EXPORT_DEF( FT_Fixed ) FT_CeilFix( FT_Fixed a )
{
return( ( a + 0x10000L - 1 ) & -0x10000L );
}
@ -68,7 +69,7 @@
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Fixed ) FT_FloorFix( FT_Fixed a )
FT_EXPORT_DEF( FT_Fixed ) FT_FloorFix( FT_Fixed a )
{
return( a & -0x10000L );
}

View File

@ -186,6 +186,7 @@
FT_Fixed temp[6];
FT_Fixed temp_scale;
if ( parser->num_dict >= 0 )
{
dict = face->cid.font_dicts + parser->num_dict;
@ -196,10 +197,11 @@
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 ) );
/* 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_scale != 0x10000L )