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 
31 FT_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 
597 FT_END_HEADER
598 
599 #endif /* FTTYPES_H_ */
600 
601 
602 /* END */
603