1/***************************************************************************/
2/* */
3/* fttypes.h */
4/* */
5/* FreeType simple types definitions (specification only). */
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 FTTYPES_H_
20#define FTTYPES_H_
21
22
23#include <ft2build.h>
24#include FT_CONFIG_CONFIG_H
25#include FT_SYSTEM_H
26#include FT_IMAGE_H
27
28#include <stddef.h>
29
30
31FT_BEGIN_HEADER
32
33
34 /*************************************************************************/
35 /* */
36 /* <Section> */
37 /* basic_types */
38 /* */
39 /* <Title> */
40 /* Basic Data Types */
41 /* */
42 /* <Abstract> */
43 /* The basic data types defined by the library. */
44 /* */
45 /* <Description> */
46 /* This section contains the basic data types defined by FreeType~2, */
47 /* ranging from simple scalar types to bitmap descriptors. More */
48 /* font-specific structures are defined in a different section. */
49 /* */
50 /* <Order> */
51 /* FT_Byte */
52 /* FT_Bytes */
53 /* FT_Char */
54 /* FT_Int */
55 /* FT_UInt */
56 /* FT_Int16 */
57 /* FT_UInt16 */
58 /* FT_Int32 */
59 /* FT_UInt32 */
60 /* FT_Int64 */
61 /* FT_UInt64 */
62 /* FT_Short */
63 /* FT_UShort */
64 /* FT_Long */
65 /* FT_ULong */
66 /* FT_Bool */
67 /* FT_Offset */
68 /* FT_PtrDist */
69 /* FT_String */
70 /* FT_Tag */
71 /* FT_Error */
72 /* FT_Fixed */
73 /* FT_Pointer */
74 /* FT_Pos */
75 /* FT_Vector */
76 /* FT_BBox */
77 /* FT_Matrix */
78 /* FT_FWord */
79 /* FT_UFWord */
80 /* FT_F2Dot14 */
81 /* FT_UnitVector */
82 /* FT_F26Dot6 */
83 /* FT_Data */
84 /* */
85 /* FT_MAKE_TAG */
86 /* */
87 /* FT_Generic */
88 /* FT_Generic_Finalizer */
89 /* */
90 /* FT_Bitmap */
91 /* FT_Pixel_Mode */
92 /* FT_Palette_Mode */
93 /* FT_Glyph_Format */
94 /* FT_IMAGE_TAG */
95 /* */
96 /*************************************************************************/
97
98
99 /*************************************************************************/
100 /* */
101 /* <Type> */
102 /* FT_Bool */
103 /* */
104 /* <Description> */
105 /* A typedef of unsigned char, used for simple booleans. As usual, */
106 /* values 1 and~0 represent true and false, respectively. */
107 /* */
108 typedef unsigned char FT_Bool;
109
110
111 /*************************************************************************/
112 /* */
113 /* <Type> */
114 /* FT_FWord */
115 /* */
116 /* <Description> */
117 /* A signed 16-bit integer used to store a distance in original font */
118 /* units. */
119 /* */
120 typedef signed short FT_FWord; /* distance in FUnits */
121
122
123 /*************************************************************************/
124 /* */
125 /* <Type> */
126 /* FT_UFWord */
127 /* */
128 /* <Description> */
129 /* An unsigned 16-bit integer used to store a distance in original */
130 /* font units. */
131 /* */
132 typedef unsigned short FT_UFWord; /* unsigned distance */
133
134
135 /*************************************************************************/
136 /* */
137 /* <Type> */
138 /* FT_Char */
139 /* */
140 /* <Description> */
141 /* A simple typedef for the _signed_ char type. */
142 /* */
143 typedef signed char FT_Char;
144
145
146 /*************************************************************************/
147 /* */
148 /* <Type> */
149 /* FT_Byte */
150 /* */
151 /* <Description> */
152 /* A simple typedef for the _unsigned_ char type. */
153 /* */
154 typedef unsigned char FT_Byte;
155
156
157 /*************************************************************************/
158 /* */
159 /* <Type> */
160 /* FT_Bytes */
161 /* */
162 /* <Description> */
163 /* A typedef for constant memory areas. */
164 /* */
165 typedef const FT_Byte* FT_Bytes;
166
167
168 /*************************************************************************/
169 /* */
170 /* <Type> */
171 /* FT_Tag */
172 /* */
173 /* <Description> */
174 /* A typedef for 32-bit tags (as used in the SFNT format). */
175 /* */
176 typedef FT_UInt32 FT_Tag;
177
178
179 /*************************************************************************/
180 /* */
181 /* <Type> */
182 /* FT_String */
183 /* */
184 /* <Description> */
185 /* A simple typedef for the char type, usually used for strings. */
186 /* */
187 typedef char FT_String;
188
189
190 /*************************************************************************/
191 /* */
192 /* <Type> */
193 /* FT_Short */
194 /* */
195 /* <Description> */
196 /* A typedef for signed short. */
197 /* */
198 typedef signed short FT_Short;
199
200
201 /*************************************************************************/
202 /* */
203 /* <Type> */
204 /* FT_UShort */
205 /* */
206 /* <Description> */
207 /* A typedef for unsigned short. */
208 /* */
209 typedef unsigned short FT_UShort;
210
211
212 /*************************************************************************/
213 /* */
214 /* <Type> */
215 /* FT_Int */
216 /* */
217 /* <Description> */
218 /* A typedef for the int type. */
219 /* */
220 typedef signed int FT_Int;
221
222
223 /*************************************************************************/
224 /* */
225 /* <Type> */
226 /* FT_UInt */
227 /* */
228 /* <Description> */
229 /* A typedef for the unsigned int type. */
230 /* */
231 typedef unsigned int FT_UInt;
232
233
234 /*************************************************************************/
235 /* */
236 /* <Type> */
237 /* FT_Long */
238 /* */
239 /* <Description> */
240 /* A typedef for signed long. */
241 /* */
242 typedef signed long FT_Long;
243
244
245 /*************************************************************************/
246 /* */
247 /* <Type> */
248 /* FT_ULong */
249 /* */
250 /* <Description> */
251 /* A typedef for unsigned long. */
252 /* */
253 typedef unsigned long FT_ULong;
254
255
256 /*************************************************************************/
257 /* */
258 /* <Type> */
259 /* FT_F2Dot14 */
260 /* */
261 /* <Description> */
262 /* A signed 2.14 fixed-point type used for unit vectors. */
263 /* */
264 typedef signed short FT_F2Dot14;
265
266
267 /*************************************************************************/
268 /* */
269 /* <Type> */
270 /* FT_F26Dot6 */
271 /* */
272 /* <Description> */
273 /* A signed 26.6 fixed-point type used for vectorial pixel */
274 /* coordinates. */
275 /* */
276 typedef signed long FT_F26Dot6;
277
278
279 /*************************************************************************/
280 /* */
281 /* <Type> */
282 /* FT_Fixed */
283 /* */
284 /* <Description> */
285 /* This type is used to store 16.16 fixed-point values, like scaling */
286 /* values or matrix coefficients. */
287 /* */
288 typedef signed long FT_Fixed;
289
290
291 /*************************************************************************/
292 /* */
293 /* <Type> */
294 /* FT_Error */
295 /* */
296 /* <Description> */
297 /* The FreeType error code type. A value of~0 is always interpreted */
298 /* as a successful operation. */
299 /* */
300 typedef int FT_Error;
301
302
303 /*************************************************************************/
304 /* */
305 /* <Type> */
306 /* FT_Pointer */
307 /* */
308 /* <Description> */
309 /* A simple typedef for a typeless pointer. */
310 /* */
311 typedef void* FT_Pointer;
312
313
314 /*************************************************************************/
315 /* */
316 /* <Type> */
317 /* FT_Offset */
318 /* */
319 /* <Description> */
320 /* This is equivalent to the ANSI~C `size_t' type, i.e., the largest */
321 /* _unsigned_ integer type used to express a file size or position, */
322 /* or a memory block size. */
323 /* */
324 typedef size_t FT_Offset;
325
326
327 /*************************************************************************/
328 /* */
329 /* <Type> */
330 /* FT_PtrDist */
331 /* */
332 /* <Description> */
333 /* This is equivalent to the ANSI~C `ptrdiff_t' type, i.e., the */
334 /* largest _signed_ integer type used to express the distance */
335 /* between two pointers. */
336 /* */
337 typedef ft_ptrdiff_t FT_PtrDist;
338
339
340 /*************************************************************************/
341 /* */
342 /* <Struct> */
343 /* FT_UnitVector */
344 /* */
345 /* <Description> */
346 /* A simple structure used to store a 2D vector unit vector. Uses */
347 /* FT_F2Dot14 types. */
348 /* */
349 /* <Fields> */
350 /* x :: Horizontal coordinate. */
351 /* */
352 /* y :: Vertical coordinate. */
353 /* */
354 typedef struct FT_UnitVector_
355 {
356 FT_F2Dot14 x;
357 FT_F2Dot14 y;
358
359 } FT_UnitVector;
360
361
362 /*************************************************************************/
363 /* */
364 /* <Struct> */
365 /* FT_Matrix */
366 /* */
367 /* <Description> */
368 /* A simple structure used to store a 2x2 matrix. Coefficients are */
369 /* in 16.16 fixed-point format. The computation performed is: */
370 /* */
371 /* { */
372 /* x' = x*xx + y*xy */
373 /* y' = x*yx + y*yy */
374 /* } */
375 /* */
376 /* <Fields> */
377 /* xx :: Matrix coefficient. */
378 /* */
379 /* xy :: Matrix coefficient. */
380 /* */
381 /* yx :: Matrix coefficient. */
382 /* */
383 /* yy :: Matrix coefficient. */
384 /* */
385 typedef struct FT_Matrix_
386 {
387 FT_Fixed xx, xy;
388 FT_Fixed yx, yy;
389
390 } FT_Matrix;
391
392
393 /*************************************************************************/
394 /* */
395 /* <Struct> */
396 /* FT_Data */
397 /* */
398 /* <Description> */
399 /* Read-only binary data represented as a pointer and a length. */
400 /* */
401 /* <Fields> */
402 /* pointer :: The data. */
403 /* */
404 /* length :: The length of the data in bytes. */
405 /* */
406 typedef struct FT_Data_
407 {
408 const FT_Byte* pointer;
409 FT_Int length;
410
411 } FT_Data;
412
413
414 /*************************************************************************/
415 /* */
416 /* <FuncType> */
417 /* FT_Generic_Finalizer */
418 /* */
419 /* <Description> */
420 /* Describe a function used to destroy the `client' data of any */
421 /* FreeType object. See the description of the @FT_Generic type for */
422 /* details of usage. */
423 /* */
424 /* <Input> */
425 /* The address of the FreeType object that is under finalization. */
426 /* Its client data is accessed through its `generic' field. */
427 /* */
428 typedef void (*FT_Generic_Finalizer)( void* object );
429
430
431 /*************************************************************************/
432 /* */
433 /* <Struct> */
434 /* FT_Generic */
435 /* */
436 /* <Description> */
437 /* Client applications often need to associate their own data to a */
438 /* variety of FreeType core objects. For example, a text layout API */
439 /* might want to associate a glyph cache to a given size object. */
440 /* */
441 /* Some FreeType object contains a `generic' field, of type */
442 /* FT_Generic, which usage is left to client applications and font */
443 /* servers. */
444 /* */
445 /* It can be used to store a pointer to client-specific data, as well */
446 /* as the address of a `finalizer' function, which will be called by */
447 /* FreeType when the object is destroyed (for example, the previous */
448 /* client example would put the address of the glyph cache destructor */
449 /* in the `finalizer' field). */
450 /* */
451 /* <Fields> */
452 /* data :: A typeless pointer to any client-specified data. This */
453 /* field is completely ignored by the FreeType library. */
454 /* */
455 /* finalizer :: A pointer to a `generic finalizer' function, which */
456 /* will be called when the object is destroyed. If this */
457 /* field is set to NULL, no code will be called. */
458 /* */
459 typedef struct FT_Generic_
460 {
461 void* data;
462 FT_Generic_Finalizer finalizer;
463
464 } FT_Generic;
465
466
467 /*************************************************************************/
468 /* */
469 /* <Macro> */
470 /* FT_MAKE_TAG */
471 /* */
472 /* <Description> */
473 /* This macro converts four-letter tags that are used to label */
474 /* TrueType tables into an unsigned long, to be used within FreeType. */
475 /* */
476 /* <Note> */
477 /* The produced values *must* be 32-bit integers. Don't redefine */
478 /* this macro. */
479 /* */
480#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
481 (FT_Tag) \
482 ( ( (FT_ULong)_x1 << 24 ) | \
483 ( (FT_ULong)_x2 << 16 ) | \
484 ( (FT_ULong)_x3 << 8 ) | \
485 (FT_ULong)_x4 )
486
487
488 /*************************************************************************/
489 /*************************************************************************/
490 /* */
491 /* L I S T M A N A G E M E N T */
492 /* */
493 /*************************************************************************/
494 /*************************************************************************/
495
496
497 /*************************************************************************/
498 /* */
499 /* <Section> */
500 /* list_processing */
501 /* */
502 /*************************************************************************/
503
504
505 /*************************************************************************/
506 /* */
507 /* <Type> */
508 /* FT_ListNode */
509 /* */
510 /* <Description> */
511 /* Many elements and objects in FreeType are listed through an */
512 /* @FT_List record (see @FT_ListRec). As its name suggests, an */
513 /* FT_ListNode is a handle to a single list element. */
514 /* */
515 typedef struct FT_ListNodeRec_* FT_ListNode;
516
517
518 /*************************************************************************/
519 /* */
520 /* <Type> */
521 /* FT_List */
522 /* */
523 /* <Description> */
524 /* A handle to a list record (see @FT_ListRec). */
525 /* */
526 typedef struct FT_ListRec_* FT_List;
527
528
529 /*************************************************************************/
530 /* */
531 /* <Struct> */
532 /* FT_ListNodeRec */
533 /* */
534 /* <Description> */
535 /* A structure used to hold a single list element. */
536 /* */
537 /* <Fields> */
538 /* prev :: The previous element in the list. NULL if first. */
539 /* */
540 /* next :: The next element in the list. NULL if last. */
541 /* */
542 /* data :: A typeless pointer to the listed object. */
543 /* */
544 typedef struct FT_ListNodeRec_
545 {
546 FT_ListNode prev;
547 FT_ListNode next;
548 void* data;
549
550 } FT_ListNodeRec;
551
552
553 /*************************************************************************/
554 /* */
555 /* <Struct> */
556 /* FT_ListRec */
557 /* */
558 /* <Description> */
559 /* A structure used to hold a simple doubly-linked list. These are */
560 /* used in many parts of FreeType. */
561 /* */
562 /* <Fields> */
563 /* head :: The head (first element) of doubly-linked list. */
564 /* */
565 /* tail :: The tail (last element) of doubly-linked list. */
566 /* */
567 typedef struct FT_ListRec_
568 {
569 FT_ListNode head;
570 FT_ListNode tail;
571
572 } FT_ListRec;
573
574 /* */
575
576
577#define FT_IS_EMPTY( list ) ( (list).head == 0 )
578#define FT_BOOL( x ) ( (FT_Bool)( x ) )
579
580 /* concatenate C tokens */
581#define FT_ERR_XCAT( x, y ) x ## y
582#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
583
584 /* see `ftmoderr.h' for descriptions of the following macros */
585
586#define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e )
587
588#define FT_ERROR_BASE( x ) ( (x) & 0xFF )
589#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U )
590
591#define FT_ERR_EQ( x, e ) \
592 ( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) )
593#define FT_ERR_NEQ( x, e ) \
594 ( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) )
595
596
597FT_END_HEADER
598
599#endif /* FTTYPES_H_ */
600
601
602/* END */
603