1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* autohint.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* High-level `autohint' module-specific interface (specification). */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 1996-2001, 2002 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth /*************************************************************************/ 20*37da2899SCharles.Forsyth /* */ 21*37da2899SCharles.Forsyth /* The auto-hinter is used to load and automatically hint glyphs if a */ 22*37da2899SCharles.Forsyth /* format-specific hinter isn't available. */ 23*37da2899SCharles.Forsyth /* */ 24*37da2899SCharles.Forsyth /*************************************************************************/ 25*37da2899SCharles.Forsyth 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth #ifndef __AUTOHINT_H__ 28*37da2899SCharles.Forsyth #define __AUTOHINT_H__ 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth 31*37da2899SCharles.Forsyth /*************************************************************************/ 32*37da2899SCharles.Forsyth /* */ 33*37da2899SCharles.Forsyth /* A small technical note regarding automatic hinting in order to */ 34*37da2899SCharles.Forsyth /* clarify this module interface. */ 35*37da2899SCharles.Forsyth /* */ 36*37da2899SCharles.Forsyth /* An automatic hinter might compute two kinds of data for a given face: */ 37*37da2899SCharles.Forsyth /* */ 38*37da2899SCharles.Forsyth /* - global hints: Usually some metrics that describe global properties */ 39*37da2899SCharles.Forsyth /* of the face. It is computed by scanning more or less */ 40*37da2899SCharles.Forsyth /* agressively the glyphs in the face, and thus can be */ 41*37da2899SCharles.Forsyth /* very slow to compute (even if the size of global */ 42*37da2899SCharles.Forsyth /* hints is really small). */ 43*37da2899SCharles.Forsyth /* */ 44*37da2899SCharles.Forsyth /* - glyph hints: These describe some important features of the glyph */ 45*37da2899SCharles.Forsyth /* outline, as well as how to align them. They are */ 46*37da2899SCharles.Forsyth /* generally much faster to compute than global hints. */ 47*37da2899SCharles.Forsyth /* */ 48*37da2899SCharles.Forsyth /* The current FreeType auto-hinter does a pretty good job while */ 49*37da2899SCharles.Forsyth /* performing fast computations for both global and glyph hints. */ 50*37da2899SCharles.Forsyth /* However, we might be interested in introducing more complex and */ 51*37da2899SCharles.Forsyth /* powerful algorithms in the future, like the one described in the John */ 52*37da2899SCharles.Forsyth /* D. Hobby paper, which unfortunately requires a lot more horsepower. */ 53*37da2899SCharles.Forsyth /* */ 54*37da2899SCharles.Forsyth /* Because a sufficiently sophisticated font management system would */ 55*37da2899SCharles.Forsyth /* typically implement an LRU cache of opened face objects to reduce */ 56*37da2899SCharles.Forsyth /* memory usage, it is a good idea to be able to avoid recomputing */ 57*37da2899SCharles.Forsyth /* global hints every time the same face is re-opened. */ 58*37da2899SCharles.Forsyth /* */ 59*37da2899SCharles.Forsyth /* We thus provide the ability to cache global hints outside of the face */ 60*37da2899SCharles.Forsyth /* object, in order to speed up font re-opening time. Of course, this */ 61*37da2899SCharles.Forsyth /* feature is purely optional, so most client programs won't even notice */ 62*37da2899SCharles.Forsyth /* it. */ 63*37da2899SCharles.Forsyth /* */ 64*37da2899SCharles.Forsyth /* I initially thought that it would be a good idea to cache the glyph */ 65*37da2899SCharles.Forsyth /* hints too. However, my general idea now is that if you really need */ 66*37da2899SCharles.Forsyth /* to cache these too, you are simply in need of a new font format, */ 67*37da2899SCharles.Forsyth /* where all this information could be stored within the font file and */ 68*37da2899SCharles.Forsyth /* decoded on the fly. */ 69*37da2899SCharles.Forsyth /* */ 70*37da2899SCharles.Forsyth /*************************************************************************/ 71*37da2899SCharles.Forsyth 72*37da2899SCharles.Forsyth 73*37da2899SCharles.Forsyth #include <ft2build.h> 74*37da2899SCharles.Forsyth #include FT_FREETYPE_H 75*37da2899SCharles.Forsyth 76*37da2899SCharles.Forsyth 77*37da2899SCharles.Forsyth FT_BEGIN_HEADER 78*37da2899SCharles.Forsyth 79*37da2899SCharles.Forsyth 80*37da2899SCharles.Forsyth typedef struct FT_AutoHinterRec_ *FT_AutoHinter; 81*37da2899SCharles.Forsyth 82*37da2899SCharles.Forsyth 83*37da2899SCharles.Forsyth /*************************************************************************/ 84*37da2899SCharles.Forsyth /* */ 85*37da2899SCharles.Forsyth /* <FuncType> */ 86*37da2899SCharles.Forsyth /* FT_AutoHinter_GlobalGetFunc */ 87*37da2899SCharles.Forsyth /* */ 88*37da2899SCharles.Forsyth /* <Description> */ 89*37da2899SCharles.Forsyth /* Retrieves the global hints computed for a given face object the */ 90*37da2899SCharles.Forsyth /* resulting data is dissociated from the face and will survive a */ 91*37da2899SCharles.Forsyth /* call to FT_Done_Face(). It must be discarded through the API */ 92*37da2899SCharles.Forsyth /* FT_AutoHinter_GlobalDoneFunc(). */ 93*37da2899SCharles.Forsyth /* */ 94*37da2899SCharles.Forsyth /* <Input> */ 95*37da2899SCharles.Forsyth /* hinter :: A handle to the source auto-hinter. */ 96*37da2899SCharles.Forsyth /* */ 97*37da2899SCharles.Forsyth /* face :: A handle to the source face object. */ 98*37da2899SCharles.Forsyth /* */ 99*37da2899SCharles.Forsyth /* <Output> */ 100*37da2899SCharles.Forsyth /* global_hints :: A typeless pointer to the global hints. */ 101*37da2899SCharles.Forsyth /* */ 102*37da2899SCharles.Forsyth /* global_len :: The size in bytes of the global hints. */ 103*37da2899SCharles.Forsyth /* */ 104*37da2899SCharles.Forsyth typedef void 105*37da2899SCharles.Forsyth (*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter hinter, 106*37da2899SCharles.Forsyth FT_Face face, 107*37da2899SCharles.Forsyth void** global_hints, 108*37da2899SCharles.Forsyth long* global_len ); 109*37da2899SCharles.Forsyth 110*37da2899SCharles.Forsyth 111*37da2899SCharles.Forsyth /*************************************************************************/ 112*37da2899SCharles.Forsyth /* */ 113*37da2899SCharles.Forsyth /* <FuncType> */ 114*37da2899SCharles.Forsyth /* FT_AutoHinter_GlobalDoneFunc */ 115*37da2899SCharles.Forsyth /* */ 116*37da2899SCharles.Forsyth /* <Description> */ 117*37da2899SCharles.Forsyth /* Discards the global hints retrieved through */ 118*37da2899SCharles.Forsyth /* FT_AutoHinter_GlobalGetFunc(). This is the only way these hints */ 119*37da2899SCharles.Forsyth /* are freed from memory. */ 120*37da2899SCharles.Forsyth /* */ 121*37da2899SCharles.Forsyth /* <Input> */ 122*37da2899SCharles.Forsyth /* hinter :: A handle to the auto-hinter module. */ 123*37da2899SCharles.Forsyth /* */ 124*37da2899SCharles.Forsyth /* global :: A pointer to retrieved global hints to discard. */ 125*37da2899SCharles.Forsyth /* */ 126*37da2899SCharles.Forsyth typedef void 127*37da2899SCharles.Forsyth (*FT_AutoHinter_GlobalDoneFunc)( FT_AutoHinter hinter, 128*37da2899SCharles.Forsyth void* global ); 129*37da2899SCharles.Forsyth 130*37da2899SCharles.Forsyth 131*37da2899SCharles.Forsyth /*************************************************************************/ 132*37da2899SCharles.Forsyth /* */ 133*37da2899SCharles.Forsyth /* <FuncType> */ 134*37da2899SCharles.Forsyth /* FT_AutoHinter_GlobalResetFunc */ 135*37da2899SCharles.Forsyth /* */ 136*37da2899SCharles.Forsyth /* <Description> */ 137*37da2899SCharles.Forsyth /* This function is used to recompute the global metrics in a given */ 138*37da2899SCharles.Forsyth /* font. This is useful when global font data changes (e.g. Multiple */ 139*37da2899SCharles.Forsyth /* Masters fonts where blend coordinates change). */ 140*37da2899SCharles.Forsyth /* */ 141*37da2899SCharles.Forsyth /* <Input> */ 142*37da2899SCharles.Forsyth /* hinter :: A handle to the source auto-hinter. */ 143*37da2899SCharles.Forsyth /* */ 144*37da2899SCharles.Forsyth /* face :: A handle to the face. */ 145*37da2899SCharles.Forsyth /* */ 146*37da2899SCharles.Forsyth typedef void 147*37da2899SCharles.Forsyth (*FT_AutoHinter_GlobalResetFunc)( FT_AutoHinter hinter, 148*37da2899SCharles.Forsyth FT_Face face ); 149*37da2899SCharles.Forsyth 150*37da2899SCharles.Forsyth 151*37da2899SCharles.Forsyth /*************************************************************************/ 152*37da2899SCharles.Forsyth /* */ 153*37da2899SCharles.Forsyth /* <FuncType> */ 154*37da2899SCharles.Forsyth /* FT_AutoHinter_GlyphLoadFunc */ 155*37da2899SCharles.Forsyth /* */ 156*37da2899SCharles.Forsyth /* <Description> */ 157*37da2899SCharles.Forsyth /* This function is used to load, scale, and automatically hint a */ 158*37da2899SCharles.Forsyth /* glyph from a given face. */ 159*37da2899SCharles.Forsyth /* */ 160*37da2899SCharles.Forsyth /* <Input> */ 161*37da2899SCharles.Forsyth /* face :: A handle to the face. */ 162*37da2899SCharles.Forsyth /* */ 163*37da2899SCharles.Forsyth /* glyph_index :: The glyph index. */ 164*37da2899SCharles.Forsyth /* */ 165*37da2899SCharles.Forsyth /* load_flags :: The load flags. */ 166*37da2899SCharles.Forsyth /* */ 167*37da2899SCharles.Forsyth /* <Note> */ 168*37da2899SCharles.Forsyth /* This function is capable of loading composite glyphs by hinting */ 169*37da2899SCharles.Forsyth /* each sub-glyph independently (which improves quality). */ 170*37da2899SCharles.Forsyth /* */ 171*37da2899SCharles.Forsyth /* It will call the font driver with FT_Load_Glyph(), with */ 172*37da2899SCharles.Forsyth /* FT_LOAD_NO_SCALE set. */ 173*37da2899SCharles.Forsyth /* */ 174*37da2899SCharles.Forsyth typedef FT_Error 175*37da2899SCharles.Forsyth (*FT_AutoHinter_GlyphLoadFunc)( FT_AutoHinter hinter, 176*37da2899SCharles.Forsyth FT_GlyphSlot slot, 177*37da2899SCharles.Forsyth FT_Size size, 178*37da2899SCharles.Forsyth FT_UInt glyph_index, 179*37da2899SCharles.Forsyth FT_Int32 load_flags ); 180*37da2899SCharles.Forsyth 181*37da2899SCharles.Forsyth 182*37da2899SCharles.Forsyth /*************************************************************************/ 183*37da2899SCharles.Forsyth /* */ 184*37da2899SCharles.Forsyth /* <Struct> */ 185*37da2899SCharles.Forsyth /* FT_AutoHinter_ServiceRec */ 186*37da2899SCharles.Forsyth /* */ 187*37da2899SCharles.Forsyth /* <Description> */ 188*37da2899SCharles.Forsyth /* The auto-hinter module's interface. */ 189*37da2899SCharles.Forsyth /* */ 190*37da2899SCharles.Forsyth typedef struct FT_AutoHinter_ServiceRec_ 191*37da2899SCharles.Forsyth { 192*37da2899SCharles.Forsyth FT_AutoHinter_GlobalResetFunc reset_face; 193*37da2899SCharles.Forsyth FT_AutoHinter_GlobalGetFunc get_global_hints; 194*37da2899SCharles.Forsyth FT_AutoHinter_GlobalDoneFunc done_global_hints; 195*37da2899SCharles.Forsyth FT_AutoHinter_GlyphLoadFunc load_glyph; 196*37da2899SCharles.Forsyth 197*37da2899SCharles.Forsyth } FT_AutoHinter_ServiceRec, *FT_AutoHinter_Service; 198*37da2899SCharles.Forsyth 199*37da2899SCharles.Forsyth 200*37da2899SCharles.Forsyth FT_END_HEADER 201*37da2899SCharles.Forsyth 202*37da2899SCharles.Forsyth #endif /* __AUTOHINT_H__ */ 203*37da2899SCharles.Forsyth 204*37da2899SCharles.Forsyth 205*37da2899SCharles.Forsyth /* END */ 206