ReactOS  0.4.14-dev-376-gaedba84
ftpfr.c
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* ftpfr.c */
4 /* */
5 /* FreeType API for accessing PFR-specific data (body). */
6 /* */
7 /* Copyright 2002-2018 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
9 /* */
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. */
15 /* */
16 /***************************************************************************/
17 
18 #include <ft2build.h>
19 #include FT_INTERNAL_DEBUG_H
20 
21 #include FT_INTERNAL_OBJECTS_H
22 #include FT_SERVICE_PFR_H
23 
24 
25  /* check the format */
26  static FT_Service_PfrMetrics
28  {
29  FT_Service_PfrMetrics service = NULL;
30 
31 
32  if ( face )
33  FT_FACE_LOOKUP_SERVICE( face, service, PFR_METRICS );
34 
35  return service;
36  }
37 
38 
39  /* documentation is in ftpfr.h */
40 
43  FT_UInt *aoutline_resolution,
44  FT_UInt *ametrics_resolution,
45  FT_Fixed *ametrics_x_scale,
46  FT_Fixed *ametrics_y_scale )
47  {
49  FT_Service_PfrMetrics service;
50 
51 
52  if ( !face )
53  return FT_THROW( Invalid_Face_Handle );
54 
55  service = ft_pfr_check( face );
56  if ( service )
57  {
58  error = service->get_metrics( face,
59  aoutline_resolution,
60  ametrics_resolution,
61  ametrics_x_scale,
62  ametrics_y_scale );
63  }
64  else
65  {
66  FT_Fixed x_scale, y_scale;
67 
68 
69  /* this is not a PFR font */
70  if ( aoutline_resolution )
71  *aoutline_resolution = face->units_per_EM;
72 
73  if ( ametrics_resolution )
74  *ametrics_resolution = face->units_per_EM;
75 
76  x_scale = y_scale = 0x10000L;
77  if ( face->size )
78  {
79  x_scale = face->size->metrics.x_scale;
80  y_scale = face->size->metrics.y_scale;
81  }
82 
83  if ( ametrics_x_scale )
84  *ametrics_x_scale = x_scale;
85 
86  if ( ametrics_y_scale )
87  *ametrics_y_scale = y_scale;
88 
89  error = FT_THROW( Unknown_File_Format );
90  }
91 
92  return error;
93  }
94 
95 
96  /* documentation is in ftpfr.h */
97 
100  FT_UInt left,
101  FT_UInt right,
102  FT_Vector *avector )
103  {
104  FT_Error error;
105  FT_Service_PfrMetrics service;
106 
107 
108  if ( !face )
109  return FT_THROW( Invalid_Face_Handle );
110 
111  if ( !avector )
112  return FT_THROW( Invalid_Argument );
113 
114  service = ft_pfr_check( face );
115  if ( service )
116  error = service->get_kerning( face, left, right, avector );
117  else
119  FT_KERNING_UNSCALED, avector );
120 
121  return error;
122  }
123 
124 
125  /* documentation is in ftpfr.h */
126 
129  FT_UInt gindex,
130  FT_Pos *aadvance )
131  {
132  FT_Error error;
133  FT_Service_PfrMetrics service;
134 
135 
136  if ( !face )
137  return FT_THROW( Invalid_Face_Handle );
138 
139  if ( !aadvance )
140  return FT_THROW( Invalid_Argument );
141 
142  service = ft_pfr_check( face );
143  if ( service )
144  error = service->get_advance( face, gindex, aadvance );
145  else
146  /* XXX: TODO: PROVIDE ADVANCE-LOADING METHOD TO ALL FONT DRIVERS */
147  error = FT_THROW( Invalid_Argument );
148 
149  return error;
150  }
151 
152 
153 /* END */
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)
Definition: ftpfr.c:42
FT_Get_Kerning(FT_Face face, FT_UInt left_glyph, FT_UInt right_glyph, FT_UInt kern_mode, FT_Vector *akerning)
Definition: ftobjs.c:3347
int FT_Error
Definition: fttypes.h:300
FT_BEGIN_HEADER typedef signed long FT_Pos
Definition: ftimage.h:58
#define error(str)
Definition: mkdosfs.c:1605
static FT_Service_PfrMetrics ft_pfr_check(FT_Face face)
Definition: ftpfr.c:27
return FT_Err_Ok
Definition: ftbbox.c:511
FT_Get_PFR_Kerning(FT_Face face, FT_UInt left, FT_UInt right, FT_Vector *avector)
Definition: ftpfr.c:99
#define FT_THROW(e)
Definition: ftdebug.h:213
#define FT_FACE_LOOKUP_SERVICE(face, ptr, id)
Definition: ftserv.h:950
smooth NULL
Definition: ftsmooth.c:416
GLint left
Definition: glext.h:7726
GLdouble GLdouble right
Definition: glext.h:10859
static const WCHAR L[]
Definition: oid.c:1250
FT_Get_PFR_Advance(FT_Face face, FT_UInt gindex, FT_Pos *aadvance)
Definition: ftpfr.c:128
signed long FT_Fixed
Definition: fttypes.h:288
#define FT_EXPORT_DEF(x)
Definition: ftconfig.h:483
unsigned int FT_UInt
Definition: fttypes.h:231
GLenum GLuint GLint GLenum face
Definition: glext.h:7025