Werner Lemberg | f13516c | 2005-03-03 17:09:08 +0000 | [diff] [blame] | 1 | /***************************************************************************/ |
| 2 | /* */ |
| 3 | /* afmodule.c */ |
| 4 | /* */ |
| 5 | /* Auto-fitter module implementation (body). */ |
| 6 | /* */ |
Werner Lemberg | 111b5ae | 2006-11-03 09:40:12 +0000 | [diff] [blame] | 7 | /* Copyright 2003, 2004, 2005, 2006 by */ |
Werner Lemberg | f13516c | 2005-03-03 17:09:08 +0000 | [diff] [blame] | 8 | /* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
| 9 | /* */ |
| 10 | /* This file is part of the FreeType project, and may only be used, */ |
| 11 | /* modified, and distributed under the terms of the FreeType project */ |
| 12 | /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
| 13 | /* this file you indicate that you have read the license and */ |
| 14 | /* understand and accept it fully. */ |
| 15 | /* */ |
| 16 | /***************************************************************************/ |
| 17 | |
| 18 | |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 19 | #include "afmodule.h" |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 20 | #include "afloader.h" |
Oran Agra | 59b4af8 | 2009-04-05 18:23:38 +0300 | [diff] [blame] | 21 | #include "afpic.h" |
Werner Lemberg | f13516c | 2005-03-03 17:09:08 +0000 | [diff] [blame] | 22 | |
David Turner | 6f8c622 | 2006-09-26 15:42:44 +0000 | [diff] [blame] | 23 | #ifdef AF_DEBUG |
Werner Lemberg | 111b5ae | 2006-11-03 09:40:12 +0000 | [diff] [blame] | 24 | int _af_debug; |
| 25 | int _af_debug_disable_horz_hints; |
| 26 | int _af_debug_disable_vert_hints; |
| 27 | int _af_debug_disable_blue_hints; |
David Turner | 4060474 | 2006-11-02 16:37:35 +0000 | [diff] [blame] | 28 | void* _af_debug_hints; |
David Turner | 6f8c622 | 2006-09-26 15:42:44 +0000 | [diff] [blame] | 29 | #endif |
| 30 | |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 31 | #include FT_INTERNAL_OBJECTS_H |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 32 | |
Werner Lemberg | f13516c | 2005-03-03 17:09:08 +0000 | [diff] [blame] | 33 | |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 34 | typedef struct FT_AutofitterRec_ |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 35 | { |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 36 | FT_ModuleRec root; |
| 37 | AF_LoaderRec loader[1]; |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 38 | |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 39 | } FT_AutofitterRec, *FT_Autofitter; |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 40 | |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 41 | |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 42 | FT_CALLBACK_DEF( FT_Error ) |
| 43 | af_autofitter_init( FT_Autofitter module ) |
| 44 | { |
| 45 | return af_loader_init( module->loader, module->root.library->memory ); |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 46 | } |
| 47 | |
| 48 | |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 49 | FT_CALLBACK_DEF( void ) |
| 50 | af_autofitter_done( FT_Autofitter module ) |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 51 | { |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 52 | af_loader_done( module->loader ); |
David Turner | 8ccb455 | 2004-01-16 09:51:00 +0000 | [diff] [blame] | 53 | } |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 54 | |
| 55 | |
| 56 | FT_CALLBACK_DEF( FT_Error ) |
| 57 | af_autofitter_load_glyph( FT_Autofitter module, |
| 58 | FT_GlyphSlot slot, |
| 59 | FT_Size size, |
| 60 | FT_UInt glyph_index, |
| 61 | FT_Int32 load_flags ) |
| 62 | { |
Werner Lemberg | 07dcc10 | 2004-04-21 22:27:11 +0000 | [diff] [blame] | 63 | FT_UNUSED( size ); |
David Turner | 10bf05a | 2004-04-21 14:30:37 +0000 | [diff] [blame] | 64 | |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 65 | return af_loader_load_glyph( module->loader, slot->face, |
| 66 | glyph_index, load_flags ); |
| 67 | } |
| 68 | |
| 69 | |
Oran Agra | 59b4af8 | 2009-04-05 18:23:38 +0300 | [diff] [blame] | 70 | FT_DEFINE_AUTOHINTER_SERVICE(af_autofitter_service, |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 71 | NULL, |
| 72 | NULL, |
| 73 | NULL, |
Werner Lemberg | f13516c | 2005-03-03 17:09:08 +0000 | [diff] [blame] | 74 | (FT_AutoHinter_GlyphLoadFunc)af_autofitter_load_glyph |
Oran Agra | 59b4af8 | 2009-04-05 18:23:38 +0300 | [diff] [blame] | 75 | ) |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 76 | |
Oran Agra | 59b4af8 | 2009-04-05 18:23:38 +0300 | [diff] [blame] | 77 | FT_DEFINE_MODULE(autofit_module_class, |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 78 | |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 79 | FT_MODULE_HINTER, |
| 80 | sizeof ( FT_AutofitterRec ), |
| 81 | |
| 82 | "autofitter", |
| 83 | 0x10000L, /* version 1.0 of the autofitter */ |
| 84 | 0x20000L, /* requires FreeType 2.0 or above */ |
| 85 | |
Oran Agra | 59b4af8 | 2009-04-05 18:23:38 +0300 | [diff] [blame] | 86 | (const void*)&AF_AF_AUTOFITTER_SERVICE_GET, |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 87 | |
Werner Lemberg | f13516c | 2005-03-03 17:09:08 +0000 | [diff] [blame] | 88 | (FT_Module_Constructor)af_autofitter_init, |
| 89 | (FT_Module_Destructor) af_autofitter_done, |
| 90 | (FT_Module_Requester) NULL |
Oran Agra | 59b4af8 | 2009-04-05 18:23:38 +0300 | [diff] [blame] | 91 | ) |
David Turner | f546bac | 2004-02-01 16:59:06 +0000 | [diff] [blame] | 92 | |
| 93 | |
| 94 | /* END */ |