168 lines
8.5 KiB
C
168 lines
8.5 KiB
C
/***************************************************************************/
|
|
/* */
|
|
/* 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 */
|