1 | /***************************************************************************/ |
2 | /* */ |
3 | /* ftrender.h */ |
4 | /* */ |
5 | /* FreeType renderer modules public interface (specification). */ |
6 | /* */ |
7 | /* Copyright 1996-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 | |
19 | #ifndef FTRENDER_H_ |
20 | #define FTRENDER_H_ |
21 | |
22 | |
23 | #include <ft2build.h> |
24 | #include FT_MODULE_H |
25 | #include FT_GLYPH_H |
26 | |
27 | |
28 | FT_BEGIN_HEADER |
29 | |
30 | |
31 | /*************************************************************************/ |
32 | /* */ |
33 | /* <Section> */ |
34 | /* module_management */ |
35 | /* */ |
36 | /*************************************************************************/ |
37 | |
38 | |
39 | /* create a new glyph object */ |
40 | typedef FT_Error |
41 | (*FT_Glyph_InitFunc)( FT_Glyph glyph, |
42 | FT_GlyphSlot slot ); |
43 | |
44 | /* destroys a given glyph object */ |
45 | typedef void |
46 | (*FT_Glyph_DoneFunc)( FT_Glyph glyph ); |
47 | |
48 | typedef void |
49 | (*FT_Glyph_TransformFunc)( FT_Glyph glyph, |
50 | const FT_Matrix* matrix, |
51 | const FT_Vector* delta ); |
52 | |
53 | typedef void |
54 | (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph, |
55 | FT_BBox* abbox ); |
56 | |
57 | typedef FT_Error |
58 | (*FT_Glyph_CopyFunc)( FT_Glyph source, |
59 | FT_Glyph target ); |
60 | |
61 | typedef FT_Error |
62 | (*FT_Glyph_PrepareFunc)( FT_Glyph glyph, |
63 | FT_GlyphSlot slot ); |
64 | |
65 | /* deprecated */ |
66 | #define FT_Glyph_Init_Func FT_Glyph_InitFunc |
67 | #define FT_Glyph_Done_Func FT_Glyph_DoneFunc |
68 | #define FT_Glyph_Transform_Func FT_Glyph_TransformFunc |
69 | #define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc |
70 | #define FT_Glyph_Copy_Func FT_Glyph_CopyFunc |
71 | #define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc |
72 | |
73 | |
74 | struct FT_Glyph_Class_ |
75 | { |
76 | FT_Long glyph_size; |
77 | FT_Glyph_Format glyph_format; |
78 | |
79 | FT_Glyph_InitFunc glyph_init; |
80 | FT_Glyph_DoneFunc glyph_done; |
81 | FT_Glyph_CopyFunc glyph_copy; |
82 | FT_Glyph_TransformFunc glyph_transform; |
83 | FT_Glyph_GetBBoxFunc glyph_bbox; |
84 | FT_Glyph_PrepareFunc glyph_prepare; |
85 | }; |
86 | |
87 | |
88 | typedef FT_Error |
89 | (*FT_Renderer_RenderFunc)( FT_Renderer renderer, |
90 | FT_GlyphSlot slot, |
91 | FT_Render_Mode mode, |
92 | const FT_Vector* origin ); |
93 | |
94 | typedef FT_Error |
95 | (*FT_Renderer_TransformFunc)( FT_Renderer renderer, |
96 | FT_GlyphSlot slot, |
97 | const FT_Matrix* matrix, |
98 | const FT_Vector* delta ); |
99 | |
100 | |
101 | typedef void |
102 | (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer, |
103 | FT_GlyphSlot slot, |
104 | FT_BBox* cbox ); |
105 | |
106 | |
107 | typedef FT_Error |
108 | (*FT_Renderer_SetModeFunc)( FT_Renderer renderer, |
109 | FT_ULong mode_tag, |
110 | FT_Pointer mode_ptr ); |
111 | |
112 | /* deprecated identifiers */ |
113 | #define FTRenderer_render FT_Renderer_RenderFunc |
114 | #define FTRenderer_transform FT_Renderer_TransformFunc |
115 | #define FTRenderer_getCBox FT_Renderer_GetCBoxFunc |
116 | #define FTRenderer_setMode FT_Renderer_SetModeFunc |
117 | |
118 | |
119 | /*************************************************************************/ |
120 | /* */ |
121 | /* <Struct> */ |
122 | /* FT_Renderer_Class */ |
123 | /* */ |
124 | /* <Description> */ |
125 | /* The renderer module class descriptor. */ |
126 | /* */ |
127 | /* <Fields> */ |
128 | /* root :: The root @FT_Module_Class fields. */ |
129 | /* */ |
130 | /* glyph_format :: The glyph image format this renderer handles. */ |
131 | /* */ |
132 | /* render_glyph :: A method used to render the image that is in a */ |
133 | /* given glyph slot into a bitmap. */ |
134 | /* */ |
135 | /* transform_glyph :: A method used to transform the image that is in */ |
136 | /* a given glyph slot. */ |
137 | /* */ |
138 | /* get_glyph_cbox :: A method used to access the glyph's cbox. */ |
139 | /* */ |
140 | /* set_mode :: A method used to pass additional parameters. */ |
141 | /* */ |
142 | /* raster_class :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */ |
143 | /* This is a pointer to its raster's class. */ |
144 | /* */ |
145 | typedef struct FT_Renderer_Class_ |
146 | { |
147 | FT_Module_Class root; |
148 | |
149 | FT_Glyph_Format glyph_format; |
150 | |
151 | FT_Renderer_RenderFunc render_glyph; |
152 | FT_Renderer_TransformFunc transform_glyph; |
153 | FT_Renderer_GetCBoxFunc get_glyph_cbox; |
154 | FT_Renderer_SetModeFunc set_mode; |
155 | |
156 | FT_Raster_Funcs* raster_class; |
157 | |
158 | } FT_Renderer_Class; |
159 | |
160 | |
161 | /*************************************************************************/ |
162 | /* */ |
163 | /* <Function> */ |
164 | /* FT_Get_Renderer */ |
165 | /* */ |
166 | /* <Description> */ |
167 | /* Retrieve the current renderer for a given glyph format. */ |
168 | /* */ |
169 | /* <Input> */ |
170 | /* library :: A handle to the library object. */ |
171 | /* */ |
172 | /* format :: The glyph format. */ |
173 | /* */ |
174 | /* <Return> */ |
175 | /* A renderer handle. 0~if none found. */ |
176 | /* */ |
177 | /* <Note> */ |
178 | /* An error will be returned if a module already exists by that name, */ |
179 | /* or if the module requires a version of FreeType that is too great. */ |
180 | /* */ |
181 | /* To add a new renderer, simply use @FT_Add_Module. To retrieve a */ |
182 | /* renderer by its name, use @FT_Get_Module. */ |
183 | /* */ |
184 | FT_EXPORT( FT_Renderer ) |
185 | FT_Get_Renderer( FT_Library library, |
186 | FT_Glyph_Format format ); |
187 | |
188 | |
189 | /*************************************************************************/ |
190 | /* */ |
191 | /* <Function> */ |
192 | /* FT_Set_Renderer */ |
193 | /* */ |
194 | /* <Description> */ |
195 | /* Set the current renderer to use, and set additional mode. */ |
196 | /* */ |
197 | /* <InOut> */ |
198 | /* library :: A handle to the library object. */ |
199 | /* */ |
200 | /* <Input> */ |
201 | /* renderer :: A handle to the renderer object. */ |
202 | /* */ |
203 | /* num_params :: The number of additional parameters. */ |
204 | /* */ |
205 | /* parameters :: Additional parameters. */ |
206 | /* */ |
207 | /* <Return> */ |
208 | /* FreeType error code. 0~means success. */ |
209 | /* */ |
210 | /* <Note> */ |
211 | /* In case of success, the renderer will be used to convert glyph */ |
212 | /* images in the renderer's known format into bitmaps. */ |
213 | /* */ |
214 | /* This doesn't change the current renderer for other formats. */ |
215 | /* */ |
216 | /* Currently, no FreeType renderer module uses `parameters'; you */ |
217 | /* should thus always pass NULL as the value. */ |
218 | /* */ |
219 | FT_EXPORT( FT_Error ) |
220 | FT_Set_Renderer( FT_Library library, |
221 | FT_Renderer renderer, |
222 | FT_UInt num_params, |
223 | FT_Parameter* parameters ); |
224 | |
225 | /* */ |
226 | |
227 | |
228 | FT_END_HEADER |
229 | |
230 | #endif /* FTRENDER_H_ */ |
231 | |
232 | |
233 | /* END */ |
234 | |