1 /***************************************************************************/
5 /* FreeType simple types definitions (specification only). */
7 /* Copyright 1996-2001 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
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. */
16 /***************************************************************************/
33 /*************************************************************************/
39 /* Basic Data Types */
42 /* The basic data types defined by the library. */
45 /* This section contains the basic data types defined by FreeType 2, */
46 /* ranging from simple scalar types to bitmap descriptors. More */
47 /* font-specific structures are defined in a different section. */
77 /* FT_Generic_Finalizer */
85 /*************************************************************************/
88 /*************************************************************************/
94 /* A typedef of unsigned char, used for simple booleans. */
96 typedef unsigned char FT_Bool
;
99 /*************************************************************************/
105 /* A signed 16-bit integer used to store a distance in original font */
108 typedef signed short FT_FWord
; /* distance in FUnits */
111 /*************************************************************************/
117 /* An unsigned 16-bit integer used to store a distance in original */
120 typedef unsigned short FT_UFWord
; /* unsigned distance */
123 /*************************************************************************/
129 /* A simple typedef for the _signed_ char type. */
131 typedef signed char FT_Char
;
134 /*************************************************************************/
140 /* A simple typedef for the _unsigned_ char type. */
142 typedef unsigned char FT_Byte
;
145 /*************************************************************************/
151 /* A simple typedef for the char type, usually used for strings. */
153 typedef char FT_String
;
156 /*************************************************************************/
162 /* A typedef for signed short. */
164 typedef signed short FT_Short
;
167 /*************************************************************************/
173 /* A typedef for unsigned short. */
175 typedef unsigned short FT_UShort
;
178 /*************************************************************************/
184 /* A typedef for the int type. */
189 /*************************************************************************/
195 /* A typedef for the unsigned int type. */
197 typedef unsigned int FT_UInt
;
200 /*************************************************************************/
206 /* A typedef for signed long. */
208 typedef signed long FT_Long
;
211 /*************************************************************************/
217 /* A typedef for unsigned long. */
219 typedef unsigned long FT_ULong
;
222 /*************************************************************************/
228 /* A signed 2.14 fixed float type used for unit vectors. */
230 typedef signed short FT_F2Dot14
;
233 /*************************************************************************/
239 /* A signed 26.6 fixed float type used for vectorial pixel */
242 typedef signed long FT_F26Dot6
;
245 /*************************************************************************/
251 /* This type is used to store 16.16 fixed float values, like scales */
252 /* or matrix coefficients. */
254 typedef signed long FT_Fixed
;
257 /*************************************************************************/
263 /* The FreeType error code type. A value of 0 is always interpreted */
264 /* as a successful operation. */
266 typedef int FT_Error
;
269 /*************************************************************************/
275 /* A simple typedef for a typeless pointer. */
277 typedef void* FT_Pointer
;
280 /*************************************************************************/
286 /* This is equivalent to the ANSI C `size_t' type, i.e. the largest */
287 /* _unsigned_ integer type used to express a file size or position, */
288 /* or a memory block size. */
290 typedef size_t FT_Offset
;
293 /*************************************************************************/
299 /* This is equivalent to the ANSI C `ptrdiff_t' type, i.e. the */
300 /* largest _signed_ integer type used to express the distance */
301 /* between two pointers. */
303 typedef size_t FT_PtrDist
;
306 /*************************************************************************/
312 /* A simple structure used to store a 2D vector unit vector. Uses */
313 /* FT_F2Dot14 types. */
316 /* x :: Horizontal coordinate. */
318 /* y :: Vertical coordinate. */
320 typedef struct FT_UnitVector_
328 /*************************************************************************/
334 /* A simple structure used to store a 2x2 matrix. Coefficients are */
335 /* in 16.16 fixed float format. The computation performed is: */
338 /* x' = x*xx + y*xy */
339 /* y' = x*yx + y*yy */
343 /* xx :: Matrix coefficient. */
345 /* xy :: Matrix coefficient. */
347 /* yx :: Matrix coefficient. */
349 /* yy :: Matrix coefficient. */
351 typedef struct FT_Matrix_
359 /*************************************************************************/
362 /* FT_Generic_Finalizer */
365 /* Describes a function used to destroy the `client' data of any */
366 /* FreeType object. See the description of the FT_Generic type for */
367 /* details of usage. */
370 /* The address of the FreeType object which is under finalization. */
371 /* Its client data is accessed through its `generic' field. */
373 typedef void (*FT_Generic_Finalizer
)(void* object
);
376 /*************************************************************************/
382 /* Client applications often need to associate their own data to a */
383 /* variety of FreeType core objects. For example, a text layout API */
384 /* might want to associate a glyph cache to a given size object. */
386 /* Most FreeType object contains a `generic' field, of type */
387 /* FT_Generic, which usage is left to client applications and font */
390 /* It can be used to store a pointer to client-specific data, as well */
391 /* as the address of a `finalizer' function, which will be called by */
392 /* FreeType when the object is destroyed (for example, the previous */
393 /* client example would put the address of the glyph cache destructor */
394 /* in the `finalizer' field). */
397 /* data :: A typeless pointer to any client-specified data. This */
398 /* field is completely ignored by the FreeType library. */
400 /* finalizer :: A pointer to a `generic finalizer' function, which */
401 /* will be called when the object is destroyed. If this */
402 /* field is set to NULL, no code will be called. */
404 typedef struct FT_Generic_
407 FT_Generic_Finalizer finalizer
;
412 /*************************************************************************/
418 /* This macro converts four letter tags which are used to label */
419 /* TrueType tables into an unsigned long to be used within FreeType. */
421 #define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
422 ( ( (FT_ULong)_x1 << 24 ) | \
423 ( (FT_ULong)_x2 << 16 ) | \
424 ( (FT_ULong)_x3 << 8 ) | \
428 /*************************************************************************/
429 /*************************************************************************/
431 /* L I S T M A N A G E M E N T */
433 /*************************************************************************/
434 /*************************************************************************/
437 /*************************************************************************/
440 /* list_processing */
442 /*************************************************************************/
445 /*************************************************************************/
451 /* Many elements and objects in FreeType are listed through a */
452 /* FT_List record (see FT_ListRec). As its name suggests, a */
453 /* FT_ListNode is a handle to a single list element. */
455 typedef struct FT_ListNodeRec_
* FT_ListNode
;
458 /*************************************************************************/
464 /* A handle to a list record (see FT_ListRec). */
466 typedef struct FT_ListRec_
* FT_List
;
469 /*************************************************************************/
475 /* A structure used to hold a single list element. */
478 /* prev :: The previous element in the list. NULL if first. */
480 /* next :: The next element in the list. NULL if last. */
482 /* data :: A typeless pointer to the listed object. */
484 typedef struct FT_ListNodeRec_
493 /*************************************************************************/
499 /* A structure used to hold a simple doubly-linked list. These are */
500 /* used in many parts of FreeType. */
503 /* head :: The head (first element) of doubly-linked list. */
505 /* tail :: The tail (last element) of doubly-linked list. */
507 typedef struct FT_ListRec_
517 #define FT_IS_EMPTY( list ) ( (list).head == 0 )
519 /* return base error code (without module-specific prefix) */
520 #define FT_ERROR_BASE( x ) ( (x) & 0xFF )
522 /* return module error code */
523 #define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U )
525 #define FT_BOOL( x ) ( (FT_Bool)( x ) )
529 #endif /* __FTTYPES_H__ */