(root)/
freetype-2.13.2/
include/
freetype/
fttypes.h
       1  /****************************************************************************
       2   *
       3   * fttypes.h
       4   *
       5   *   FreeType simple types definitions (specification only).
       6   *
       7   * Copyright (C) 1996-2023 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 <freetype/ftsystem.h>
      26  #include <freetype/ftimage.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.  Note
      49     *   that FreeType does not use floating-point data types.  Fractional
      50     *   values are represented by fixed-point integers, with lower bits
      51     *   storing the fractional part.
      52     *
      53     * @order:
      54     *   FT_Byte
      55     *   FT_Bytes
      56     *   FT_Char
      57     *   FT_Int
      58     *   FT_UInt
      59     *   FT_Int16
      60     *   FT_UInt16
      61     *   FT_Int32
      62     *   FT_UInt32
      63     *   FT_Int64
      64     *   FT_UInt64
      65     *   FT_Short
      66     *   FT_UShort
      67     *   FT_Long
      68     *   FT_ULong
      69     *   FT_Bool
      70     *   FT_Offset
      71     *   FT_PtrDist
      72     *   FT_String
      73     *   FT_Tag
      74     *   FT_Error
      75     *   FT_Fixed
      76     *   FT_Pointer
      77     *   FT_Pos
      78     *   FT_Vector
      79     *   FT_BBox
      80     *   FT_Matrix
      81     *   FT_FWord
      82     *   FT_UFWord
      83     *   FT_F2Dot14
      84     *   FT_UnitVector
      85     *   FT_F26Dot6
      86     *   FT_Data
      87     *
      88     *   FT_MAKE_TAG
      89     *
      90     *   FT_Generic
      91     *   FT_Generic_Finalizer
      92     *
      93     *   FT_Bitmap
      94     *   FT_Pixel_Mode
      95     *   FT_Palette_Mode
      96     *   FT_Glyph_Format
      97     *   FT_IMAGE_TAG
      98     *
      99     */
     100  
     101  
     102    /**************************************************************************
     103     *
     104     * @type:
     105     *   FT_Bool
     106     *
     107     * @description:
     108     *   A typedef of unsigned char, used for simple booleans.  As usual,
     109     *   values 1 and~0 represent true and false, respectively.
     110     */
     111    typedef unsigned char  FT_Bool;
     112  
     113  
     114    /**************************************************************************
     115     *
     116     * @type:
     117     *   FT_FWord
     118     *
     119     * @description:
     120     *   A signed 16-bit integer used to store a distance in original font
     121     *   units.
     122     */
     123    typedef signed short  FT_FWord;   /* distance in FUnits */
     124  
     125  
     126    /**************************************************************************
     127     *
     128     * @type:
     129     *   FT_UFWord
     130     *
     131     * @description:
     132     *   An unsigned 16-bit integer used to store a distance in original font
     133     *   units.
     134     */
     135    typedef unsigned short  FT_UFWord;  /* unsigned distance */
     136  
     137  
     138    /**************************************************************************
     139     *
     140     * @type:
     141     *   FT_Char
     142     *
     143     * @description:
     144     *   A simple typedef for the _signed_ char type.
     145     */
     146    typedef signed char  FT_Char;
     147  
     148  
     149    /**************************************************************************
     150     *
     151     * @type:
     152     *   FT_Byte
     153     *
     154     * @description:
     155     *   A simple typedef for the _unsigned_ char type.
     156     */
     157    typedef unsigned char  FT_Byte;
     158  
     159  
     160    /**************************************************************************
     161     *
     162     * @type:
     163     *   FT_Bytes
     164     *
     165     * @description:
     166     *   A typedef for constant memory areas.
     167     */
     168    typedef const FT_Byte*  FT_Bytes;
     169  
     170  
     171    /**************************************************************************
     172     *
     173     * @type:
     174     *   FT_Tag
     175     *
     176     * @description:
     177     *   A typedef for 32-bit tags (as used in the SFNT format).
     178     */
     179    typedef FT_UInt32  FT_Tag;
     180  
     181  
     182    /**************************************************************************
     183     *
     184     * @type:
     185     *   FT_String
     186     *
     187     * @description:
     188     *   A simple typedef for the char type, usually used for strings.
     189     */
     190    typedef char  FT_String;
     191  
     192  
     193    /**************************************************************************
     194     *
     195     * @type:
     196     *   FT_Short
     197     *
     198     * @description:
     199     *   A typedef for signed short.
     200     */
     201    typedef signed short  FT_Short;
     202  
     203  
     204    /**************************************************************************
     205     *
     206     * @type:
     207     *   FT_UShort
     208     *
     209     * @description:
     210     *   A typedef for unsigned short.
     211     */
     212    typedef unsigned short  FT_UShort;
     213  
     214  
     215    /**************************************************************************
     216     *
     217     * @type:
     218     *   FT_Int
     219     *
     220     * @description:
     221     *   A typedef for the int type.
     222     */
     223    typedef signed int  FT_Int;
     224  
     225  
     226    /**************************************************************************
     227     *
     228     * @type:
     229     *   FT_UInt
     230     *
     231     * @description:
     232     *   A typedef for the unsigned int type.
     233     */
     234    typedef unsigned int  FT_UInt;
     235  
     236  
     237    /**************************************************************************
     238     *
     239     * @type:
     240     *   FT_Long
     241     *
     242     * @description:
     243     *   A typedef for signed long.
     244     */
     245    typedef signed long  FT_Long;
     246  
     247  
     248    /**************************************************************************
     249     *
     250     * @type:
     251     *   FT_ULong
     252     *
     253     * @description:
     254     *   A typedef for unsigned long.
     255     */
     256    typedef unsigned long  FT_ULong;
     257  
     258  
     259    /**************************************************************************
     260     *
     261     * @type:
     262     *   FT_F2Dot14
     263     *
     264     * @description:
     265     *   A signed 2.14 fixed-point type used for unit vectors.
     266     */
     267    typedef signed short  FT_F2Dot14;
     268  
     269  
     270    /**************************************************************************
     271     *
     272     * @type:
     273     *   FT_F26Dot6
     274     *
     275     * @description:
     276     *   A signed 26.6 fixed-point type used for vectorial pixel coordinates.
     277     */
     278    typedef signed long  FT_F26Dot6;
     279  
     280  
     281    /**************************************************************************
     282     *
     283     * @type:
     284     *   FT_Fixed
     285     *
     286     * @description:
     287     *   This type is used to store 16.16 fixed-point values, like scaling
     288     *   values or matrix coefficients.
     289     */
     290    typedef signed long  FT_Fixed;
     291  
     292  
     293    /**************************************************************************
     294     *
     295     * @type:
     296     *   FT_Error
     297     *
     298     * @description:
     299     *   The FreeType error code type.  A value of~0 is always interpreted as a
     300     *   successful operation.
     301     */
     302    typedef int  FT_Error;
     303  
     304  
     305    /**************************************************************************
     306     *
     307     * @type:
     308     *   FT_Pointer
     309     *
     310     * @description:
     311     *   A simple typedef for a typeless pointer.
     312     */
     313    typedef void*  FT_Pointer;
     314  
     315  
     316    /**************************************************************************
     317     *
     318     * @type:
     319     *   FT_Offset
     320     *
     321     * @description:
     322     *   This is equivalent to the ANSI~C `size_t` type, i.e., the largest
     323     *   _unsigned_ integer type used to express a file size or position, or a
     324     *   memory block size.
     325     */
     326    typedef size_t  FT_Offset;
     327  
     328  
     329    /**************************************************************************
     330     *
     331     * @type:
     332     *   FT_PtrDist
     333     *
     334     * @description:
     335     *   This is equivalent to the ANSI~C `ptrdiff_t` type, i.e., the largest
     336     *   _signed_ integer type used to express the distance between two
     337     *   pointers.
     338     */
     339    typedef ft_ptrdiff_t  FT_PtrDist;
     340  
     341  
     342    /**************************************************************************
     343     *
     344     * @struct:
     345     *   FT_UnitVector
     346     *
     347     * @description:
     348     *   A simple structure used to store a 2D vector unit vector.  Uses
     349     *   FT_F2Dot14 types.
     350     *
     351     * @fields:
     352     *   x ::
     353     *     Horizontal coordinate.
     354     *
     355     *   y ::
     356     *     Vertical coordinate.
     357     */
     358    typedef struct  FT_UnitVector_
     359    {
     360      FT_F2Dot14  x;
     361      FT_F2Dot14  y;
     362  
     363    } FT_UnitVector;
     364  
     365  
     366    /**************************************************************************
     367     *
     368     * @struct:
     369     *   FT_Matrix
     370     *
     371     * @description:
     372     *   A simple structure used to store a 2x2 matrix.  Coefficients are in
     373     *   16.16 fixed-point format.  The computation performed is:
     374     *
     375     *   ```
     376     *     x' = x*xx + y*xy
     377     *     y' = x*yx + y*yy
     378     *   ```
     379     *
     380     * @fields:
     381     *   xx ::
     382     *     Matrix coefficient.
     383     *
     384     *   xy ::
     385     *     Matrix coefficient.
     386     *
     387     *   yx ::
     388     *     Matrix coefficient.
     389     *
     390     *   yy ::
     391     *     Matrix coefficient.
     392     */
     393    typedef struct  FT_Matrix_
     394    {
     395      FT_Fixed  xx, xy;
     396      FT_Fixed  yx, yy;
     397  
     398    } FT_Matrix;
     399  
     400  
     401    /**************************************************************************
     402     *
     403     * @struct:
     404     *   FT_Data
     405     *
     406     * @description:
     407     *   Read-only binary data represented as a pointer and a length.
     408     *
     409     * @fields:
     410     *   pointer ::
     411     *     The data.
     412     *
     413     *   length ::
     414     *     The length of the data in bytes.
     415     */
     416    typedef struct  FT_Data_
     417    {
     418      const FT_Byte*  pointer;
     419      FT_UInt         length;
     420  
     421    } FT_Data;
     422  
     423  
     424    /**************************************************************************
     425     *
     426     * @functype:
     427     *   FT_Generic_Finalizer
     428     *
     429     * @description:
     430     *   Describe a function used to destroy the 'client' data of any FreeType
     431     *   object.  See the description of the @FT_Generic type for details of
     432     *   usage.
     433     *
     434     * @input:
     435     *   The address of the FreeType object that is under finalization.  Its
     436     *   client data is accessed through its `generic` field.
     437     */
     438    typedef void  (*FT_Generic_Finalizer)( void*  object );
     439  
     440  
     441    /**************************************************************************
     442     *
     443     * @struct:
     444     *   FT_Generic
     445     *
     446     * @description:
     447     *   Client applications often need to associate their own data to a
     448     *   variety of FreeType core objects.  For example, a text layout API
     449     *   might want to associate a glyph cache to a given size object.
     450     *
     451     *   Some FreeType object contains a `generic` field, of type `FT_Generic`,
     452     *   which usage is left to client applications and font servers.
     453     *
     454     *   It can be used to store a pointer to client-specific data, as well as
     455     *   the address of a 'finalizer' function, which will be called by
     456     *   FreeType when the object is destroyed (for example, the previous
     457     *   client example would put the address of the glyph cache destructor in
     458     *   the `finalizer` field).
     459     *
     460     * @fields:
     461     *   data ::
     462     *     A typeless pointer to any client-specified data. This field is
     463     *     completely ignored by the FreeType library.
     464     *
     465     *   finalizer ::
     466     *     A pointer to a 'generic finalizer' function, which will be called
     467     *     when the object is destroyed.  If this field is set to `NULL`, no
     468     *     code will be called.
     469     */
     470    typedef struct  FT_Generic_
     471    {
     472      void*                 data;
     473      FT_Generic_Finalizer  finalizer;
     474  
     475    } FT_Generic;
     476  
     477  
     478    /**************************************************************************
     479     *
     480     * @macro:
     481     *   FT_MAKE_TAG
     482     *
     483     * @description:
     484     *   This macro converts four-letter tags that are used to label TrueType
     485     *   tables into an `FT_Tag` type, to be used within FreeType.
     486     *
     487     * @note:
     488     *   The produced values **must** be 32-bit integers.  Don't redefine this
     489     *   macro.
     490     */
     491  #define FT_MAKE_TAG( _x1, _x2, _x3, _x4 )                  \
     492            ( ( FT_STATIC_BYTE_CAST( FT_Tag, _x1 ) << 24 ) | \
     493              ( FT_STATIC_BYTE_CAST( FT_Tag, _x2 ) << 16 ) | \
     494              ( FT_STATIC_BYTE_CAST( FT_Tag, _x3 ) <<  8 ) | \
     495                FT_STATIC_BYTE_CAST( FT_Tag, _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 @FT_List
     522     *    record (see @FT_ListRec).  As its name suggests, an FT_ListNode is a
     523     *    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 used
     573     *   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_STATIC_CAST( FT_Bool, (x) != 0 )
     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 */