/src/freetype/src/base/ftpfr.c
https://bitbucket.org/cabalistic/ogredeps/ · C · 144 lines · 86 code · 35 blank · 23 comment · 11 complexity · be7060b6a162a94f85a75784746f73fe MD5 · raw file
- /***************************************************************************/
- /* */
- /* ftpfr.c */
- /* */
- /* FreeType API for accessing PFR-specific data (body). */
- /* */
- /* Copyright 2002, 2003, 2004, 2008, 2010 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_OBJECTS_H
- #include FT_SERVICE_PFR_H
- /* check the format */
- static FT_Service_PfrMetrics
- ft_pfr_check( FT_Face face )
- {
- FT_Service_PfrMetrics service = NULL;
- if ( face )
- FT_FACE_LOOKUP_SERVICE( face, service, PFR_METRICS );
- return service;
- }
- /* documentation is in ftpfr.h */
- 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_Err_Ok;
- FT_Service_PfrMetrics service;
- if ( !face )
- return FT_Err_Invalid_Argument;
- service = ft_pfr_check( face );
- if ( service )
- {
- error = service->get_metrics( face,
- aoutline_resolution,
- ametrics_resolution,
- ametrics_x_scale,
- ametrics_y_scale );
- }
- else
- {
- FT_Fixed x_scale, y_scale;
- /* this is not a PFR font */
- if ( aoutline_resolution )
- *aoutline_resolution = face->units_per_EM;
- if ( ametrics_resolution )
- *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;
- }
- if ( ametrics_x_scale )
- *ametrics_x_scale = x_scale;
- if ( ametrics_y_scale )
- *ametrics_y_scale = y_scale;
- error = FT_Err_Unknown_File_Format;
- }
- return error;
- }
- /* documentation is in ftpfr.h */
- 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_Service_PfrMetrics service;
- if ( !face )
- return FT_Err_Invalid_Argument;
- service = ft_pfr_check( face );
- if ( service )
- error = service->get_kerning( face, left, right, avector );
- else
- error = FT_Get_Kerning( face, left, right,
- FT_KERNING_UNSCALED, avector );
- return error;
- }
- /* documentation is in ftpfr.h */
- FT_EXPORT_DEF( FT_Error )
- FT_Get_PFR_Advance( FT_Face face,
- FT_UInt gindex,
- FT_Pos *aadvance )
- {
- FT_Error error;
- FT_Service_PfrMetrics service;
- 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;
- }
- /* END */