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