vrshoot

annotate libs/ft2static/freetype/internal/ftobjs.h @ 0:b2f14e535253

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