1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ftobjs.h */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* The FreeType private base classes (specification). */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* Copyright 1996-2015 by */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This file contains the definition of all internal FreeType classes. */ 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __FTOBJS_H__ 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __FTOBJS_H__ 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include <ft2build.h> 30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_RENDER_H 31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_SIZES_H 32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_LCD_FILTER_H 33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_MEMORY_H 34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_GLYPH_LOADER_H 35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_DRIVER_H 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_AUTOHINT_H 37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_SERVICE_H 38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_PIC_H 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_CONFIG_OPTION_INCREMENTAL 41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INCREMENTAL_H 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_BEGIN_HEADER 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Some generic definitions. */ 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef TRUE 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TRUE 1 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FALSE 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FALSE 0 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef NULL 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define NULL (void*)0 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The min and max functions missing in C. As usual, be careful not to */ 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* write things like FT_MIN( a++, b++ ) to avoid side effects. */ 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MIN( a, b ) ( (a) < (b) ? (a) : (b) ) 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) ) 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_ABS( a ) ( (a) < 0 ? -(a) : (a) ) 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov /* 76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min' 77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * algorithm. We use alpha = 1, beta = 3/8, giving us results with a 78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov * largest error less than 7% compared to the exact value. 79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov */ 80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define FT_HYPOT( x, y ) \ 81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ( x = FT_ABS( x ), \ 82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov y = FT_ABS( y ), \ 83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov x > y ? x + ( 3 * y >> 3 ) \ 84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov : y + ( 3 * x >> 3 ) ) 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* we use FT_TYPEOF to suppress signedness compilation warnings */ 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FT_PAD_FLOOR( x, n ) ( (x) & ~FT_TYPEOF( x )( (n)-1 ) ) 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + ((n)/2), n ) 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + ((n)-1), n ) 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FT_PIX_FLOOR( x ) ( (x) & ~FT_TYPEOF( x )63 ) 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_PIX_ROUND( x ) FT_PIX_FLOOR( (x) + 32 ) 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_PIX_CEIL( x ) FT_PIX_FLOOR( (x) + 63 ) 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * character classification functions -- since these are used to parse 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * font files, we must not use those in <ctypes.h> which are 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * locale-dependent 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ft_isdigit( x ) ( ( (unsigned)(x) - '0' ) < 10U ) 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ft_isxdigit( x ) ( ( (unsigned)(x) - '0' ) < 10U || \ 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ( (unsigned)(x) - 'a' ) < 6U || \ 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ( (unsigned)(x) - 'A' ) < 6U ) 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the next two macros assume ASCII representation */ 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ft_isupper( x ) ( ( (unsigned)(x) - 'A' ) < 26U ) 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ft_islower( x ) ( ( (unsigned)(x) - 'a' ) < 26U ) 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ft_isalpha( x ) ( ft_isupper( x ) || ft_islower( x ) ) 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ft_isalnum( x ) ( ft_isdigit( x ) || ft_isalpha( x ) ) 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** C H A R M A P S ****/ 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* handle to internal charmap object */ 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_CMapRec_* FT_CMap; 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* handle to charmap class structure */ 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef const struct FT_CMap_ClassRec_* FT_CMap_Class; 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* internal charmap object structure */ 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_CMapRec_ 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CharMapRec charmap; 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_Class clazz; 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_CMapRec; 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* typecase any pointer to a charmap handle */ 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_CMAP( x ) ((FT_CMap)( x )) 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* obvious macros */ 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_CMAP_PLATFORM_ID( x ) FT_CMAP( x )->charmap.platform_id 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_CMAP_ENCODING_ID( x ) FT_CMAP( x )->charmap.encoding_id 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_CMAP_ENCODING( x ) FT_CMAP( x )->charmap.encoding 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_CMAP_FACE( x ) FT_CMAP( x )->charmap.face 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* class method definitions */ 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_InitFunc)( FT_CMap cmap, 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Pointer init_data ); 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef void 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_DoneFunc)( FT_CMap cmap ); 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_CharIndexFunc)( FT_CMap cmap, 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 char_code ); 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_CharNextFunc)( FT_CMap cmap, 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 *achar_code ); 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_CharVarIndexFunc)( FT_CMap cmap, 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap unicode_cmap, 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 char_code, 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 variant_selector ); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Bool 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_CharVarIsDefaultFunc)( FT_CMap cmap, 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 char_code, 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 variant_selector ); 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt32 * 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_VariantListFunc)( FT_CMap cmap, 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory mem ); 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt32 * 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_CharVariantListFunc)( FT_CMap cmap, 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory mem, 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 char_code ); 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt32 * 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_CMap_VariantCharListFunc)( FT_CMap cmap, 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory mem, 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 variant_selector ); 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_CMap_ClassRec_ 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong size; 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_InitFunc init; 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_DoneFunc done; 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_CharIndexFunc char_index; 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_CharNextFunc char_next; 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Subsequent entries are special ones for format 14 -- the variant */ 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* selector subtable which behaves like no other */ 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_CharVarIndexFunc char_var_index; 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_CharVarIsDefaultFunc char_var_default; 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_VariantListFunc variant_list; 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_CharVariantListFunc charvariant_list; 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_VariantCharListFunc variantchar_list; 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_CMap_ClassRec; 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_CONFIG_OPTION_PIC 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DECLARE_CMAP_CLASS( class_ ) \ 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CALLBACK_TABLE const FT_CMap_ClassRec class_; 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_CMAP_CLASS( \ 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_index_, \ 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_next_, \ 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_var_index_, \ 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_var_default_, \ 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov variant_list_, \ 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov charvariant_list_, \ 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov variantchar_list_ ) \ 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CALLBACK_TABLE_DEF \ 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_CMap_ClassRec class_ = \ 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_index_, \ 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_next_, \ 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_var_index_, \ 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_var_default_, \ 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov variant_list_, \ 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov charvariant_list_, \ 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov variantchar_list_ \ 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* FT_CONFIG_OPTION_PIC */ 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DECLARE_CMAP_CLASS( class_ ) \ 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void \ 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Init_Class_ ## class_( FT_Library library, \ 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_ClassRec* clazz ); 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_CMAP_CLASS( \ 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_index_, \ 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_next_, \ 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_var_index_, \ 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char_var_default_, \ 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov variant_list_, \ 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov charvariant_list_, \ 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov variantchar_list_ ) \ 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void \ 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Init_Class_ ## class_( FT_Library library, \ 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_ClassRec* clazz ) \ 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UNUSED( library ); \ 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->size = size_; \ 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->init = init_; \ 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->done = done_; \ 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->char_index = char_index_; \ 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->char_next = char_next_; \ 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->char_var_index = char_var_index_; \ 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->char_var_default = char_var_default_; \ 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->variant_list = variant_list_; \ 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->charvariant_list = charvariant_list_; \ 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->variantchar_list = variantchar_list_; \ 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_CONFIG_OPTION_PIC */ 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* create a new charmap and add it to charmap->face */ 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Error ) 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_New( FT_CMap_Class clazz, 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Pointer init_data, 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CharMap charmap, 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap *acmap ); 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* destroy a charmap and remove it from face's list */ 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMap_Done( FT_CMap cmap ); 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Face_InternalRec */ 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This structure contains the internal fields of each FT_Face */ 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* object. These fields may change between different releases of */ 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType. */ 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_points :: */ 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The maximum number of points used to store the vectorial outline */ 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* of any glyph in this face. If this value cannot be known in */ 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* advance, or if the face isn't scalable, this should be set to 0. */ 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Only relevant for scalable formats. */ 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* max_contours :: */ 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The maximum number of contours used to store the vectorial */ 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* outline of any glyph in this face. If this value cannot be */ 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* known in advance, or if the face isn't scalable, this should be */ 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* set to 0. Only relevant for scalable formats. */ 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* transform_matrix :: */ 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A 2x2 matrix of 16.16 coefficients used to transform glyph */ 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* outlines after they are loaded from the font. Only used by the */ 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* convenience functions. */ 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* transform_delta :: */ 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A translation vector used to transform glyph outlines after they */ 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* are loaded from the font. Only used by the convenience */ 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* functions. */ 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* transform_flags :: */ 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Some flags used to classify the transform. Only used by the */ 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* convenience functions. */ 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* services :: */ 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A cache for frequently used services. It should be only */ 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* accessed with the macro `FT_FACE_LOOKUP_SERVICE'. */ 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* incremental_interface :: */ 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If non-null, the interface through which glyph data and metrics */ 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* are loaded incrementally for faces that do not provide all of */ 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* this data when first opened. This field exists only if */ 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* @FT_CONFIG_OPTION_INCREMENTAL is defined. */ 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* ignore_unpatented_hinter :: */ 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This boolean flag instructs the glyph loader to ignore the */ 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* native font hinter, if one is found. This is exclusively used */ 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* in the case when the unpatented hinter is compiled within the */ 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* library. */ 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* refcount :: */ 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A counter initialized to~1 at the time an @FT_Face structure is */ 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* created. @FT_Reference_Face increments this counter, and */ 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* @FT_Done_Face only destroys a face if the counter is~1, */ 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* otherwise it simply decrements it. */ 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_Face_InternalRec_ 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Matrix transform_matrix; 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector transform_delta; 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int transform_flags; 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ServiceCacheRec services; 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_CONFIG_OPTION_INCREMENTAL 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Incremental_InterfaceRec* incremental_interface; 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool ignore_unpatented_hinter; 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int refcount; 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_Face_InternalRec; 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Slot_InternalRec */ 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This structure contains the internal fields of each FT_GlyphSlot */ 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* object. These fields may change between different releases of */ 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType. */ 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* loader :: The glyph loader object used to load outlines */ 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* into the glyph slot. */ 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* flags :: Possible values are zero or */ 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_GLYPH_OWN_BITMAP. The latter indicates */ 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* that the FT_GlyphSlot structure owns the */ 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* bitmap buffer. */ 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_transformed :: Boolean. Set to TRUE when the loaded glyph */ 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* must be transformed through a specific */ 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* font transformation. This is _not_ the same */ 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* as the face transform set through */ 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Set_Transform(). */ 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_matrix :: The 2x2 matrix corresponding to the glyph */ 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* transformation, if necessary. */ 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_delta :: The 2d translation vector corresponding to */ 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the glyph transformation, if necessary. */ 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* glyph_hints :: Format-specific glyph hints management. */ 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FT_GLYPH_OWN_BITMAP 0x1U 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_Slot_InternalRec_ 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_GlyphLoader loader; 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt flags; 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool glyph_transformed; 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Matrix glyph_matrix; 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Vector glyph_delta; 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* glyph_hints; 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_GlyphSlot_InternalRec; 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if 0 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Size_InternalRec */ 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This structure contains the internal fields of each FT_Size */ 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* object. Currently, it's empty. */ 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_Size_InternalRec_ 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* empty */ 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_Size_InternalRec; 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** M O D U L E S ****/ 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_ModuleRec */ 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A module object instance. */ 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* clazz :: A pointer to the module's class. */ 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* library :: A handle to the parent library object. */ 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* memory :: A handle to the memory manager. */ 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_ModuleRec_ 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class* clazz; 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Library library; 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory; 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_ModuleRec; 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* typecast an object to an FT_Module */ 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MODULE( x ) ((FT_Module)( x )) 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MODULE_CLASS( x ) FT_MODULE( x )->clazz 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MODULE_LIBRARY( x ) FT_MODULE( x )->library 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MODULE_MEMORY( x ) FT_MODULE( x )->memory 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MODULE_IS_DRIVER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_MODULE_FONT_DRIVER ) 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MODULE_IS_RENDERER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_MODULE_RENDERER ) 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MODULE_IS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_MODULE_HINTER ) 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_MODULE_IS_STYLER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_MODULE_STYLER ) 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DRIVER_IS_SCALABLE( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_MODULE_DRIVER_SCALABLE ) 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DRIVER_USES_OUTLINES( x ) !( FT_MODULE_CLASS( x )->module_flags & \ 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_MODULE_DRIVER_NO_OUTLINES ) 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DRIVER_HAS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_MODULE_DRIVER_HAS_HINTER ) 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Get_Module_Interface */ 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Finds a module and returns its specific interface as a typeless */ 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* pointer. */ 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* library :: A handle to the library object. */ 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* module_name :: The module's name (as an ASCII string). */ 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A module-specific interface if available, 0 otherwise. */ 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* You should better be familiar with FreeType internals to know */ 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* which module to look for, and what its interface is :-) */ 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( const void* ) 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Get_Module_Interface( FT_Library library, 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* mod_name ); 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Pointer ) 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ft_module_get_service( FT_Module module, 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* service_id ); 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** F A C E, S I Z E & G L Y P H S L O T O B J E C T S ****/ 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* a few macros used to perform easy typecasts with minimal brain damage */ 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_FACE( x ) ((FT_Face)(x)) 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_SIZE( x ) ((FT_Size)(x)) 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_SLOT( x ) ((FT_GlyphSlot)(x)) 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_FACE_DRIVER( x ) FT_FACE( x )->driver 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_FACE_LIBRARY( x ) FT_FACE_DRIVER( x )->root.library 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_FACE_MEMORY( x ) FT_FACE( x )->memory 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_FACE_STREAM( x ) FT_FACE( x )->stream 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_SIZE_FACE( x ) FT_SIZE( x )->face 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_SLOT_FACE( x ) FT_SLOT( x )->face 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_FACE_SLOT( x ) FT_FACE( x )->glyph 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_FACE_SIZE( x ) FT_FACE( x )->size 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_New_GlyphSlot */ 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* It is sometimes useful to have more than one glyph slot for a */ 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* given face object. This function is used to create additional */ 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* slots. All of them are automatically discarded when the face is */ 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* destroyed. */ 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* face :: A handle to a parent face object. */ 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Output> */ 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* aslot :: A handle to a new glyph slot object. */ 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0 means success. */ 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Error ) 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_New_GlyphSlot( FT_Face face, 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_GlyphSlot *aslot ); 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Done_GlyphSlot */ 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Destroys a given glyph slot. Remember however that all slots are */ 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* automatically destroyed with its parent. Using this function is */ 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* not always mandatory. */ 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* slot :: A handle to a target glyph slot. */ 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Done_GlyphSlot( FT_GlyphSlot slot ); 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_REQUEST_WIDTH( req ) \ 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ( (req)->horiResolution \ 617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? ( (req)->width * (FT_Pos)(req)->horiResolution + 36 ) / 72 \ 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov : (req)->width ) 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_REQUEST_HEIGHT( req ) \ 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ( (req)->vertResolution \ 622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? ( (req)->height * (FT_Pos)(req)->vertResolution + 36 ) / 72 \ 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov : (req)->height ) 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Set the metrics according to a bitmap strike. */ 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Select_Metrics( FT_Face face, 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong strike_index ); 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Set the metrics according to a size request. */ 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Request_Metrics( FT_Face face, 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Size_Request req ); 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Match a size request against `available_sizes'. */ 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Error ) 640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Match_Size( FT_Face face, 641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Size_Request req, 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool ignore_width, 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong* size_index ); 644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Use the horizontal metrics to synthesize the vertical metrics. */ 647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* If `advance' is zero, it is also synthesized. */ 648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ft_synthesize_vertical_metrics( FT_Glyph_Metrics* metrics, 650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Pos advance ); 651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Free the bitmap of a given glyphslot when needed (i.e., only when it */ 654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* was allocated with ft_glyphslot_alloc_bitmap). */ 655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ft_glyphslot_free_bitmap( FT_GlyphSlot slot ); 657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Allocate a new bitmap buffer in a glyph slot. */ 660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Error ) 661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ft_glyphslot_alloc_bitmap( FT_GlyphSlot slot, 662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong size ); 663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Set the bitmap buffer in a glyph slot to a given pointer. The buffer */ 666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* will not be freed by a later call to ft_glyphslot_free_bitmap. */ 667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ft_glyphslot_set_bitmap( FT_GlyphSlot slot, 669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* buffer ); 670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** R E N D E R E R S ****/ 678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_RENDERER( x ) ((FT_Renderer)( x )) 686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_GLYPH( x ) ((FT_Glyph)( x )) 687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_BITMAP_GLYPH( x ) ((FT_BitmapGlyph)( x )) 688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_OUTLINE_GLYPH( x ) ((FT_OutlineGlyph)( x )) 689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_RendererRec_ 692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ModuleRec root; 694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Renderer_Class* clazz; 695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Glyph_Format glyph_format; 696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Glyph_Class glyph_class; 697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Raster raster; 699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Raster_Render_Func raster_render; 700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Renderer_RenderFunc render; 701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_RendererRec; 703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** F O N T D R I V E R S ****/ 711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* typecast a module into a driver easily */ 719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DRIVER( x ) ((FT_Driver)(x)) 720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* typecast a module as a driver, and get its driver class */ 722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DRIVER_CLASS( x ) FT_DRIVER( x )->clazz 723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DriverRec */ 729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The root font driver class. A font driver is responsible for */ 732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* managing and loading font files of a given format. */ 733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* root :: Contains the fields of the root module class. */ 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* clazz :: A pointer to the font driver's class. Note that */ 738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* this is NOT root.clazz. `class' wasn't used */ 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* as it is a reserved word in C++. */ 740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* faces_list :: The list of faces currently opened by this */ 742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* driver. */ 743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* glyph_loader :: Unused. Used to be glyph loader for all faces */ 745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* managed by this driver. */ 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_DriverRec_ 748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ModuleRec root; 750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Driver_Class clazz; 751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ListRec faces_list; 752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_GlyphLoader glyph_loader; 753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_DriverRec; 755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** L I B R A R I E S ****/ 763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This hook is used by the TrueType debugger. It must be set to an */ 771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* alternate truetype bytecode interpreter function. */ 772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEBUG_HOOK_TRUETYPE 0 773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Set this debug hook to a non-null pointer to force unpatented hinting */ 776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* for all faces when both TT_USE_BYTECODE_INTERPRETER and */ 777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_CONFIG_OPTION_UNPATENTED_HINTING are defined. This is only used */ 778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* during debugging. */ 779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEBUG_HOOK_UNPATENTED_HINTING 1 780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap, 783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Render_Mode render_mode, 784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Library library ); 785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Struct> */ 790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_LibraryRec */ 791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The FreeType library class. This is the root of all FreeType */ 794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* data. Use FT_New_Library() to create a library object, and */ 795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Done_Library() to discard it and all child objects. */ 796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Fields> */ 798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* memory :: The library's memory object. Manages memory */ 799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* allocation. */ 800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* version_major :: The major version number of the library. */ 802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* version_minor :: The minor version number of the library. */ 804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* version_patch :: The current patch level of the library. */ 806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* num_modules :: The number of modules currently registered */ 808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* within this library. This is set to 0 for new */ 809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* libraries. New modules are added through the */ 810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Add_Module() API function. */ 811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* modules :: A table used to store handles to the currently */ 813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* registered modules. Note that each font driver */ 814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* contains a list of its opened faces. */ 815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* renderers :: The list of renderers currently registered */ 817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* within the library. */ 818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* cur_renderer :: The current outline renderer. This is a */ 820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* shortcut used to avoid parsing the list on */ 821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* each call to FT_Outline_Render(). It is a */ 822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* handle to the current renderer for the */ 823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_GLYPH_FORMAT_OUTLINE format. */ 824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* auto_hinter :: XXX */ 826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* raster_pool :: The raster object's render pool. This can */ 828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* ideally be changed dynamically at run-time. */ 829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* raster_pool_size :: The size of the render pool in bytes. */ 831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* debug_hooks :: XXX */ 833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* lcd_filter :: If subpixel rendering is activated, the */ 835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* selected LCD filter mode. */ 836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* lcd_extra :: If subpixel rendering is activated, the number */ 838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* of extra pixels needed for the LCD filter. */ 839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* lcd_weights :: If subpixel rendering is activated, the LCD */ 841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* filter weights, if any. */ 842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* lcd_filter_func :: If subpixel rendering is activated, the LCD */ 844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* filtering callback function. */ 845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* pic_container :: Contains global structs and tables, instead */ 847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* of defining them globallly. */ 848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* refcount :: A counter initialized to~1 at the time an */ 850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* @FT_Library structure is created. */ 851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* @FT_Reference_Library increments this counter, */ 852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* and @FT_Done_Library only destroys a library */ 853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* if the counter is~1, otherwise it simply */ 854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* decrements it. */ 855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct FT_LibraryRec_ 857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory; /* library's memory manager */ 859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int version_major; 861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int version_minor; 862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int version_patch; 863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_modules; 865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module modules[FT_MAX_MODULES]; /* module objects */ 866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ListRec renderers; /* list of renderers */ 868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Renderer cur_renderer; /* current outline renderer */ 869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module auto_hinter; 870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* raster_pool; /* scan-line conversion */ 872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* render pool */ 873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong raster_pool_size; /* size of render pool in bytes */ 874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_DebugHook_Func debug_hooks[4]; 876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING 878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LcdFilter lcd_filter; 879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int lcd_extra; /* number of extra pixels */ 880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte lcd_weights[7]; /* filter weights, if any */ 881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */ 882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_CONFIG_OPTION_PIC 885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_PIC_Container pic_container; 886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int refcount; 889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } FT_LibraryRec; 891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Renderer ) 894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Lookup_Renderer( FT_Library library, 895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Glyph_Format format, 896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ListNode* node ); 897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Error ) 899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Render_Glyph_Internal( FT_Library library, 900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_GlyphSlot slot, 901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Render_Mode render_mode ); 902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef const char* 904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_Face_GetPostscriptNameFunc)( FT_Face face ); 905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_Face_GetGlyphNameFunc)( FT_Face face, 908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt glyph_index, 909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Pointer buffer, 910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt buffer_max ); 911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt 913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_Face_GetGlyphNameIndexFunc)( FT_Face face, 914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_String* glyph_name ); 915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM 918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_New_Memory */ 923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Creates a new memory object. */ 926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A pointer to the new memory object. 0 in case of error. */ 929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( FT_Memory ) 931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_New_Memory( void ); 932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Done_Memory */ 938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Discards memory manager. */ 941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* memory :: A handle to the memory manager. */ 944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_BASE( void ) 946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Done_Memory( FT_Memory memory ); 947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* !FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */ 949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Define default raster's interface. The default raster is located in */ 952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `src/base/ftraster.c'. */ 953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Client applications can register new rasters through the */ 955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Set_Raster() API. */ 956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_NO_DEFAULT_RASTER 958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT_VAR( FT_Raster_Funcs ) ft_default_raster; 959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** P I C S U P P O R T ****/ 968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /**** ****/ 970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* PIC support macros for ftimage.h */ 976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Macro> */ 981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DEFINE_OUTLINE_FUNCS */ 982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Used to initialize an instance of FT_Outline_Funcs struct. */ 985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is defined an init funtion will need to */ 986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* be called with a pre-allocated structure to be filled. */ 987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */ 988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* allocated in the global scope (or the scope where the macro */ 989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is used). */ 990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_CONFIG_OPTION_PIC 992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_OUTLINE_FUNCS( \ 994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov move_to_, \ 996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov line_to_, \ 997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov conic_to_, \ 998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cubic_to_, \ 999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov shift_, \ 1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delta_ ) \ 1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static const FT_Outline_Funcs class_ = \ 1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov move_to_, \ 1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov line_to_, \ 1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov conic_to_, \ 1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cubic_to_, \ 1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov shift_, \ 1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delta_ \ 1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* FT_CONFIG_OPTION_PIC */ 1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_OUTLINE_FUNCS( \ 1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov move_to_, \ 1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov line_to_, \ 1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov conic_to_, \ 1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cubic_to_, \ 1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov shift_, \ 1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delta_ ) \ 1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static FT_Error \ 1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Init_Class_ ## class_( FT_Outline_Funcs* clazz ) \ 1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->move_to = move_to_; \ 1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->line_to = line_to_; \ 1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->conic_to = conic_to_; \ 1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->cubic_to = cubic_to_; \ 1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->shift = shift_; \ 1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->delta = delta_; \ 1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FT_Err_Ok; \ 1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_CONFIG_OPTION_PIC */ 1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Macro> */ 1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DEFINE_RASTER_FUNCS */ 1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Used to initialize an instance of FT_Raster_Funcs struct. */ 1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is defined an init funtion will need to */ 1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* be called with a pre-allocated structure to be filled. */ 1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */ 1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* allocated in the global scope (or the scope where the macro */ 1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is used). */ 1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_CONFIG_OPTION_PIC 1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_RASTER_FUNCS( \ 1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov glyph_format_, \ 1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_new_, \ 1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_reset_, \ 1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_set_mode_, \ 1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_render_, \ 1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_done_ ) \ 1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_Raster_Funcs class_ = \ 1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov glyph_format_, \ 1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_new_, \ 1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_reset_, \ 1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_set_mode_, \ 1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_render_, \ 1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_done_ \ 1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* FT_CONFIG_OPTION_PIC */ 1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_RASTER_FUNCS( \ 1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov glyph_format_, \ 1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_new_, \ 1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_reset_, \ 1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_set_mode_, \ 1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_render_, \ 1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_done_ ) \ 1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void \ 1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Init_Class_ ## class_( FT_Raster_Funcs* clazz ) \ 1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_format = glyph_format_; \ 1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->raster_new = raster_new_; \ 1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->raster_reset = raster_reset_; \ 1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->raster_set_mode = raster_set_mode_; \ 1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->raster_render = raster_render_; \ 1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->raster_done = raster_done_; \ 1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_CONFIG_OPTION_PIC */ 1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* PIC support macros for ftrender.h */ 1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Macro> */ 1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DEFINE_GLYPH */ 1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Used to initialize an instance of FT_Glyph_Class struct. */ 1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is defined an init funtion will need to */ 1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* be called with a pre-allocated stcture to be filled. */ 1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */ 1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* allocated in the global scope (or the scope where the macro */ 1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is used). */ 1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_CONFIG_OPTION_PIC 1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_GLYPH( \ 1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov format_, \ 1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov copy_, \ 1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov transform_, \ 1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bbox_, \ 1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov prepare_ ) \ 1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CALLBACK_TABLE_DEF \ 1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_Glyph_Class class_ = \ 1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov format_, \ 1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov copy_, \ 1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov transform_, \ 1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bbox_, \ 1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov prepare_ \ 1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* FT_CONFIG_OPTION_PIC */ 1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_GLYPH( \ 1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov format_, \ 1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov copy_, \ 1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov transform_, \ 1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bbox_, \ 1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov prepare_ ) \ 1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void \ 1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Init_Class_ ## class_( FT_Glyph_Class* clazz ) \ 1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_size = size_; \ 1151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_format = format_; \ 1152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_init = init_; \ 1153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_done = done_; \ 1154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_copy = copy_; \ 1155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_transform = transform_; \ 1156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_bbox = bbox_; \ 1157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_prepare = prepare_; \ 1158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 1159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_CONFIG_OPTION_PIC */ 1161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Macro> */ 1166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DECLARE_RENDERER */ 1167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Used to create a forward declaration of a */ 1170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Renderer_Class struct instance. */ 1171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Macro> */ 1173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DEFINE_RENDERER */ 1174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Used to initialize an instance of FT_Renderer_Class struct. */ 1177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is defined a `create' funtion will need */ 1179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* to be called with a pointer where the allocated structure is */ 1180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* returned. And when it is no longer needed a `destroy' function */ 1181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* needs to be called to release that allocation. */ 1182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `fcinit.c' (ft_create_default_module_classes) already contains */ 1183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* a mechanism to call these functions for the default modules */ 1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* described in `ftmodule.h'. */ 1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Notice that the created `create' and `destroy' functions call */ 1187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `pic_init' and `pic_free' to allow you to manually allocate and */ 1188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* initialize any additional global data, like a module specific */ 1189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* interface, and put them in the global pic container defined in */ 1190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `ftpic.h'. If you don't need them just implement the functions as */ 1191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* empty to resolve the link error. Also the `pic_init' and */ 1192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `pic_free' functions should be declared in `pic.h', to be referred */ 1193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* by the renderer definition calling `FT_DEFINE_RENDERER' in the */ 1194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* following. */ 1195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */ 1197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* allocated in the global scope (or the scope where the macro */ 1198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is used). */ 1199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_CONFIG_OPTION_PIC 1201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DECLARE_RENDERER( class_ ) \ 1203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT_VAR( const FT_Renderer_Class ) class_; 1204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_RENDERER( \ 1206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags_, \ 1208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_, \ 1216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov glyph_format_, \ 1217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov render_glyph_, \ 1218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov transform_glyph_, \ 1219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_glyph_cbox_, \ 1220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov set_mode_, \ 1221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_class_ ) \ 1222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CALLBACK_TABLE_DEF \ 1223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_Renderer_Class class_ = \ 1224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_DEFINE_ROOT_MODULE( flags_, \ 1226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_ ) \ 1234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov glyph_format_, \ 1235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov render_glyph_, \ 1237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov transform_glyph_, \ 1238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_glyph_cbox_, \ 1239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov set_mode_, \ 1240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_class_ \ 1242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 1243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* FT_CONFIG_OPTION_PIC */ 1245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DECLARE_RENDERER( class_ ) FT_DECLARE_MODULE( class_ ) 1247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_RENDERER( \ 1249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags_, \ 1251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_, \ 1259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov glyph_format_, \ 1260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov render_glyph_, \ 1261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov transform_glyph_, \ 1262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_glyph_cbox_, \ 1263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov set_mode_, \ 1264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov raster_class_ ) \ 1265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void \ 1266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Destroy_Class_ ## class_( FT_Library library, \ 1267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class* clazz ) \ 1268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Renderer_Class* rclazz = (FT_Renderer_Class*)clazz; \ 1270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory = library->memory; \ 1271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_ ## _pic_free( library ); \ 1274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( rclazz ) \ 1275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FREE( rclazz ); \ 1276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } \ 1277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error \ 1280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Create_Class_ ## class_( FT_Library library, \ 1281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class** output_class ) \ 1282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Renderer_Class* clazz = NULL; \ 1284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error; \ 1285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory = library->memory; \ 1286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \ 1289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; \ 1290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = class_ ## _pic_init( library ); \ 1292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( error ) \ 1293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FREE( clazz ); \ 1295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; \ 1296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } \ 1297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_DEFINE_ROOT_MODULE( flags_, \ 1299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_ ) \ 1307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->glyph_format = glyph_format_; \ 1309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->render_glyph = render_glyph_; \ 1311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->transform_glyph = transform_glyph_; \ 1312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->get_glyph_cbox = get_glyph_cbox_; \ 1313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->set_mode = set_mode_; \ 1314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->raster_class = raster_class_; \ 1316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *output_class = (FT_Module_Class*)clazz; \ 1318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FT_Err_Ok; \ 1320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 1321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_CONFIG_OPTION_PIC */ 1323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* PIC support macros for ftmodapi.h **/ 1326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef FT_CONFIG_OPTION_PIC 1329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <FuncType> */ 1333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Module_Creator */ 1334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A function used to create (allocate) a new module class object. */ 1337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The object's members are initialized, but the module itself is */ 1338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* not. */ 1339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 1341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* memory :: A handle to the memory manager. */ 1342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* output_class :: Initialized with the newly allocated class. */ 1343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 1345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_Module_Creator)( FT_Memory memory, 1346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class** output_class ); 1347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <FuncType> */ 1351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Module_Destroyer */ 1352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A function used to destroy (deallocate) a module class object. */ 1355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 1357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* memory :: A handle to the memory manager. */ 1358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* clazz :: Module class to destroy. */ 1359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef void 1361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*FT_Module_Destroyer)( FT_Memory memory, 1362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class* clazz ); 1363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 1365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 1368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Macro> */ 1370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DECLARE_MODULE */ 1371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Used to create a forward declaration of a */ 1374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_Module_Class struct instance. */ 1375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Macro> */ 1377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DEFINE_MODULE */ 1378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Used to initialize an instance of an FT_Module_Class struct. */ 1381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is defined a `create' funtion needs to */ 1383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* be called with a pointer where the allocated structure is */ 1384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* returned. And when it is no longer needed a `destroy' function */ 1385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* needs to be called to release that allocation. */ 1386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `fcinit.c' (ft_create_default_module_classes) already contains */ 1387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* a mechanism to call these functions for the default modules */ 1388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* described in `ftmodule.h'. */ 1389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Notice that the created `create' and `destroy' functions call */ 1391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `pic_init' and `pic_free' to allow you to manually allocate and */ 1392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* initialize any additional global data, like a module specific */ 1393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* interface, and put them in the global pic container defined in */ 1394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `ftpic.h'. If you don't need them just implement the functions as */ 1395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* empty to resolve the link error. Also the `pic_init' and */ 1396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* `pic_free' functions should be declared in `pic.h', to be referred */ 1397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* by the module definition calling `FT_DEFINE_MODULE' in the */ 1398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* following. */ 1399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* When FT_CONFIG_OPTION_PIC is not defined the struct will be */ 1401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* allocated in the global scope (or the scope where the macro */ 1402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is used). */ 1403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Macro> */ 1405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FT_DEFINE_ROOT_MODULE */ 1406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 1408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Used to initialize an instance of an FT_Module_Class struct inside */ 1409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* another struct that contains it or in a function that initializes */ 1410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* that containing struct. */ 1411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 1412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_CONFIG_OPTION_PIC 1413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DECLARE_MODULE( class_ ) \ 1415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CALLBACK_TABLE \ 1416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_Module_Class class_; 1417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_ROOT_MODULE( \ 1419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags_, \ 1420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_ ) \ 1428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags_, \ 1430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_, \ 1441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }, 1442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_MODULE( \ 1444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags_, \ 1446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_ ) \ 1454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CALLBACK_TABLE_DEF \ 1455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_Module_Class class_ = \ 1456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags_, \ 1458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_, \ 1469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 1470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* FT_CONFIG_OPTION_PIC */ 1473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DECLARE_MODULE( class_ ) \ 1475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error \ 1476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Create_Class_ ## class_( FT_Library library, \ 1477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class** output_class ); \ 1478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void \ 1479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Destroy_Class_ ## class_( FT_Library library, \ 1480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class* clazz ); 1481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_ROOT_MODULE( \ 1483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags_, \ 1484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_ ) \ 1492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.module_flags = flags_; \ 1493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.module_size = size_; \ 1494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.module_name = name_; \ 1495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.module_version = version_; \ 1496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.module_requires = requires_; \ 1497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.module_interface = interface_; \ 1499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.module_init = init_; \ 1501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.module_done = done_; \ 1502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->root.get_interface = get_interface_; 1503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_MODULE( \ 1505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_, \ 1506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags_, \ 1507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov size_, \ 1508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov name_, \ 1509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov version_, \ 1510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov requires_, \ 1511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov interface_, \ 1512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov init_, \ 1513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov done_, \ 1514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov get_interface_ ) \ 1515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void \ 1516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Destroy_Class_ ## class_( FT_Library library, \ 1517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class* clazz ) \ 1518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory = library->memory; \ 1520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov class_ ## _pic_free( library ); \ 1523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( clazz ) \ 1524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FREE( clazz ); \ 1525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } \ 1526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error \ 1529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Create_Class_ ## class_( FT_Library library, \ 1530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class** output_class ) \ 1531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory = library->memory; \ 1533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Module_Class* clazz = NULL; \ 1534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error; \ 1535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \ 1538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; \ 1539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = class_ ## _pic_init( library ); \ 1540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( error ) \ 1541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 1542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FREE( clazz ); \ 1543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; \ 1544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } \ 1545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->module_flags = flags_; \ 1547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->module_size = size_; \ 1548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->module_name = name_; \ 1549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->module_version = version_; \ 1550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->module_requires = requires_; \ 1551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->module_interface = interface_; \ 1553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->module_init = init_; \ 1555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->module_done = done_; \ 1556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->get_interface = get_interface_; \ 1557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *output_class = clazz; \ 1559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 1560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FT_Err_Ok; \ 1561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 1562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_CONFIG_OPTION_PIC */ 1564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1566ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_END_HEADER 1567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __FTOBJS_H__ */ 1569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 1572