| /***************************************************************************/ |
| /* */ |
| /* ahmodule.c */ |
| /* */ |
| /* Auto-hinting module implementation (declaration). */ |
| /* */ |
| /* Copyright 2000-2001, 2002 Catharon Productions Inc. */ |
| /* Author: David Turner */ |
| /* */ |
| /* This file is part of the Catharon Typography Project and shall only */ |
| /* be used, modified, and distributed under the terms of the Catharon */ |
| /* Open Source License that should come with this file under the name */ |
| /* `CatharonLicense.txt'. By continuing to use, modify, or distribute */ |
| /* this file you indicate that you have read the license and */ |
| /* understand and accept it fully. */ |
| /* */ |
| /* Note that this license is compatible with the FreeType license. */ |
| /* */ |
| /***************************************************************************/ |
| |
| |
| #include <ft2build.h> |
| #include FT_MODULE_H |
| #include "ahhint.h" |
| |
| |
| #ifdef DEBUG_HINTER |
| AH_Hinter ah_debug_hinter = NULL; |
| FT_Bool ah_debug_disable_horz = 0; |
| FT_Bool ah_debug_disable_vert = 0; |
| #endif |
| |
| typedef struct FT_AutoHinterRec_ |
| { |
| FT_ModuleRec root; |
| AH_Hinter hinter; |
| |
| } FT_AutoHinterRec; |
| |
| |
| FT_CALLBACK_DEF( FT_Error ) |
| ft_autohinter_init( FT_AutoHinter module ) |
| { |
| FT_Error error; |
| |
| |
| error = ah_hinter_new( module->root.library, &module->hinter ); |
| #ifdef DEBUG_HINTER |
| if ( !error ) |
| ah_debug_hinter = module->hinter; |
| #endif |
| return error; |
| } |
| |
| |
| FT_CALLBACK_DEF( void ) |
| ft_autohinter_done( FT_AutoHinter module ) |
| { |
| ah_hinter_done( module->hinter ); |
| |
| #ifdef DEBUG_HINTER |
| ah_debug_hinter = NULL; |
| #endif |
| } |
| |
| |
| FT_CALLBACK_DEF( FT_Error ) |
| ft_autohinter_load_glyph( FT_AutoHinter module, |
| FT_GlyphSlot slot, |
| FT_Size size, |
| FT_UInt glyph_index, |
| FT_Int32 load_flags ) |
| { |
| return ah_hinter_load_glyph( module->hinter, |
| slot, size, glyph_index, load_flags ); |
| } |
| |
| |
| FT_CALLBACK_DEF( void ) |
| ft_autohinter_reset_globals( FT_AutoHinter module, |
| FT_Face face ) |
| { |
| FT_UNUSED( module ); |
| |
| if ( face->autohint.data ) |
| ah_hinter_done_face_globals( (AH_Face_Globals)(face->autohint.data) ); |
| } |
| |
| |
| FT_CALLBACK_DEF( void ) |
| ft_autohinter_get_globals( FT_AutoHinter module, |
| FT_Face face, |
| void** global_hints, |
| long* global_len ) |
| { |
| ah_hinter_get_global_hints( module->hinter, face, |
| global_hints, global_len ); |
| } |
| |
| |
| FT_CALLBACK_DEF( void ) |
| ft_autohinter_done_globals( FT_AutoHinter module, |
| void* global_hints ) |
| { |
| ah_hinter_done_global_hints( module->hinter, global_hints ); |
| } |
| |
| |
| FT_CALLBACK_TABLE_DEF |
| const FT_AutoHinter_ServiceRec ft_autohinter_service = |
| { |
| ft_autohinter_reset_globals, |
| ft_autohinter_get_globals, |
| ft_autohinter_done_globals, |
| ft_autohinter_load_glyph |
| }; |
| |
| |
| FT_CALLBACK_TABLE_DEF |
| const FT_Module_Class autohint_module_class = |
| { |
| ft_module_hinter, |
| sizeof ( FT_AutoHinterRec ), |
| |
| "autohinter", |
| 0x10000L, /* version 1.0 of the autohinter */ |
| 0x20000L, /* requires FreeType 2.0 or above */ |
| |
| (const void*) &ft_autohinter_service, |
| |
| (FT_Module_Constructor)ft_autohinter_init, |
| (FT_Module_Destructor) ft_autohinter_done, |
| (FT_Module_Requester) 0 |
| }; |
| |
| |
| /* END */ |