* 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
diff --git a/ChangeLog b/ChangeLog
index ba3599e..528b617 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/TODO b/TODO
index cfb599d..8849e6c 100644
--- a/TODO
+++ b/TODO
@@ -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.
diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h
index 1d07590..0e72a1a 100644
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -2331,7 +2331,7 @@
/* 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 @@
/* 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 @@
/* */
/* <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 @@
/* 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 @@
/* */
/* <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 @@
/* 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 );
/*************************************************************************/
diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c
index d67a96a..ec7202a 100644
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -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 );
}
diff --git a/src/cid/cidload.c b/src/cid/cidload.c
index 5fa4c61..a372a99 100644
--- a/src/cid/cidload.c
+++ b/src/cid/cidload.c
@@ -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 )