1 /****************************************************************************
5 * FreeType API for accessing PFR-specific data (body).
7 * Copyright (C) 2002-2023 by
8 * David Turner, Robert Wilhelm, and Werner Lemberg.
10 * This file is part of the FreeType project, and may only be used,
11 * modified, and distributed under the terms of the FreeType project
12 * license, LICENSE.TXT. By continuing to use, modify, or distribute
13 * this file you indicate that you have read the license and
14 * understand and accept it fully.
18 #include <freetype/internal/ftdebug.h>
20 #include <freetype/internal/ftobjs.h>
21 #include <freetype/internal/services/svpfr.h>
24 /* check the format */
25 static FT_Service_PfrMetrics
26 ft_pfr_check( FT_Face face )
28 FT_Service_PfrMetrics service = NULL;
32 FT_FACE_LOOKUP_SERVICE( face, service, PFR_METRICS );
38 /* documentation is in ftpfr.h */
40 FT_EXPORT_DEF( FT_Error )
41 FT_Get_PFR_Metrics( FT_Face face,
42 FT_UInt *aoutline_resolution,
43 FT_UInt *ametrics_resolution,
44 FT_Fixed *ametrics_x_scale,
45 FT_Fixed *ametrics_y_scale )
47 FT_Error error = FT_Err_Ok;
48 FT_Service_PfrMetrics service;
52 return FT_THROW( Invalid_Face_Handle );
54 service = ft_pfr_check( face );
57 error = service->get_metrics( face,
65 FT_Fixed x_scale, y_scale;
68 /* this is not a PFR font */
69 if ( aoutline_resolution )
70 *aoutline_resolution = face->units_per_EM;
72 if ( ametrics_resolution )
73 *ametrics_resolution = face->units_per_EM;
75 x_scale = y_scale = 0x10000L;
78 x_scale = face->size->metrics.x_scale;
79 y_scale = face->size->metrics.y_scale;
82 if ( ametrics_x_scale )
83 *ametrics_x_scale = x_scale;
85 if ( ametrics_y_scale )
86 *ametrics_y_scale = y_scale;
88 error = FT_THROW( Unknown_File_Format );
95 /* documentation is in ftpfr.h */
97 FT_EXPORT_DEF( FT_Error )
98 FT_Get_PFR_Kerning( FT_Face face,
104 FT_Service_PfrMetrics service;
108 return FT_THROW( Invalid_Face_Handle );
111 return FT_THROW( Invalid_Argument );
113 service = ft_pfr_check( face );
115 error = service->get_kerning( face, left, right, avector );
117 error = FT_Get_Kerning( face, left, right,
118 FT_KERNING_UNSCALED, avector );
124 /* documentation is in ftpfr.h */
126 FT_EXPORT_DEF( FT_Error )
127 FT_Get_PFR_Advance( FT_Face face,
132 FT_Service_PfrMetrics service;
136 return FT_THROW( Invalid_Face_Handle );
139 return FT_THROW( Invalid_Argument );
141 service = ft_pfr_check( face );
143 error = service->get_advance( face, gindex, aadvance );
145 /* XXX: TODO: PROVIDE ADVANCE-LOADING METHOD TO ALL FONT DRIVERS */
146 error = FT_THROW( Invalid_Argument );