xref: /inferno-os/libfreetype/ftpfr.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
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