]>
Commit | Line | Data |
---|---|---|
7407ac7f BB |
1 | /***************************************************************************/ |
2 | /* */ | |
3 | /* ftmm.h */ | |
4 | /* */ | |
5 | /* FreeType Multiple Master font interface (specification). */ | |
6 | /* */ | |
7 | /* Copyright 1996-2001, 2003, 2004, 2006, 2009 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 __FTMM_H__ | |
20 | #define __FTMM_H__ | |
21 | ||
22 | ||
23 | #include <ft2build.h> | |
24 | #include FT_TYPE1_TABLES_H | |
25 | ||
26 | ||
27 | FT_BEGIN_HEADER | |
28 | ||
29 | ||
30 | /*************************************************************************/ | |
31 | /* */ | |
32 | /* <Section> */ | |
33 | /* multiple_masters */ | |
34 | /* */ | |
35 | /* <Title> */ | |
36 | /* Multiple Masters */ | |
37 | /* */ | |
38 | /* <Abstract> */ | |
39 | /* How to manage Multiple Masters fonts. */ | |
40 | /* */ | |
41 | /* <Description> */ | |
42 | /* The following types and functions are used to manage Multiple */ | |
43 | /* Master fonts, i.e., the selection of specific design instances by */ | |
44 | /* setting design axis coordinates. */ | |
45 | /* */ | |
46 | /* George Williams has extended this interface to make it work with */ | |
47 | /* both Type~1 Multiple Masters fonts and GX distortable (var) */ | |
48 | /* fonts. Some of these routines only work with MM fonts, others */ | |
49 | /* will work with both types. They are similar enough that a */ | |
50 | /* consistent interface makes sense. */ | |
51 | /* */ | |
52 | /*************************************************************************/ | |
53 | ||
54 | ||
55 | /*************************************************************************/ | |
56 | /* */ | |
57 | /* <Struct> */ | |
58 | /* FT_MM_Axis */ | |
59 | /* */ | |
60 | /* <Description> */ | |
61 | /* A simple structure used to model a given axis in design space for */ | |
62 | /* Multiple Masters fonts. */ | |
63 | /* */ | |
64 | /* This structure can't be used for GX var fonts. */ | |
65 | /* */ | |
66 | /* <Fields> */ | |
67 | /* name :: The axis's name. */ | |
68 | /* */ | |
69 | /* minimum :: The axis's minimum design coordinate. */ | |
70 | /* */ | |
71 | /* maximum :: The axis's maximum design coordinate. */ | |
72 | /* */ | |
73 | typedef struct FT_MM_Axis_ | |
74 | { | |
75 | FT_String* name; | |
76 | FT_Long minimum; | |
77 | FT_Long maximum; | |
78 | ||
79 | } FT_MM_Axis; | |
80 | ||
81 | ||
82 | /*************************************************************************/ | |
83 | /* */ | |
84 | /* <Struct> */ | |
85 | /* FT_Multi_Master */ | |
86 | /* */ | |
87 | /* <Description> */ | |
88 | /* A structure used to model the axes and space of a Multiple Masters */ | |
89 | /* font. */ | |
90 | /* */ | |
91 | /* This structure can't be used for GX var fonts. */ | |
92 | /* */ | |
93 | /* <Fields> */ | |
94 | /* num_axis :: Number of axes. Cannot exceed~4. */ | |
95 | /* */ | |
96 | /* num_designs :: Number of designs; should be normally 2^num_axis */ | |
97 | /* even though the Type~1 specification strangely */ | |
98 | /* allows for intermediate designs to be present. This */ | |
99 | /* number cannot exceed~16. */ | |
100 | /* */ | |
101 | /* axis :: A table of axis descriptors. */ | |
102 | /* */ | |
103 | typedef struct FT_Multi_Master_ | |
104 | { | |
105 | FT_UInt num_axis; | |
106 | FT_UInt num_designs; | |
107 | FT_MM_Axis axis[T1_MAX_MM_AXIS]; | |
108 | ||
109 | } FT_Multi_Master; | |
110 | ||
111 | ||
112 | /*************************************************************************/ | |
113 | /* */ | |
114 | /* <Struct> */ | |
115 | /* FT_Var_Axis */ | |
116 | /* */ | |
117 | /* <Description> */ | |
118 | /* A simple structure used to model a given axis in design space for */ | |
119 | /* Multiple Masters and GX var fonts. */ | |
120 | /* */ | |
121 | /* <Fields> */ | |
122 | /* name :: The axis's name. */ | |
123 | /* Not always meaningful for GX. */ | |
124 | /* */ | |
125 | /* minimum :: The axis's minimum design coordinate. */ | |
126 | /* */ | |
127 | /* def :: The axis's default design coordinate. */ | |
128 | /* FreeType computes meaningful default values for MM; it */ | |
129 | /* is then an integer value, not in 16.16 format. */ | |
130 | /* */ | |
131 | /* maximum :: The axis's maximum design coordinate. */ | |
132 | /* */ | |
133 | /* tag :: The axis's tag (the GX equivalent to `name'). */ | |
134 | /* FreeType provides default values for MM if possible. */ | |
135 | /* */ | |
136 | /* strid :: The entry in `name' table (another GX version of */ | |
137 | /* `name'). */ | |
138 | /* Not meaningful for MM. */ | |
139 | /* */ | |
140 | typedef struct FT_Var_Axis_ | |
141 | { | |
142 | FT_String* name; | |
143 | ||
144 | FT_Fixed minimum; | |
145 | FT_Fixed def; | |
146 | FT_Fixed maximum; | |
147 | ||
148 | FT_ULong tag; | |
149 | FT_UInt strid; | |
150 | ||
151 | } FT_Var_Axis; | |
152 | ||
153 | ||
154 | /*************************************************************************/ | |
155 | /* */ | |
156 | /* <Struct> */ | |
157 | /* FT_Var_Named_Style */ | |
158 | /* */ | |
159 | /* <Description> */ | |
160 | /* A simple structure used to model a named style in a GX var font. */ | |
161 | /* */ | |
162 | /* This structure can't be used for MM fonts. */ | |
163 | /* */ | |
164 | /* <Fields> */ | |
165 | /* coords :: The design coordinates for this style. */ | |
166 | /* This is an array with one entry for each axis. */ | |
167 | /* */ | |
168 | /* strid :: The entry in `name' table identifying this style. */ | |
169 | /* */ | |
170 | typedef struct FT_Var_Named_Style_ | |
171 | { | |
172 | FT_Fixed* coords; | |
173 | FT_UInt strid; | |
174 | ||
175 | } FT_Var_Named_Style; | |
176 | ||
177 | ||
178 | /*************************************************************************/ | |
179 | /* */ | |
180 | /* <Struct> */ | |
181 | /* FT_MM_Var */ | |
182 | /* */ | |
183 | /* <Description> */ | |
184 | /* A structure used to model the axes and space of a Multiple Masters */ | |
185 | /* or GX var distortable font. */ | |
186 | /* */ | |
187 | /* Some fields are specific to one format and not to the other. */ | |
188 | /* */ | |
189 | /* <Fields> */ | |
190 | /* num_axis :: The number of axes. The maximum value is~4 for */ | |
191 | /* MM; no limit in GX. */ | |
192 | /* */ | |
193 | /* num_designs :: The number of designs; should be normally */ | |
194 | /* 2^num_axis for MM fonts. Not meaningful for GX */ | |
195 | /* (where every glyph could have a different */ | |
196 | /* number of designs). */ | |
197 | /* */ | |
198 | /* num_namedstyles :: The number of named styles; only meaningful for */ | |
199 | /* GX which allows certain design coordinates to */ | |
200 | /* have a string ID (in the `name' table) */ | |
201 | /* associated with them. The font can tell the */ | |
202 | /* user that, for example, Weight=1.5 is `Bold'. */ | |
203 | /* */ | |
204 | /* axis :: A table of axis descriptors. */ | |
205 | /* GX fonts contain slightly more data than MM. */ | |
206 | /* */ | |
207 | /* namedstyles :: A table of named styles. */ | |
208 | /* Only meaningful with GX. */ | |
209 | /* */ | |
210 | typedef struct FT_MM_Var_ | |
211 | { | |
212 | FT_UInt num_axis; | |
213 | FT_UInt num_designs; | |
214 | FT_UInt num_namedstyles; | |
215 | FT_Var_Axis* axis; | |
216 | FT_Var_Named_Style* namedstyle; | |
217 | ||
218 | } FT_MM_Var; | |
219 | ||
220 | ||
221 | /* */ | |
222 | ||
223 | ||
224 | /*************************************************************************/ | |
225 | /* */ | |
226 | /* <Function> */ | |
227 | /* FT_Get_Multi_Master */ | |
228 | /* */ | |
229 | /* <Description> */ | |
230 | /* Retrieve the Multiple Master descriptor of a given font. */ | |
231 | /* */ | |
232 | /* This function can't be used with GX fonts. */ | |
233 | /* */ | |
234 | /* <Input> */ | |
235 | /* face :: A handle to the source face. */ | |
236 | /* */ | |
237 | /* <Output> */ | |
238 | /* amaster :: The Multiple Masters descriptor. */ | |
239 | /* */ | |
240 | /* <Return> */ | |
241 | /* FreeType error code. 0~means success. */ | |
242 | /* */ | |
243 | FT_EXPORT( FT_Error ) | |
244 | FT_Get_Multi_Master( FT_Face face, | |
245 | FT_Multi_Master *amaster ); | |
246 | ||
247 | ||
248 | /*************************************************************************/ | |
249 | /* */ | |
250 | /* <Function> */ | |
251 | /* FT_Get_MM_Var */ | |
252 | /* */ | |
253 | /* <Description> */ | |
254 | /* Retrieve the Multiple Master/GX var descriptor of a given font. */ | |
255 | /* */ | |
256 | /* <Input> */ | |
257 | /* face :: A handle to the source face. */ | |
258 | /* */ | |
259 | /* <Output> */ | |
260 | /* amaster :: The Multiple Masters/GX var descriptor. */ | |
261 | /* Allocates a data structure, which the user must free */ | |
262 | /* (a single call to FT_FREE will do it). */ | |
263 | /* */ | |
264 | /* <Return> */ | |
265 | /* FreeType error code. 0~means success. */ | |
266 | /* */ | |
267 | FT_EXPORT( FT_Error ) | |
268 | FT_Get_MM_Var( FT_Face face, | |
269 | FT_MM_Var* *amaster ); | |
270 | ||
271 | ||
272 | /*************************************************************************/ | |
273 | /* */ | |
274 | /* <Function> */ | |
275 | /* FT_Set_MM_Design_Coordinates */ | |
276 | /* */ | |
277 | /* <Description> */ | |
278 | /* For Multiple Masters fonts, choose an interpolated font design */ | |
279 | /* through design coordinates. */ | |
280 | /* */ | |
281 | /* This function can't be used with GX fonts. */ | |
282 | /* */ | |
283 | /* <InOut> */ | |
284 | /* face :: A handle to the source face. */ | |
285 | /* */ | |
286 | /* <Input> */ | |
287 | /* num_coords :: The number of design coordinates (must be equal to */ | |
288 | /* the number of axes in the font). */ | |
289 | /* */ | |
290 | /* coords :: An array of design coordinates. */ | |
291 | /* */ | |
292 | /* <Return> */ | |
293 | /* FreeType error code. 0~means success. */ | |
294 | /* */ | |
295 | FT_EXPORT( FT_Error ) | |
296 | FT_Set_MM_Design_Coordinates( FT_Face face, | |
297 | FT_UInt num_coords, | |
298 | FT_Long* coords ); | |
299 | ||
300 | ||
301 | /*************************************************************************/ | |
302 | /* */ | |
303 | /* <Function> */ | |
304 | /* FT_Set_Var_Design_Coordinates */ | |
305 | /* */ | |
306 | /* <Description> */ | |
307 | /* For Multiple Master or GX Var fonts, choose an interpolated font */ | |
308 | /* design through design coordinates. */ | |
309 | /* */ | |
310 | /* <InOut> */ | |
311 | /* face :: A handle to the source face. */ | |
312 | /* */ | |
313 | /* <Input> */ | |
314 | /* num_coords :: The number of design coordinates (must be equal to */ | |
315 | /* the number of axes in the font). */ | |
316 | /* */ | |
317 | /* coords :: An array of design coordinates. */ | |
318 | /* */ | |
319 | /* <Return> */ | |
320 | /* FreeType error code. 0~means success. */ | |
321 | /* */ | |
322 | FT_EXPORT( FT_Error ) | |
323 | FT_Set_Var_Design_Coordinates( FT_Face face, | |
324 | FT_UInt num_coords, | |
325 | FT_Fixed* coords ); | |
326 | ||
327 | ||
328 | /*************************************************************************/ | |
329 | /* */ | |
330 | /* <Function> */ | |
331 | /* FT_Set_MM_Blend_Coordinates */ | |
332 | /* */ | |
333 | /* <Description> */ | |
334 | /* For Multiple Masters and GX var fonts, choose an interpolated font */ | |
335 | /* design through normalized blend coordinates. */ | |
336 | /* */ | |
337 | /* <InOut> */ | |
338 | /* face :: A handle to the source face. */ | |
339 | /* */ | |
340 | /* <Input> */ | |
341 | /* num_coords :: The number of design coordinates (must be equal to */ | |
342 | /* the number of axes in the font). */ | |
343 | /* */ | |
344 | /* coords :: The design coordinates array (each element must be */ | |
345 | /* between 0 and 1.0). */ | |
346 | /* */ | |
347 | /* <Return> */ | |
348 | /* FreeType error code. 0~means success. */ | |
349 | /* */ | |
350 | FT_EXPORT( FT_Error ) | |
351 | FT_Set_MM_Blend_Coordinates( FT_Face face, | |
352 | FT_UInt num_coords, | |
353 | FT_Fixed* coords ); | |
354 | ||
355 | ||
356 | /*************************************************************************/ | |
357 | /* */ | |
358 | /* <Function> */ | |
359 | /* FT_Set_Var_Blend_Coordinates */ | |
360 | /* */ | |
361 | /* <Description> */ | |
362 | /* This is another name of @FT_Set_MM_Blend_Coordinates. */ | |
363 | /* */ | |
364 | FT_EXPORT( FT_Error ) | |
365 | FT_Set_Var_Blend_Coordinates( FT_Face face, | |
366 | FT_UInt num_coords, | |
367 | FT_Fixed* coords ); | |
368 | ||
369 | ||
370 | /* */ | |
371 | ||
372 | ||
373 | FT_END_HEADER | |
374 | ||
375 | #endif /* __FTMM_H__ */ | |
376 | ||
377 | ||
378 | /* END */ |