/**************************************************************************** * * fttypes.h * * FreeType simple types definitions (specification only). * * Copyright (C) 1996-2023 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used, * modified, and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute * this file you indicate that you have read the license and * understand and accept it fully. * */ #ifndef FTTYPES_H_ #define FTTYPES_H_ #include <ft2build.h> #include FT_CONFIG_CONFIG_H #include <freetype/ftsystem.h> #include <freetype/ftimage.h> #include <stddef.h> FT_BEGIN_HEADER /************************************************************************** * * @section: * basic_types * * @title: * Basic Data Types * * @abstract: * The basic data types defined by the library. * * @description: * This section contains the basic data types defined by FreeType~2, * ranging from simple scalar types to bitmap descriptors. More * font-specific structures are defined in a different section. Note * that FreeType does not use floating-point data types. Fractional * values are represented by fixed-point integers, with lower bits * storing the fractional part. * * @order: * FT_Byte * FT_Bytes * FT_Char * FT_Int * FT_UInt * FT_Int16 * FT_UInt16 * FT_Int32 * FT_UInt32 * FT_Int64 * FT_UInt64 * FT_Short * FT_UShort * FT_Long * FT_ULong * FT_Bool * FT_Offset * FT_PtrDist * FT_String * FT_Tag * FT_Error * FT_Fixed * FT_Pointer * FT_Pos * FT_Vector * FT_BBox * FT_Matrix * FT_FWord * FT_UFWord * FT_F2Dot14 * FT_UnitVector * FT_F26Dot6 * FT_Data * * FT_MAKE_TAG * * FT_Generic * FT_Generic_Finalizer * * FT_Bitmap * FT_Pixel_Mode * FT_Palette_Mode * FT_Glyph_Format * FT_IMAGE_TAG * */ /************************************************************************** * * @type: * FT_Bool * * @description: * A typedef of unsigned char, used for simple booleans. As usual, * values 1 and~0 represent true and false, respectively. */ FT_Bool; /************************************************************************** * * @type: * FT_FWord * * @description: * A signed 16-bit integer used to store a distance in original font * units. */ FT_FWord; /* distance in FUnits */ /************************************************************************** * * @type: * FT_UFWord * * @description: * An unsigned 16-bit integer used to store a distance in original font * units. */ FT_UFWord; /* unsigned distance */ /************************************************************************** * * @type: * FT_Char * * @description: * A simple typedef for the _signed_ char type. */ FT_Char; /************************************************************************** * * @type: * FT_Byte * * @description: * A simple typedef for the _unsigned_ char type. */ FT_Byte; /************************************************************************** * * @type: * FT_Bytes * * @description: * A typedef for constant memory areas. */ FT_Bytes; /************************************************************************** * * @type: * FT_Tag * * @description: * A typedef for 32-bit tags (as used in the SFNT format). */ FT_Tag; /************************************************************************** * * @type: * FT_String * * @description: * A simple typedef for the char type, usually used for strings. */ FT_String; /************************************************************************** * * @type: * FT_Short * * @description: * A typedef for signed short. */ FT_Short; /************************************************************************** * * @type: * FT_UShort * * @description: * A typedef for unsigned short. */ FT_UShort; /************************************************************************** * * @type: * FT_Int * * @description: * A typedef for the int type. */ FT_Int; /************************************************************************** * * @type: * FT_UInt * * @description: * A typedef for the unsigned int type. */ FT_UInt; /************************************************************************** * * @type: * FT_Long * * @description: * A typedef for signed long. */ FT_Long; /************************************************************************** * * @type: * FT_ULong * * @description: * A typedef for unsigned long. */ FT_ULong; /************************************************************************** * * @type: * FT_F2Dot14 * * @description: * A signed 2.14 fixed-point type used for unit vectors. */ FT_F2Dot14; /************************************************************************** * * @type: * FT_F26Dot6 * * @description: * A signed 26.6 fixed-point type used for vectorial pixel coordinates. */ FT_F26Dot6; /************************************************************************** * * @type: * FT_Fixed * * @description: * This type is used to store 16.16 fixed-point values, like scaling * values or matrix coefficients. */ FT_Fixed; /************************************************************************** * * @type: * FT_Error * * @description: * The FreeType error code type. A value of~0 is always interpreted as a * successful operation. */ FT_Error; /************************************************************************** * * @type: * FT_Pointer * * @description: * A simple typedef for a typeless pointer. */ FT_Pointer; /************************************************************************** * * @type: * FT_Offset * * @description: * This is equivalent to the ANSI~C `size_t` type, i.e., the largest * _unsigned_ integer type used to express a file size or position, or a * memory block size. */ FT_Offset; /************************************************************************** * * @type: * FT_PtrDist * * @description: * This is equivalent to the ANSI~C `ptrdiff_t` type, i.e., the largest * _signed_ integer type used to express the distance between two * pointers. */ FT_PtrDist; /************************************************************************** * * @struct: * FT_UnitVector * * @description: * A simple structure used to store a 2D vector unit vector. Uses * FT_F2Dot14 types. * * @fields: * x :: * Horizontal coordinate. * * y :: * Vertical coordinate. */ FT_UnitVector; /************************************************************************** * * @struct: * FT_Matrix * * @description: * A simple structure used to store a 2x2 matrix. Coefficients are in * 16.16 fixed-point format. The computation performed is: * * ``` * x' = x*xx + y*xy * y' = x*yx + y*yy * ``` * * @fields: * xx :: * Matrix coefficient. * * xy :: * Matrix coefficient. * * yx :: * Matrix coefficient. * * yy :: * Matrix coefficient. */ FT_Matrix; /************************************************************************** * * @struct: * FT_Data * * @description: * Read-only binary data represented as a pointer and a length. * * @fields: * pointer :: * The data. * * length :: * The length of the data in bytes. */ FT_Data; /************************************************************************** * * @functype: * FT_Generic_Finalizer * * @description: * Describe a function used to destroy the 'client' data of any FreeType * object. See the description of the @FT_Generic type for details of * usage. * * @input: * The address of the FreeType object that is under finalization. Its * client data is accessed through its `generic` field. */ FT_Generic_Finalizer; /************************************************************************** * * @struct: * FT_Generic * * @description: * Client applications often need to associate their own data to a * variety of FreeType core objects. For example, a text layout API * might want to associate a glyph cache to a given size object. * * Some FreeType object contains a `generic` field, of type `FT_Generic`, * which usage is left to client applications and font servers. * * It can be used to store a pointer to client-specific data, as well as * the address of a 'finalizer' function, which will be called by * FreeType when the object is destroyed (for example, the previous * client example would put the address of the glyph cache destructor in * the `finalizer` field). * * @fields: * data :: * A typeless pointer to any client-specified data. This field is * completely ignored by the FreeType library. * * finalizer :: * A pointer to a 'generic finalizer' function, which will be called * when the object is destroyed. If this field is set to `NULL`, no * code will be called. */ FT_Generic; /************************************************************************** * * @macro: * FT_MAKE_TAG * * @description: * This macro converts four-letter tags that are used to label TrueType * tables into an `FT_Tag` type, to be used within FreeType. * * @note: * The produced values **must** be 32-bit integers. Don't redefine this * macro. */ #define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) … /*************************************************************************/ /*************************************************************************/ /* */ /* L I S T M A N A G E M E N T */ /* */ /*************************************************************************/ /*************************************************************************/ /************************************************************************** * * @section: * list_processing * */ /************************************************************************** * * @type: * FT_ListNode * * @description: * Many elements and objects in FreeType are listed through an @FT_List * record (see @FT_ListRec). As its name suggests, an FT_ListNode is a * handle to a single list element. */ FT_ListNode; /************************************************************************** * * @type: * FT_List * * @description: * A handle to a list record (see @FT_ListRec). */ FT_List; /************************************************************************** * * @struct: * FT_ListNodeRec * * @description: * A structure used to hold a single list element. * * @fields: * prev :: * The previous element in the list. `NULL` if first. * * next :: * The next element in the list. `NULL` if last. * * data :: * A typeless pointer to the listed object. */ FT_ListNodeRec; /************************************************************************** * * @struct: * FT_ListRec * * @description: * A structure used to hold a simple doubly-linked list. These are used * in many parts of FreeType. * * @fields: * head :: * The head (first element) of doubly-linked list. * * tail :: * The tail (last element) of doubly-linked list. */ FT_ListRec; /* */ #define FT_IS_EMPTY( list ) … #define FT_BOOL( x ) … /* concatenate C tokens */ #define FT_ERR_XCAT( x, y ) … #define FT_ERR_CAT( x, y ) … /* see `ftmoderr.h` for descriptions of the following macros */ #define FT_ERR( e ) … #define FT_ERROR_BASE( x ) … #define FT_ERROR_MODULE( x ) … #define FT_ERR_EQ( x, e ) … #define FT_ERR_NEQ( x, e ) … FT_END_HEADER #endif /* FTTYPES_H_ */ /* END */