1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* ftpfr.c */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* FreeType API for accessing PFR-specific data */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 2002 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth #include <ft2build.h> 19*37da2899SCharles.Forsyth #include FT_INTERNAL_PFR_H 20*37da2899SCharles.Forsyth #include FT_INTERNAL_OBJECTS_H 21*37da2899SCharles.Forsyth 22*37da2899SCharles.Forsyth 23*37da2899SCharles.Forsyth /* check the format */ 24*37da2899SCharles.Forsyth static FT_Error ft_pfr_check(FT_Face face,FT_PFR_Service * aservice)25*37da2899SCharles.Forsyth ft_pfr_check( FT_Face face, 26*37da2899SCharles.Forsyth FT_PFR_Service *aservice ) 27*37da2899SCharles.Forsyth { 28*37da2899SCharles.Forsyth FT_Error error = FT_Err_Bad_Argument; 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth if ( face && face->driver ) 31*37da2899SCharles.Forsyth { 32*37da2899SCharles.Forsyth FT_Module module = (FT_Module) face->driver; 33*37da2899SCharles.Forsyth const char* name = module->clazz->module_name; 34*37da2899SCharles.Forsyth 35*37da2899SCharles.Forsyth if ( name[0] == 'p' && 36*37da2899SCharles.Forsyth name[1] == 'f' && 37*37da2899SCharles.Forsyth name[2] == 'r' && 38*37da2899SCharles.Forsyth name[4] == 0 ) 39*37da2899SCharles.Forsyth { 40*37da2899SCharles.Forsyth *aservice = (FT_PFR_Service) module->clazz->module_interface; 41*37da2899SCharles.Forsyth error = 0; 42*37da2899SCharles.Forsyth } 43*37da2899SCharles.Forsyth } 44*37da2899SCharles.Forsyth return error; 45*37da2899SCharles.Forsyth } 46*37da2899SCharles.Forsyth 47*37da2899SCharles.Forsyth 48*37da2899SCharles.Forsyth 49*37da2899SCharles.Forsyth 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)50*37da2899SCharles.Forsyth FT_Get_PFR_Metrics( FT_Face face, 51*37da2899SCharles.Forsyth FT_UInt *aoutline_resolution, 52*37da2899SCharles.Forsyth FT_UInt *ametrics_resolution, 53*37da2899SCharles.Forsyth FT_Fixed *ametrics_x_scale, 54*37da2899SCharles.Forsyth FT_Fixed *ametrics_y_scale ) 55*37da2899SCharles.Forsyth { 56*37da2899SCharles.Forsyth FT_Error error; 57*37da2899SCharles.Forsyth FT_PFR_Service service; 58*37da2899SCharles.Forsyth 59*37da2899SCharles.Forsyth error = ft_pfr_check( face, &service ); 60*37da2899SCharles.Forsyth if ( !error ) 61*37da2899SCharles.Forsyth { 62*37da2899SCharles.Forsyth error = service->get_metrics( face, 63*37da2899SCharles.Forsyth aoutline_resolution, 64*37da2899SCharles.Forsyth ametrics_resolution, 65*37da2899SCharles.Forsyth ametrics_x_scale, 66*37da2899SCharles.Forsyth ametrics_y_scale ); 67*37da2899SCharles.Forsyth } 68*37da2899SCharles.Forsyth return error; 69*37da2899SCharles.Forsyth } 70*37da2899SCharles.Forsyth 71*37da2899SCharles.Forsyth FT_EXPORT_DEF( FT_Error ) FT_Get_PFR_Kerning(FT_Face face,FT_UInt left,FT_UInt right,FT_Vector * avector)72*37da2899SCharles.Forsyth FT_Get_PFR_Kerning( FT_Face face, 73*37da2899SCharles.Forsyth FT_UInt left, 74*37da2899SCharles.Forsyth FT_UInt right, 75*37da2899SCharles.Forsyth FT_Vector *avector ) 76*37da2899SCharles.Forsyth { 77*37da2899SCharles.Forsyth FT_Error error; 78*37da2899SCharles.Forsyth FT_PFR_Service service; 79*37da2899SCharles.Forsyth 80*37da2899SCharles.Forsyth error = ft_pfr_check( face, &service ); 81*37da2899SCharles.Forsyth if ( !error ) 82*37da2899SCharles.Forsyth { 83*37da2899SCharles.Forsyth error = service->get_kerning( face, left, right, avector ); 84*37da2899SCharles.Forsyth } 85*37da2899SCharles.Forsyth return error; 86*37da2899SCharles.Forsyth } 87*37da2899SCharles.Forsyth 88*37da2899SCharles.Forsyth 89*37da2899SCharles.Forsyth FT_EXPORT_DEF( FT_Error ) FT_Get_PFR_Advance(FT_Face face,FT_UInt gindex,FT_Pos * aadvance)90*37da2899SCharles.Forsyth FT_Get_PFR_Advance( FT_Face face, 91*37da2899SCharles.Forsyth FT_UInt gindex, 92*37da2899SCharles.Forsyth FT_Pos *aadvance ) 93*37da2899SCharles.Forsyth { 94*37da2899SCharles.Forsyth FT_Error error; 95*37da2899SCharles.Forsyth FT_PFR_Service service; 96*37da2899SCharles.Forsyth 97*37da2899SCharles.Forsyth error = ft_pfr_check( face, &service ); 98*37da2899SCharles.Forsyth if ( !error ) 99*37da2899SCharles.Forsyth { 100*37da2899SCharles.Forsyth error = service->get_advance( face, gindex, aadvance ); 101*37da2899SCharles.Forsyth } 102*37da2899SCharles.Forsyth return error; 103*37da2899SCharles.Forsyth } 104*37da2899SCharles.Forsyth 105*37da2899SCharles.Forsyth /* END */ 106