ReactOS 0.4.16-dev-2357-g35d0dfe
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 (C) 2002-2020 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
19
22
23
24 /* check the format */
25 static FT_Service_PfrMetrics
27 {
28 FT_Service_PfrMetrics service = NULL;
29
30
31 if ( face )
32 FT_FACE_LOOKUP_SERVICE( face, service, PFR_METRICS );
33
34 return service;
35 }
36
37
38 /* documentation is in ftpfr.h */
39
42 FT_UInt *aoutline_resolution,
43 FT_UInt *ametrics_resolution,
44 FT_Fixed *ametrics_x_scale,
45 FT_Fixed *ametrics_y_scale )
46 {
48 FT_Service_PfrMetrics service;
49
50
51 if ( !face )
52 return FT_THROW( Invalid_Face_Handle );
53
54 service = ft_pfr_check( face );
55 if ( service )
56 {
57 error = service->get_metrics( face,
58 aoutline_resolution,
59 ametrics_resolution,
60 ametrics_x_scale,
61 ametrics_y_scale );
62 }
63 else
64 {
65 FT_Fixed x_scale, y_scale;
66
67
68 /* this is not a PFR font */
69 if ( aoutline_resolution )
70 *aoutline_resolution = face->units_per_EM;
71
72 if ( ametrics_resolution )
73 *ametrics_resolution = face->units_per_EM;
74
75 x_scale = y_scale = 0x10000L;
76 if ( face->size )
77 {
78 x_scale = face->size->metrics.x_scale;
79 y_scale = face->size->metrics.y_scale;
80 }
81
82 if ( ametrics_x_scale )
83 *ametrics_x_scale = x_scale;
84
85 if ( ametrics_y_scale )
86 *ametrics_y_scale = y_scale;
87
88 error = FT_THROW( Unknown_File_Format );
89 }
90
91 return error;
92 }
93
94
95 /* documentation is in ftpfr.h */
96
101 FT_Vector *avector )
102 {
104 FT_Service_PfrMetrics service;
105
106
107 if ( !face )
108 return FT_THROW( Invalid_Face_Handle );
109
110 if ( !avector )
111 return FT_THROW( Invalid_Argument );
112
113 service = ft_pfr_check( face );
114 if ( service )
115 error = service->get_kerning( face, left, right, avector );
116 else
118 FT_KERNING_UNSCALED, avector );
119
120 return error;
121 }
122
123
124 /* documentation is in ftpfr.h */
125
128 FT_UInt gindex,
129 FT_Pos *aadvance )
130 {
132 FT_Service_PfrMetrics service;
133
134
135 if ( !face )
136 return FT_THROW( Invalid_Face_Handle );
137
138 if ( !aadvance )
139 return FT_THROW( Invalid_Argument );
140
141 service = ft_pfr_check( face );
142 if ( service )
143 error = service->get_advance( face, gindex, aadvance );
144 else
145 /* XXX: TODO: PROVIDE ADVANCE-LOADING METHOD TO ALL FONT DRIVERS */
146 error = FT_THROW( Invalid_Argument );
147
148 return error;
149 }
150
151
152/* END */
#define FT_EXPORT_DEF(x)
#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:3411
@ FT_KERNING_UNSCALED
Definition: freetype.h:3408
return FT_Err_Ok
Definition: ftbbox.c:526
#define FT_THROW(e)
Definition: ftdebug.h:243
FT_BEGIN_HEADER typedef signed long FT_Pos
Definition: ftimage.h:57
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:41
static FT_Service_PfrMetrics ft_pfr_check(FT_Face face)
Definition: ftpfr.c:26
FT_Get_PFR_Advance(FT_Face face, FT_UInt gindex, FT_Pos *aadvance)
Definition: ftpfr.c:127
FT_Get_PFR_Kerning(FT_Face face, FT_UInt left, FT_UInt right, FT_Vector *avector)
Definition: ftpfr.c:98
#define FT_FACE_LOOKUP_SERVICE(face, ptr, id)
Definition: ftserv.h:456
signed long FT_Fixed
Definition: fttypes.h:287
int FT_Error
Definition: fttypes.h:299
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