| /***************************************************************************/ |
| /* */ |
| /* ftextend.h */ |
| /* */ |
| /* FreeType extensions implementation (specification). */ |
| /* */ |
| /* Copyright 1996-2000 by */ |
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
| /* */ |
| /* This file is part of the FreeType project, and may only be used */ |
| /* modified and distributed under the terms of the FreeType project */ |
| /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
| /* this file you indicate that you have read the license and */ |
| /* understand and accept it fully. */ |
| /* */ |
| /***************************************************************************/ |
| |
| #ifndef FTEXTEND_H |
| #define FTEXTEND_H |
| |
| #include <ftobjs.h> |
| |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /*************************************************************************/ |
| /* */ |
| /* The extensions don't need to be integrated at compile time into the */ |
| /* engine, only at link time. */ |
| /* */ |
| /*************************************************************************/ |
| |
| /*************************************************************************/ |
| /* */ |
| /* <FuncType> */ |
| /* FT_Extension_Initializer */ |
| /* */ |
| /* <Description> */ |
| /* Each new face object can have several extensions associated with */ |
| /* it at creation time. This function is used to initialize given */ |
| /* extension data for a given face. */ |
| /* */ |
| /* <InOut> */ |
| /* ext :: A typeless pointer to the extension data. */ |
| /* face :: A handle to the source face object the extension is */ |
| /* associated with. */ |
| /* */ |
| /* <Return> */ |
| /* FreeType error code. 0 means success. */ |
| /* */ |
| /* <Note> */ |
| /* In case of error, the initializer should not destroy the extension */ |
| /* data, as the finalizer will get called later by the function's */ |
| /* caller. */ |
| /* */ |
| typedef FT_Error (*FT_Extension_Initializer)( void* ext, |
| FT_Face face ); |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <FuncType> */ |
| /* FT_Extension_Finalizer */ |
| /* */ |
| /* <Description> */ |
| /* Each new face object can have several extensions associated with */ |
| /* it at creation time. This function is used to finalize given */ |
| /* extension data for a given face; it occurs before the face object */ |
| /* itself is finalized. */ |
| /* */ |
| /* <InOut> */ |
| /* ext :: A typeless pointer to the extension data. */ |
| /* face :: A handle to the source face object the extension is */ |
| /* associated with. */ |
| /* */ |
| typedef void (*FT_Extension_Finalizer)( void* ext, |
| FT_Face face ); |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <Struct> */ |
| /* FT_Extension_Class */ |
| /* */ |
| /* <Description> */ |
| /* A simple structure used to describe a given extension to the */ |
| /* FreeType base layer. An FT_Extension_Class is used as a parameter */ |
| /* for FT_Register_Extension(). */ |
| /* */ |
| /* <Fields> */ |
| /* id :: The extension's ID. This is a normal C string that */ |
| /* is used to uniquely reference the extension's */ |
| /* interface. */ |
| /* size :: The size in bytes of the extension data that must be */ |
| /* associated with each face object. */ |
| /* init :: A pointer to the extension data's initializer. */ |
| /* finalize :: A pointer to the extension data's finalizer. */ |
| /* interface :: This pointer can be anything, but should usually */ |
| /* point to a table of function pointers which implement */ |
| /* the extension's interface. */ |
| /* */ |
| /* offset :: This field is set and used within the base layer and */ |
| /* should be set to 0 when registering an extension */ |
| /* through FT_Register_Extension(). It contains an */ |
| /* offset within the face's extension block for the */ |
| /* current extension's data. */ |
| /* */ |
| typedef struct FT_Extension_Class_ |
| { |
| const char* id; |
| FT_ULong size; |
| FT_Extension_Initializer init; |
| FT_Extension_Finalizer finalize; |
| void* interface; |
| |
| FT_ULong offset; |
| |
| } FT_Extension_Class; |
| |
| |
| EXPORT_DEF |
| FT_Error FT_Register_Extension( FT_Driver driver, |
| FT_Extension_Class* clazz ); |
| |
| |
| #ifdef FT_CONFIG_OPTION_EXTEND_ENGINE |
| |
| |
| /* Initialize the extension component */ |
| LOCAL_DEF |
| FT_Error FT_Init_Extensions( FT_Library library ); |
| |
| /* Finalize the extension component */ |
| LOCAL_DEF |
| FT_Error FT_Done_Extensions( FT_Library library ); |
| |
| /* Create an extension within a face object. Called by the */ |
| /* face object constructor. */ |
| LOCAL_DEF |
| FT_Error FT_Create_Extensions( FT_Face face ); |
| |
| /* Destroy all extensions within a face object. Called by the */ |
| /* face object destructor. */ |
| LOCAL_DEF |
| FT_Error FT_Destroy_Extensions( FT_Face face ); |
| |
| |
| #endif |
| |
| |
| /* Returns an extension's data & interface according to its ID */ |
| EXPORT_DEF |
| void* FT_Get_Extension( FT_Face face, |
| const char* extension_id, |
| void* *extension_interface ); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| |
| #endif /* FTEXTEND_H */ |
| |
| |
| /* END */ |