Home | History | Annotate | Download | only in freetype
      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 ::
    351    *     Horizontal coordinate.
    352    *
    353    *   y ::
    354    *     Vertical coordinate.
    355    */
    356   typedef struct  FT_UnitVector_
    357   {
    358     FT_F2Dot14  x;
    359     FT_F2Dot14  y;
    360 
    361   } FT_UnitVector;
    362 
    363 
    364   /**************************************************************************
    365    *
    366    * @struct:
    367    *   FT_Matrix
    368    *
    369    * @description:
    370    *   A simple structure used to store a 2x2 matrix.  Coefficients are
    371    *   in 16.16 fixed-point format.  The computation performed is:
    372    *
    373    *   {
    374    *     x' = x*xx + y*xy
    375    *     y' = x*yx + y*yy
    376    *   }
    377    *
    378    * @fields:
    379    *   xx ::
    380    *     Matrix coefficient.
    381    *
    382    *   xy ::
    383    *     Matrix coefficient.
    384    *
    385    *   yx ::
    386    *     Matrix coefficient.
    387    *
    388    *   yy ::
    389    *     Matrix coefficient.
    390    */
    391   typedef struct  FT_Matrix_
    392   {
    393     FT_Fixed  xx, xy;
    394     FT_Fixed  yx, yy;
    395 
    396   } FT_Matrix;
    397 
    398 
    399   /**************************************************************************
    400    *
    401    * @struct:
    402    *   FT_Data
    403    *
    404    * @description:
    405    *   Read-only binary data represented as a pointer and a length.
    406    *
    407    * @fields:
    408    *   pointer ::
    409    *     The data.
    410    *
    411    *   length ::
    412    *     The length of the data in bytes.
    413    */
    414   typedef struct  FT_Data_
    415   {
    416     const FT_Byte*  pointer;
    417     FT_Int          length;
    418 
    419   } FT_Data;
    420 
    421 
    422   /**************************************************************************
    423    *
    424    * @functype:
    425    *   FT_Generic_Finalizer
    426    *
    427    * @description:
    428    *   Describe a function used to destroy the `client' data of any
    429    *   FreeType object.  See the description of the @FT_Generic type for
    430    *   details of usage.
    431    *
    432    * @input:
    433    *   The address of the FreeType object that is under finalization.
    434    *   Its client data is accessed through its `generic' field.
    435    */
    436   typedef void  (*FT_Generic_Finalizer)( void*  object );
    437 
    438 
    439   /**************************************************************************
    440    *
    441    * @struct:
    442    *   FT_Generic
    443    *
    444    * @description:
    445    *   Client applications often need to associate their own data to a
    446    *   variety of FreeType core objects.  For example, a text layout API
    447    *   might want to associate a glyph cache to a given size object.
    448    *
    449    *   Some FreeType object contains a `generic' field, of type
    450    *   FT_Generic, which usage is left to client applications and font
    451    *   servers.
    452    *
    453    *   It can be used to store a pointer to client-specific data, as well
    454    *   as the address of a `finalizer' function, which will be called by
    455    *   FreeType when the object is destroyed (for example, the previous
    456    *   client example would put the address of the glyph cache destructor
    457    *   in the `finalizer' field).
    458    *
    459    * @fields:
    460    *   data ::
    461    *     A typeless pointer to any client-specified data. This
    462    *     field is completely ignored by the FreeType library.
    463    *
    464    *   finalizer ::
    465    *     A pointer to a `generic finalizer' function, which
    466    *     will be called when the object is destroyed.  If this
    467    *     field is set to NULL, no code will be called.
    468    */
    469   typedef struct  FT_Generic_
    470   {
    471     void*                 data;
    472     FT_Generic_Finalizer  finalizer;
    473 
    474   } FT_Generic;
    475 
    476 
    477   /**************************************************************************
    478    *
    479    * @macro:
    480    *   FT_MAKE_TAG
    481    *
    482    * @description:
    483    *   This macro converts four-letter tags that are used to label
    484    *   TrueType tables into an unsigned long, to be used within FreeType.
    485    *
    486    * @note:
    487    *   The produced values *must* be 32-bit integers.  Don't redefine
    488    *   this macro.
    489    */
    490 #define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
    491           (FT_Tag)                        \
    492           ( ( (FT_ULong)_x1 << 24 ) |     \
    493             ( (FT_ULong)_x2 << 16 ) |     \
    494             ( (FT_ULong)_x3 <<  8 ) |     \
    495               (FT_ULong)_x4         )
    496 
    497 
    498   /*************************************************************************/
    499   /*************************************************************************/
    500   /*                                                                       */
    501   /*                    L I S T   M A N A G E M E N T                      */
    502   /*                                                                       */
    503   /*************************************************************************/
    504   /*************************************************************************/
    505 
    506 
    507   /**************************************************************************
    508    *
    509    * @section:
    510    *   list_processing
    511    *
    512    */
    513 
    514 
    515   /**************************************************************************
    516    *
    517    * @type:
    518    *   FT_ListNode
    519    *
    520    * @description:
    521    *    Many elements and objects in FreeType are listed through an
    522    *    @FT_List record (see @FT_ListRec).  As its name suggests, an
    523    *    FT_ListNode is a handle to a single list element.
    524    */
    525   typedef struct FT_ListNodeRec_*  FT_ListNode;
    526 
    527 
    528   /**************************************************************************
    529    *
    530    * @type:
    531    *   FT_List
    532    *
    533    * @description:
    534    *   A handle to a list record (see @FT_ListRec).
    535    */
    536   typedef struct FT_ListRec_*  FT_List;
    537 
    538 
    539   /**************************************************************************
    540    *
    541    * @struct:
    542    *   FT_ListNodeRec
    543    *
    544    * @description:
    545    *   A structure used to hold a single list element.
    546    *
    547    * @fields:
    548    *   prev ::
    549    *     The previous element in the list.  NULL if first.
    550    *
    551    *   next ::
    552    *     The next element in the list.  NULL if last.
    553    *
    554    *   data ::
    555    *     A typeless pointer to the listed object.
    556    */
    557   typedef struct  FT_ListNodeRec_
    558   {
    559     FT_ListNode  prev;
    560     FT_ListNode  next;
    561     void*        data;
    562 
    563   } FT_ListNodeRec;
    564 
    565 
    566   /**************************************************************************
    567    *
    568    * @struct:
    569    *   FT_ListRec
    570    *
    571    * @description:
    572    *   A structure used to hold a simple doubly-linked list.  These are
    573    *   used in many parts of FreeType.
    574    *
    575    * @fields:
    576    *   head ::
    577    *     The head (first element) of doubly-linked list.
    578    *
    579    *   tail ::
    580    *     The tail (last element) of doubly-linked list.
    581    */
    582   typedef struct  FT_ListRec_
    583   {
    584     FT_ListNode  head;
    585     FT_ListNode  tail;
    586 
    587   } FT_ListRec;
    588 
    589   /* */
    590 
    591 
    592 #define FT_IS_EMPTY( list )  ( (list).head == 0 )
    593 #define FT_BOOL( x )  ( (FT_Bool)( x ) )
    594 
    595   /* concatenate C tokens */
    596 #define FT_ERR_XCAT( x, y )  x ## y
    597 #define FT_ERR_CAT( x, y )   FT_ERR_XCAT( x, y )
    598 
    599   /* see `ftmoderr.h' for descriptions of the following macros */
    600 
    601 #define FT_ERR( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
    602 
    603 #define FT_ERROR_BASE( x )    ( (x) & 0xFF )
    604 #define FT_ERROR_MODULE( x )  ( (x) & 0xFF00U )
    605 
    606 #define FT_ERR_EQ( x, e )                                        \
    607           ( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) )
    608 #define FT_ERR_NEQ( x, e )                                       \
    609           ( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) )
    610 
    611 
    612 FT_END_HEADER
    613 
    614 #endif /* FTTYPES_H_ */
    615 
    616 
    617 /* END */
    618