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