From 78b6740ff2f300a09c917f9f6a88d822925d39ac Mon Sep 17 00:00:00 2001 From: David Turner Date: Sun, 7 Oct 2001 13:30:26 +0000 Subject: [PATCH] * include/freetype/ftsizes.h, src/base/ftobjs.c, src/cache/ftcmanag.c: added a new header, named "ftsizes.h" (FT_SIZES_H) to provide a public API to manage multiple size objects for a given FT_Face. --- ChangeLog | 5 ++++ docs/BUGS | 8 ++++++ include/freetype/config/ftheader.h | 13 ++++++++++ include/freetype/ftchapters.h | 1 + include/freetype/internal/ftobjs.h | 41 +----------------------------- src/base/ftobjs.c | 20 +++++++++++++++ src/cache/ftcmanag.c | 6 +++-- 7 files changed, 52 insertions(+), 42 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc83214f4..9399dd011 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,11 @@ with "gray_", and a new type (TArea) is defined to store area value in each cell (using "int" was too small on 16-bit systems).. + * include/freetype/ftsizes.h, src/base/ftobjs.c, src/cache/ftcmanag.c: + added a new header, named "ftsizes.h" (FT_SIZES_H) to provide a public + API to manage multiple size objects for a given FT_Face. + + 2001-09-20 Detlef Würkner * builds/amiga/*: Added port to Amiga with the SAS/C compiler. diff --git a/docs/BUGS b/docs/BUGS index a6cb04c6a..e02b3b19d 100644 --- a/docs/BUGS +++ b/docs/BUGS @@ -30,6 +30,7 @@ NO-CID-CMAPS 13-09-2001 David always AUTOHINT-NO-SBITS 13-09-2001 David always BAD-TT-RENDERING 12-09-2001 Paul Pedriana ? BAD-THIN-LINES 13-09-2001 David ? +NOT-WINDOWS-METRICS 07-10-2001 David always --------------------END-OF-OPENED-BUGS-TABLE---------------------------------- @@ -107,3 +108,10 @@ BAD-THIN-LINES it seems that the anti-aliased renderer in FreeType has problems rendering extremely thin straight lines correctly, at least when using the FT_Outline_Render functions.. + + +NOT-WINDOWS-METRICS + FreeType doesn't always return the same metrics as Windows for ascender, + descender and text height, depending on character pixel sizes. A lot of + testing on Windows is needed to debug this properly. It might be due to + a rounding bug when computing the "x_scale" and "y_scale" values. diff --git a/include/freetype/config/ftheader.h b/include/freetype/config/ftheader.h index fc1e6bfe9..9654dfef6 100644 --- a/include/freetype/config/ftheader.h +++ b/include/freetype/config/ftheader.h @@ -246,6 +246,19 @@ #define FT_OUTLINE_H + /*************************************************************************/ + /* */ + /* @macro: */ + /* FT_SIZES_H */ + /* */ + /* @description: */ + /* A macro used in #include statements to name the file containing */ + /* the API used to manage multiple @FT_Size objects per face. */ + /* */ +#define FT_SIZES_H + + + /*************************************************************************/ /* */ /* @macro: */ diff --git a/include/freetype/ftchapters.h b/include/freetype/ftchapters.h index fcb88cda1..3c107d8cc 100644 --- a/include/freetype/ftchapters.h +++ b/include/freetype/ftchapters.h @@ -15,6 +15,7 @@ /* truetype_tables */ /* type1_tables */ /* sfnt_names */ +/* sizes_management */ /* module_management */ /* system_interface */ /* header_file_macros */ diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h index 1ffacbcf9..7fc5fd3c1 100644 --- a/include/freetype/internal/ftobjs.h +++ b/include/freetype/internal/ftobjs.h @@ -29,6 +29,7 @@ #include #include FT_RENDER_H +#include FT_SIZES_H #include FT_INTERNAL_MEMORY_H #include FT_INTERNAL_DRIVER_H #include FT_INTERNAL_AUTOHINT_H @@ -302,46 +303,6 @@ FT_BEGIN_HEADER /* this must be kept exported -- it is used by the cache manager */ /* even though it shouldn't be considered public for now */ - /*************************************************************************/ - /* */ - /* */ - /* FT_New_Size */ - /* */ - /* */ - /* Creates a new size object from a given face object. */ - /* */ - /* */ - /* face :: A handle to a parent face object. */ - /* */ - /* */ - /* asize :: A handle to a new size object. */ - /* */ - /* */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_New_Size( FT_Face face, - FT_Size* size ); - - - /*************************************************************************/ - /* */ - /* */ - /* FT_Done_Size */ - /* */ - /* */ - /* Discards a given size object. */ - /* */ - /* */ - /* size :: A handle to a target size object. */ - /* */ - /* */ - /* FreeType error code. 0 means success. */ - /* */ - FT_EXPORT( FT_Error ) - FT_Done_Size( FT_Size size ); - - /*************************************************************************/ /* */ /* */ diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index b41562aac..d835d59fd 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -1931,6 +1931,26 @@ } + FT_EXPORT_DEF( FT_Error ) + FT_Activate_Size( FT_Size size ) + { + FT_Face face; + + if ( size == NULL ) + return FT_Err_Bad_Argument; + + face = size->face; + if ( face == NULL || face->driver == NULL ) + return FT_Err_Bad_Argument; + + /* we don't need anything more complex than that, all size objects */ + /* are already listed by the face.. */ + face->size = size; + + return FT_Err_Ok; + } + + /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ diff --git a/src/cache/ftcmanag.c b/src/cache/ftcmanag.c index 12f6257bf..b35bdb699 100644 --- a/src/cache/ftcmanag.c +++ b/src/cache/ftcmanag.c @@ -22,6 +22,7 @@ #include FT_INTERNAL_OBJECTS_H #include FT_INTERNAL_DEBUG_H #include FT_LIST_H +#include FT_SIZES_H #include "ftcerror.h" @@ -123,7 +124,7 @@ error = FT_New_Size( face, &size ); if ( !error ) { - face->size = size; + FT_Activate_Size( size ); error = FT_Set_Pixel_Sizes( face, font_req->width, font_req->height ); @@ -159,7 +160,7 @@ if ( size->face == req->face ) { - size->face->size = size; /* set current size */ + FT_Activate_Size(size); error = FT_Set_Pixel_Sizes( req->face, req->width, req->height ); if ( error ) FT_Done_Size( size ); @@ -267,6 +268,7 @@ manager->max_bytes = max_bytes; manager->request_face = requester; manager->request_data = req_data; + *amanager = manager; Exit: