ReactOS 0.4.16-dev-319-g6cf4263
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
102 FT_Vector *avector )
103 {
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 {
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 */
#define NULL
Definition: types.h:112
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
@ FT_KERNING_UNSCALED
Definition: freetype.h:3391
return FT_Err_Ok
Definition: ftbbox.c:511
#define FT_EXPORT_DEF(x)
Definition: ftconfig.h:483
#define FT_THROW(e)
Definition: ftdebug.h:213
FT_BEGIN_HEADER typedef signed long FT_Pos
Definition: ftimage.h:58
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
static FT_Service_PfrMetrics ft_pfr_check(FT_Face face)
Definition: ftpfr.c:27
FT_Get_PFR_Advance(FT_Face face, FT_UInt gindex, FT_Pos *aadvance)
Definition: ftpfr.c:128
FT_Get_PFR_Kerning(FT_Face face, FT_UInt left, FT_UInt right, FT_Vector *avector)
Definition: ftpfr.c:99
#define FT_FACE_LOOKUP_SERVICE(face, ptr, id)
Definition: ftserv.h:950
signed long FT_Fixed
Definition: fttypes.h:288
int FT_Error
Definition: fttypes.h:300
unsigned int FT_UInt
Definition: fttypes.h:231
GLdouble GLdouble right
Definition: glext.h:10859
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLint left
Definition: glext.h:7726
#define error(str)
Definition: mkdosfs.c:1605