* include/freetype/internal/ftserv.h,
include/freetype/internal/service/svpfr.h,
include/freetype/internal/pfr.h,
src/base/ftpfr.c:
migrating the functions of "ftpfr.h" to the new
service-base internal API
* src/cff/cffobjs.c, src/cid/cidobjs.c, src/pfr/pfrsbit.c,
src/psaux/psobjs.c, src/sfnt/sfdriver.c, src/sfnt/sfobjs.c,
src/truetype/ttobjs.c, src/type1/t1driver.c, src/type1/t1objs.c,
src/type42/t42objs.c, src/winfonts/winfnt.c:
removing various compiler warnings
diff --git a/ChangeLog b/ChangeLog
index e26253a..18a0550 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2003-09-21 David Turner <david@freetype.org>
+
+ * include/freetype/internal/ftserv.h,
+ include/freetype/internal/service/svpfr.h,
+ include/freetype/internal/pfr.h,
+ src/base/ftpfr.c:
+
+ migrating the functions of "ftpfr.h" to the new
+ service-base internal API
+
+ * src/cff/cffobjs.c, src/cid/cidobjs.c, src/pfr/pfrsbit.c,
+ src/psaux/psobjs.c, src/sfnt/sfdriver.c, src/sfnt/sfobjs.c,
+ src/truetype/ttobjs.c, src/type1/t1driver.c, src/type1/t1objs.c,
+ src/type42/t42objs.c, src/winfonts/winfnt.c:
+
+ removing various compiler warnings
+
+
+
2003-09-19 David Bevan <dbevan@emtex.com>
* src/type1/t1parse.c (pfb_tag_fields): Removed.
@@ -117,7 +136,7 @@
* src/base/ftbdf.c: Include FT_SERVICE_BDF_H.
(test_font_type): Removed.
(FT_Get_BDF_Charset_ID, FT_Get_BDF_Property): Use services
- provided in `FT_SERVICE_ID_BDF'
+ provided in `FT_SERVICE_ID_BDF'
* src/base/ftmm.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
(ft_face_get_mm_service): New auxiliary function to get services
diff --git a/include/freetype/internal/ftserv.h b/include/freetype/internal/ftserv.h
index 4e498ad..f02a1c6 100644
--- a/include/freetype/internal/ftserv.h
+++ b/include/freetype/internal/ftserv.h
@@ -78,16 +78,16 @@
/***** *****/
/*************************************************************************/
/*************************************************************************/
-
+
/*
* The following structure is used to _describe_ a given service
* to the library. This is useful to build simple static service lists.
- */
+ */
typedef struct FT_ServiceDescRec_
{
const char* serv_id; /* service name */
const void* serv_data; /* service pointer/data */
-
+
} FT_ServiceDescRec;
typedef const FT_ServiceDescRec* FT_ServiceDesc;
@@ -114,7 +114,7 @@
/***** *****/
/*************************************************************************/
/*************************************************************************/
-
+
/*
* This structure is used to store a cache for several frequently used
* services. It is the type of `face->internal->services'. You
@@ -128,7 +128,8 @@
FT_Pointer postscript_name;
FT_Pointer multi_masters;
FT_Pointer glyph_dict;
-
+ FT_Pointer pfr_metrics;
+
} FT_ServiceCacheRec, *FT_ServiceCache;
@@ -196,13 +197,14 @@
/*
* The header files containing the services.
*/
-
+
#define FT_SERVICE_MULTIPLE_MASTERS_H <freetype/internal/services/svmm.h>
-#define FT_SERVICE_POSTSCRIPT_NAME_H <freetype/internal/services/svpostnm.h>
+#define FT_SERVICE_POSTSCRIPT_NAME_H <freetype/internal/services/svpostnm.h>
#define FT_SERVICE_GLYPH_DICT_H <freetype/internal/services/svgldict.h>
#define FT_SERVICE_BDF_H <freetype/internal/services/svbdf.h>
#define FT_SERVICE_XFREE86_NAME_H <freetype/internal/services/svxf86nm.h>
#define FT_SERVICE_SFNT_H <freetype/internal/services/svsfnt.h>
+#define FT_SERVICE_PFR_H <freetype/internal/services/svpfr.h>
FT_END_HEADER
diff --git a/include/freetype/internal/pfr.h b/include/freetype/internal/services/svpfr.h
similarity index 88%
rename from include/freetype/internal/pfr.h
rename to include/freetype/internal/services/svpfr.h
index 51be620..e47cb6c 100644
--- a/include/freetype/internal/pfr.h
+++ b/include/freetype/internal/services/svpfr.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* pfr.h */
+/* svpfr.h */
/* */
/* Internal PFR service functions (specification only). */
/* */
@@ -16,15 +16,15 @@
/***************************************************************************/
-#ifndef __PFR_H__
-#define __PFR_H__
+#ifndef __SVPFR_H__
+#define __SVPFR_H__
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
+#include FT_INTERNAL_SERVICE_H
FT_BEGIN_HEADER
+#define FT_SERVICE_ID_PFR_METRICS "pfr-metrics"
+
typedef FT_Error (*FT_PFR_GetMetricsFunc)( FT_Face face,
FT_UInt *aoutline,
FT_UInt *ametrics,
@@ -41,20 +41,19 @@
FT_Pos *aadvance );
- typedef struct FT_PFR_ServiceRec_
+ FT_DEFINE_SERVICE( PfrMetrics )
{
FT_PFR_GetMetricsFunc get_metrics;
FT_PFR_GetKerningFunc get_kerning;
FT_PFR_GetAdvanceFunc get_advance;
- } FT_PFR_ServiceRec, *FT_PFR_Service;
+ };
-#define FT_PFR_SERVICE_NAME "pfr"
-
+ /* */
FT_END_HEADER
-#endif /* __PFR_H__ */
+#endif /* __SVPFR_H__ */
/* END */
diff --git a/src/base/ftpfr.c b/src/base/ftpfr.c
index a23dcab..57e21eb 100644
--- a/src/base/ftpfr.c
+++ b/src/base/ftpfr.c
@@ -16,34 +16,20 @@
/***************************************************************************/
#include <ft2build.h>
-#include FT_INTERNAL_PFR_H
#include FT_INTERNAL_OBJECTS_H
+#include FT_SERVICE_PFR_H
/* check the format */
- static FT_Error
- ft_pfr_check( FT_Face face,
- FT_PFR_Service *aservice )
+ static FT_Service_PfrMetrics
+ ft_pfr_check( FT_Face face )
{
- FT_Error error = FT_Err_Bad_Argument;
+ FT_Service_PfrMetrics service;
+ FT_FACE_LOOKUP_SERVICE( face, FT_Service_PfrMetrics, service,
+ pfr_metrics, FT_SERVICE_ID_PFR_METRICS );
- if ( face && face->driver )
- {
- FT_Module module = (FT_Module) face->driver;
- const char* name = module->clazz->module_name;
-
-
- if ( name[0] == 'p' &&
- name[1] == 'f' &&
- name[2] == 'r' &&
- name[3] == 0 )
- {
- *aservice = (FT_PFR_Service) module->clazz->module_interface;
- error = 0;
- }
- }
- return error;
+ return service;
}
@@ -54,12 +40,12 @@
FT_Fixed *ametrics_x_scale,
FT_Fixed *ametrics_y_scale )
{
- FT_Error error;
- FT_PFR_Service service;
+ FT_Error error;
+ FT_Service_PfrMetrics service;
- error = ft_pfr_check( face, &service );
- if ( !error )
+ service = ft_pfr_check( face );
+ if ( service )
{
error = service->get_metrics( face,
aoutline_resolution,
@@ -67,6 +53,26 @@
ametrics_x_scale,
ametrics_y_scale );
}
+ else if ( face )
+ {
+ FT_Fixed x_scale, y_scale;
+
+ /* this is not a PFR font */
+ *aoutline_resolution = face->units_per_EM;
+ *ametrics_resolution = face->units_per_EM;
+
+ x_scale = y_scale = 0x10000L;
+ if ( face->size )
+ {
+ x_scale = face->size->metrics.x_scale;
+ y_scale = face->size->metrics.y_scale;
+ }
+ *ametrics_x_scale = x_scale;
+ *ametrics_y_scale = y_scale;
+ }
+ else
+ error = FT_Err_Invalid_Argument;
+
return error;
}
@@ -77,15 +83,22 @@
FT_UInt right,
FT_Vector *avector )
{
- FT_Error error;
- FT_PFR_Service service;
+ FT_Error error;
+ FT_Service_PfrMetrics service;
- error = ft_pfr_check( face, &service );
- if ( !error )
+ service = ft_pfr_check( face );
+ if ( service )
{
error = service->get_kerning( face, left, right, avector );
}
+ else if ( face )
+ {
+ error = FT_Get_Kerning( face, left, right, FT_KERNING_UNSCALED, avector );
+ }
+ else
+ error = FT_Err_Invalid_Argument;
+
return error;
}
@@ -95,15 +108,19 @@
FT_UInt gindex,
FT_Pos *aadvance )
{
- FT_Error error;
- FT_PFR_Service service;
+ FT_Error error;
+ FT_Service_PfrMetrics service;
- error = ft_pfr_check( face, &service );
- if ( !error )
+ service = ft_pfr_check( face );
+ if ( service )
{
error = service->get_advance( face, gindex, aadvance );
}
+ else
+ /* XXX: TODO: PROVIDE ADVANCE-LOADING METHOD TO ALL FONT DRIVERS */
+ error = FT_Err_Invalid_Argument;
+
return error;
}
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
index f0700d1..9dad6c3 100644
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -396,8 +396,8 @@
else
root->units_per_EM = 1000;
- root->underline_position = dict->underline_position >> 16;
- root->underline_thickness = dict->underline_thickness >> 16;
+ root->underline_position = (FT_Short) (dict->underline_position >> 16);
+ root->underline_thickness = (FT_Short) (dict->underline_thickness >> 16);
/* retrieve font family & style name */
root->family_name = cff_index_get_name( &cff->name_index, face_index );
diff --git a/src/cid/cidobjs.c b/src/cid/cidobjs.c
index 313d315..7945758 100644
--- a/src/cid/cidobjs.c
+++ b/src/cid/cidobjs.c
@@ -199,12 +199,12 @@
if ( face->subrs )
{
FT_Int n;
-
+
for ( n = 0; n < cid->num_dicts; n++ )
{
CID_Subrs subr = face->subrs + n;
-
+
if ( subr->code )
{
@@ -423,8 +423,8 @@
root->height = (FT_Short)(
( ( root->ascender - root->descender ) * 12 ) / 10 );
- root->underline_position = info->underline_position >> 16;
- root->underline_thickness = info->underline_thickness >> 16;
+ root->underline_position = (FT_Short) (info->underline_position >> 16);
+ root->underline_thickness = (FT_Short) (info->underline_thickness >> 16);
root->internal->max_points = 0;
root->internal->max_contours = 0;
diff --git a/src/pfr/pfrsbit.c b/src/pfr/pfrsbit.c
index 84aeb7a..949e3de 100644
--- a/src/pfr/pfrsbit.c
+++ b/src/pfr/pfrsbit.c
@@ -654,7 +654,7 @@
error = pfr_load_bitmap_bits( p,
stream->limit,
format,
- face->header.color_flags & 2,
+ FT_BOOL(face->header.color_flags & 2),
&glyph->root.bitmap );
}
}
diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
index fca38ba..992800f 100644
--- a/src/psaux/psobjs.c
+++ b/src/psaux/psobjs.c
@@ -589,14 +589,14 @@
/* All white-space charcters are ignored. */
skip_spaces( &cur, limit );
- b = T1Radix( 16, &cur, cur + 1 );
+ b = (FT_Byte) T1Radix( 16, &cur, cur + 1 );
if ( cur == cur2 )
break;
/* <f> == <f0> != <0f> */
- bytes[n / 2] = ( n % 2 ) ? bytes[n / 2] + b
- : b * 16;
+ bytes[n / 2] = (FT_Byte)( ( n % 2 ) ? bytes[n / 2] + b
+ : b * 16 );
}
skip_spaces( &cur, limit );
diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c
index 8080b81..cc186a6 100644
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -89,7 +89,7 @@
* GLYPH DICT SERVICE
*
*/
-
+
static FT_Error
sfnt_get_glyph_name( TT_Face face,
FT_UInt glyph_index,
@@ -130,7 +130,7 @@
* POSTSCRIPT NAME SERVICE
*
*/
-
+
static const char*
sfnt_get_ps_name( TT_Face face )
{
@@ -243,7 +243,7 @@
static const FT_Service_PsNameRec sfnt_service_ps_name =
{
- (FT_PsName_GetFunc) & sfnt_get_ps_name
+ (FT_PsName_GetFunc) sfnt_get_ps_name
};
@@ -258,10 +258,10 @@
{ FT_SERVICE_ID_POSTSCRIPT_NAME, & sfnt_service_ps_name },
#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
{ FT_SERVICE_ID_GLYPH_DICT, & sfnt_service_glyph_dict },
-#endif
+#endif
{ NULL, NULL }
- };
+ };
FT_CALLBACK_DEF( FT_Module_Interface )
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
index 33a71ae..64d8afb 100644
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -643,14 +643,14 @@
FT_Bitmap_Size* bsize = root->available_sizes + n;
TT_SBit_Strike strike = face->sbit_strikes + n;
FT_UShort fupem = face->header.Units_Per_EM;
- FT_Short height = face->horizontal.Ascender -
- face->horizontal.Descender +
- face->horizontal.Line_Gap;
+ FT_Short height = (FT_Short)( face->horizontal.Ascender -
+ face->horizontal.Descender +
+ face->horizontal.Line_Gap );
FT_Short avg = face->os2.xAvgCharWidth;
/* assume 72dpi */
- bsize->height =
+ bsize->height =
(FT_Short)( ( height * strike->y_ppem + fupem/2 ) / fupem );
bsize->width =
(FT_Short)( ( avg * strike->y_ppem + fupem/2 ) / fupem );
diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c
index e1e69cd..3768dd6 100644
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -228,7 +228,7 @@
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
/* Determine whether unpatented hinting is to be used for this face. */
- face->unpatented_hinting =
+ face->unpatented_hinting = FT_BOOL
( library->debug_hooks[ FT_DEBUG_HOOK_UNPATENTED_HINTING ] != NULL );
{
diff --git a/src/type1/t1driver.c b/src/type1/t1driver.c
index e920f43..35cde03 100644
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -116,7 +116,7 @@
static const FT_Service_PsNameRec t1_service_ps_name =
{
- (FT_PsName_GetFunc) &t1_get_ps_name
+ (FT_PsName_GetFunc) t1_get_ps_name
};
@@ -145,10 +145,10 @@
{ FT_SERVICE_ID_POSTSCRIPT_NAME, &t1_service_ps_name },
{ FT_SERVICE_ID_GLYPH_DICT, &t1_service_glyph_dict },
{ FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TYPE_1 },
-
-#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
+
+#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
{ FT_SERVICE_ID_MULTI_MASTERS, &t1_service_multi_masters },
-#endif
+#endif
{ NULL, NULL }
};
diff --git a/src/type1/t1objs.c b/src/type1/t1objs.c
index c62e72b..2207aef 100644
--- a/src/type1/t1objs.c
+++ b/src/type1/t1objs.c
@@ -434,8 +434,8 @@
root->max_advance_height = root->height;
- root->underline_position = info->underline_position >> 16;
- root->underline_thickness = info->underline_thickness >> 16;
+ root->underline_position = (FT_Short)( info->underline_position >> 16 );
+ root->underline_thickness = (FT_Short)( info->underline_thickness >> 16 );
root->internal->max_points = 0;
root->internal->max_contours = 0;
diff --git a/src/type42/t42objs.c b/src/type42/t42objs.c
index bb41205..37a4553 100644
--- a/src/type42/t42objs.c
+++ b/src/type42/t42objs.c
@@ -278,8 +278,8 @@
root->max_advance_width = face->ttf_face->max_advance_width;
root->max_advance_height = face->ttf_face->max_advance_height;
- root->underline_position = info->underline_position >> 16;
- root->underline_thickness = info->underline_thickness >> 16;
+ root->underline_position = (FT_Short)( info->underline_position >> 16 );
+ root->underline_thickness = (FT_Short)( info->underline_thickness >> 16 );
root->internal->max_points = 0;
root->internal->max_contours = 0;
diff --git a/src/winfonts/winfnt.c b/src/winfonts/winfnt.c
index b2e315f..ebbabe8 100644
--- a/src/winfonts/winfnt.c
+++ b/src/winfonts/winfnt.c
@@ -453,10 +453,10 @@
bsize->width = font->header.avg_width;
- bsize->height =
- font->header.pixel_height + font->header.external_leading;
+ bsize->height = (FT_Short)(
+ font->header.pixel_height + font->header.external_leading );
bsize->size = font->header.nominal_point_size << 6;
- bsize->x_ppem =
+ bsize->x_ppem =
(FT_Pos)( ( font->header.horizontal_resolution * bsize->size + 36 )
/ 72 );
bsize->y_ppem =