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