diff options
Diffstat (limited to 'src/pshinter/pshmod.c')
-rw-r--r-- | src/pshinter/pshmod.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/pshinter/pshmod.c b/src/pshinter/pshmod.c new file mode 100644 index 000000000..f62b93cee --- /dev/null +++ b/src/pshinter/pshmod.c @@ -0,0 +1,114 @@ +/***************************************************************************/ +/* */ +/* pshmod.c */ +/* */ +/* FreeType Postscript hinter module implementation (body). */ +/* */ +/* Copyright 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. */ +/* */ +/***************************************************************************/ + +#include <ft2build.h> +#include FT_INTERNAL_OBJECTS_H +#include "pshrec.h" + + typedef struct + { + FT_ModuleRec root; + PS_HintsRec ps_hints; + + PSH_Globals_FuncsRec globals_funcs; + T1_Hints_FuncsRec t1_funcs; + T2_Hints_FuncsRec t2_funcs; + + } PS_Hinter_ModuleRec, *PS_Hinter_Module; + + + /* finalize module */ + FT_CALLBACK_DEF void + ps_hinter_done( PS_Hinter_Module module ) + { + module->t1_funcs.hints = NULL; + module->t2_funcs.hints = NULL; + + ps_hints_done( &module->ps_hints ); + } + + + /* initialise module, create hints recorder and the interface */ + FT_CALLBACK_DEF FT_Error + ps_hinter_init( PS_Hinter_Module module ) + { + FT_Memory memory = module->root.memory; + + ps_hints_init( &module->ps_hints, memory ); + + psh_globals_funcs_init( &module->globals_funcs ); + + t1_hints_funcs_init( &module->t1_funcs ); + module->t1_funcs.hints = (T1_Hints) & module->ps_hints; + /* XXX: module->t1_funcs.apply = .... */ + + t2_hints_funcs_init( &module->t2_funcs ); + module->t2_funcs.hints = (T2_Hints) & module->ps_hints; + /* XXX: module->t2_funcs.apply = .... */ + + return 0; + } + + + /* returns global hints interface */ + FT_CALLBACK_DEF PSH_Globals_Funcs + pshinter_get_globals_funcs( FT_Module module ) + { + return &((PS_Hinter_Module)module)->globals_funcs; + } + + /* return Type 1 hints interface */ + FT_CALLBACK_DEF T1_Hints_Funcs + pshinter_get_t1_funcs( FT_Module module ) + { + return &((PS_Hinter_Module)module)->t1_funcs; + } + + /* return Type 2 hints interface */ + FT_CALLBACK_DEF T2_Hints_Funcs + pshinter_get_t2_funcs( FT_Module module ) + { + return &((PS_Hinter_Module)module)->t2_funcs; + } + + + FT_CALLBACK_DEF + PSHinter_Interface pshinter_interface = + { + pshinter_get_globals_funcs, + pshinter_get_t1_funcs, + pshinter_get_t2_funcs + }; + + + FT_CALLBACK_TABLE_DEF + const FT_Module_Class pshinter_module_class = + { + 0, + sizeof( FT_ModuleRec ), + "pshinter", + 0x10000L, + 0x20000L, + + &pshinter_interface, /* module-specific interface */ + + (FT_Module_Constructor) ps_hinter_init, + (FT_Module_Destructor) ps_hinter_done, + (FT_Module_Requester) 0 /* no additional interface for now */ + }; + +
\ No newline at end of file |