/******************************************************************* * * ttengine.h 1.1 * * Engine instance structure definition. * * 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. * * New in 1.1 : * * - added the 'raster_lock' mutex field to synchronize * scan-line conversion in thread-safe and re-entrant builds. * ******************************************************************/ #ifndef TTENGINE_H #define TTENGINE_H #include "tttypes.h" #include "ttconfig.h" #include "freetype.h" #include "ttmutex.h" #ifdef __cplusplus extern "C" { #endif /********************************************************************/ /* */ /* The freetype engine instance structure. */ /* */ /* This structure holds all the data that is necessary to run */ /* one instance of the freetype engine. It is needed to get a */ /* completely re-entrant version of the library. */ /* */ /* The goal is to move _all_ component-specific variables, either */ /* static or global in the structure; the component initializers */ /* and finalizers will all be called with the address of a valid */ /* TEngine_Instance. */ /* */ /********************************************************************/ struct TEngine_Instance_ { TMutex lock; /* engine lock */ void* list_free_elements; void* objs_face_class; /* the face cache class */ void* objs_instance_class; /* the instance cache class */ void* objs_execution_class; /* the context cache class */ void* objs_glyph_class; /* the glyph cache class */ void* objs_face_cache; /* these caches are used to track */ void* objs_exec_cache; /* the current face and execution */ /* context objects */ void* file_component; /* ttfile implementation dependent */ TMutex raster_lock; /* mutex for this engine's render pool */ void* raster_component; /* ttraster implementation depedent */ Byte raster_palette[5]; /* gray-levels palette for anti-aliasing */ void* extension_component; /* extensions dependent */ #if 0 TT_Glyph_Loader_Callback glCallback; /* glyph loader callback, if any */ #endif }; /* NOTE : The raster's lock is only acquired by the Render_Glyph and */ /* Render_Gray_Glyph functions, which always release it on exit */ /* They do not lock the engine mutex. This means you shouldn't */ /* be concerned about deadlocks between the two mutexes, as these */ /* should never appear.. */ typedef struct TEngine_Instance_ TEngine_Instance; typedef TEngine_Instance* PEngine_Instance; #ifdef TT_CONFIG_OPTION_THREAD_SAFE /* for re-entrant builds */ #define ENGINE_ARG TEngine_Instance* _engine #define ENGINE_ARGS TEngine_Instance* _engine, #define ENGINE_VAR _engine #define ENGINE_VARS _engine, #define ENGINE _engine #else /* for thread-safe builds */ #define ENGINE_ARG /* void */ #define ENGINE_ARGS #define ENGINE_VAR #define ENGINE_VARS #endif /* TT_CONFIG_OPTION_THREAD_SAFE */ #ifdef __cplusplus } #endif #endif /* TTENGINE_H */ /* END */