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