freetype2/src/base/ftextend.h

166 lines
5.2 KiB
C

/*******************************************************************
*
* ftextend.h 2.0
*
* Extensions Interface.
*
* Copyright 1996-1999 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 "ftconfig.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
* to it at creation time. This function is used to initialize
* a given extension data for a given face.
*
* <Input>
* ext :: a typeless pointer to the extension data.
* face :: handle to the source face object the extension is
* associated with
*
* <Return>
* Error condition. 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
* to it at creation time. This function is used to finalize
* a given extension data for a given face. This occurs before
* the face object itself is finalized.
*
* <Input>
* ext :: a typeless pointer to the extension data.
* face :: 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
*
* inteface :: 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 & inteface 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 */