diff options
Diffstat (limited to 'libfreetype/ftpfr.c')
| -rw-r--r-- | libfreetype/ftpfr.c | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/libfreetype/ftpfr.c b/libfreetype/ftpfr.c new file mode 100644 index 00000000..bf2c2a2a --- /dev/null +++ b/libfreetype/ftpfr.c @@ -0,0 +1,105 @@ +/***************************************************************************/ +/* */ +/* ftpfr.c */ +/* */ +/* FreeType API for accessing PFR-specific data */ +/* */ +/* Copyright 2002 by */ +/* David Turner, Robert Wilhelm, and Werner Lemberg. */ +/* */ +/* This file is part of the FreeType project, and may only be used, */ +/* modified, and distributed under the terms of the FreeType project */ +/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ +/* this file you indicate that you have read the license and */ +/* understand and accept it fully. */ +/* */ +/***************************************************************************/ + +#include <ft2build.h> +#include FT_INTERNAL_PFR_H +#include FT_INTERNAL_OBJECTS_H + + + /* check the format */ + static FT_Error + ft_pfr_check( FT_Face face, + FT_PFR_Service *aservice ) + { + FT_Error error = FT_Err_Bad_Argument; + + 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[4] == 0 ) + { + *aservice = (FT_PFR_Service) module->clazz->module_interface; + error = 0; + } + } + return error; + } + + + + FT_EXPORT_DEF( FT_Error ) + FT_Get_PFR_Metrics( FT_Face face, + FT_UInt *aoutline_resolution, + FT_UInt *ametrics_resolution, + FT_Fixed *ametrics_x_scale, + FT_Fixed *ametrics_y_scale ) + { + FT_Error error; + FT_PFR_Service service; + + error = ft_pfr_check( face, &service ); + if ( !error ) + { + error = service->get_metrics( face, + aoutline_resolution, + ametrics_resolution, + ametrics_x_scale, + ametrics_y_scale ); + } + return error; + } + + FT_EXPORT_DEF( FT_Error ) + FT_Get_PFR_Kerning( FT_Face face, + FT_UInt left, + FT_UInt right, + FT_Vector *avector ) + { + FT_Error error; + FT_PFR_Service service; + + error = ft_pfr_check( face, &service ); + if ( !error ) + { + error = service->get_kerning( face, left, right, avector ); + } + return error; + } + + + FT_EXPORT_DEF( FT_Error ) + FT_Get_PFR_Advance( FT_Face face, + FT_UInt gindex, + FT_Pos *aadvance ) + { + FT_Error error; + FT_PFR_Service service; + + error = ft_pfr_check( face, &service ); + if ( !error ) + { + error = service->get_advance( face, gindex, aadvance ); + } + return error; + } + +/* END */ |
