/***************************************************************************/
/*                                                                         */
/*  autohint.h                                                             */
/*                                                                         */
/*    High-level `autohint' module-specific interface (specification).     */
/*                                                                         */
/*  Copyright 1996-2002, 2007, 2009, 2012 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.                                        */
/*                                                                         */
/***************************************************************************/


  /*************************************************************************/
  /*                                                                       */
  /* The auto-hinter is used to load and automatically hint glyphs if a    */
  /* format-specific hinter isn't available.                               */
  /*                                                                       */
  /*************************************************************************/


#ifndef __AUTOHINT_H__
#define __AUTOHINT_H__


  /*************************************************************************/
  /*                                                                       */
  /* A small technical note regarding automatic hinting in order to        */
  /* clarify this module interface.                                        */
  /*                                                                       */
  /* An automatic hinter might compute two kinds of data for a given face: */
  /*                                                                       */
  /* - global hints: Usually some metrics that describe global properties  */
  /*                 of the face.  It is computed by scanning more or less */
  /*                 aggressively the glyphs in the face, and thus can be  */
  /*                 very slow to compute (even if the size of global      */
  /*                 hints is really small).                               */
  /*                                                                       */
  /* - glyph hints:  These describe some important features of the glyph   */
  /*                 outline, as well as how to align them.  They are      */
  /*                 generally much faster to compute than global hints.   */
  /*                                                                       */
  /* The current FreeType auto-hinter does a pretty good job while         */
  /* performing fast computations for both global and glyph hints.         */
  /* However, we might be interested in introducing more complex and       */
  /* powerful algorithms in the future, like the one described in the John */
  /* D. Hobby paper, which unfortunately requires a lot more horsepower.   */
  /*                                                                       */
  /* Because a sufficiently sophisticated font management system would     */
  /* typically implement an LRU cache of opened face objects to reduce     */
  /* memory usage, it is a good idea to be able to avoid recomputing       */
  /* global hints every time the same face is re-opened.                   */
  /*                                                                       */
  /* We thus provide the ability to cache global hints outside of the face */
  /* object, in order to speed up font re-opening time.  Of course, this   */
  /* feature is purely optional, so most client programs won't even notice */
  /* it.                                                                   */
  /*                                                                       */
  /* I initially thought that it would be a good idea to cache the glyph   */
  /* hints too.  However, my general idea now is that if you really need   */
  /* to cache these too, you are simply in need of a new font format,      */
  /* where all this information could be stored within the font file and   */
  /* decoded on the fly.                                                   */
  /*                                                                       */
  /*************************************************************************/


#include "../../ft2build.h"
#include "../freetype.h"


FT_BEGIN_HEADER


  typedef struct FT_AutoHinterRec_  *FT_AutoHinter;


  /*************************************************************************/
  /*                                                                       */
  /* <FuncType>                                                            */
  /*    FT_AutoHinter_GlobalGetFunc                                        */
  /*                                                                       */
  /* <Description>                                                         */
  /*    Retrieve the global hints computed for a given face object.  The   */
  /*    resulting data is dissociated from the face and will survive a     */
  /*    call to FT_Done_Face().  It must be discarded through the API      */
  /*    FT_AutoHinter_GlobalDoneFunc().                                    */
  /*                                                                       */
  /* <Input>                                                               */
  /*    hinter       :: A handle to the source auto-hinter.                */
  /*                                                                       */
  /*    face         :: A handle to the source face object.                */
  /*                                                                       */
  /* <Output>                                                              */
  /*    global_hints :: A typeless pointer to the global hints.            */
  /*                                                                       */
  /*    global_len   :: The size in bytes of the global hints.             */
  /*                                                                       */
  typedef void
  (*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter  hinter,
                                  FT_Face        face,
                                  void**         global_hints,
                                  long*          global_len );


  /*************************************************************************/
  /*                                                                       */
  /* <FuncType>                                                            */
  /*    FT_AutoHinter_GlobalDoneFunc                                       */
  /*                                                                       */
  /* <Description>                                                         */
  /*    Discard the global hints retrieved through                         */
  /*    FT_AutoHinter_GlobalGetFunc().  This is the only way these hints   */
  /*    are freed from memory.                                             */
  /*                                                                       */
  /* <Input>                                                               */
  /*    hinter :: A handle to the auto-hinter module.                      */
  /*                                                                       */
  /*    global :: A pointer to retrieved global hints to discard.          */
  /*                                                                       */
  typedef void
  (*FT_AutoHinter_GlobalDoneFunc)( FT_AutoHinter  hinter,
                                   void*          global );


  /*************************************************************************/
  /*                                                                       */
  /* <FuncType>                                                            */
  /*    FT_AutoHinter_GlobalResetFunc                                      */
  /*                                                                       */
  /* <Description>                                                         */
  /*    This function is used to recompute the global metrics in a given   */
  /*    font.  This is useful when global font data changes (e.g. Multiple */
  /*    Masters fonts where blend coordinates change).                     */
  /*                                                                       */
  /* <Input>                                                               */
  /*    hinter :: A handle to the source auto-hinter.                      */
  /*                                                                       */
  /*    face   :: A handle to the face.                                    */
  /*                                                                       */
  typedef void
  (*FT_AutoHinter_GlobalResetFunc)( FT_AutoHinter  hinter,
                                    FT_Face        face );


  /*************************************************************************/
  /*                                                                       */
  /* <FuncType>                                                            */
  /*    FT_AutoHinter_GlyphLoadFunc                                        */
  /*                                                                       */
  /* <Description>                                                         */
  /*    This function is used to load, scale, and automatically hint a     */
  /*    glyph from a given face.                                           */
  /*                                                                       */
  /* <Input>                                                               */
  /*    face        :: A handle to the face.                               */
  /*                                                                       */
  /*    glyph_index :: The glyph index.                                    */
  /*                                                                       */
  /*    load_flags  :: The load flags.                                     */
  /*                                                                       */
  /* <Note>                                                                */
  /*    This function is capable of loading composite glyphs by hinting    */
  /*    each sub-glyph independently (which improves quality).             */
  /*                                                                       */
  /*    It will call the font driver with @FT_Load_Glyph, with             */
  /*    @FT_LOAD_NO_SCALE set.                                             */
  /*                                                                       */
  typedef FT_Error
  (*FT_AutoHinter_GlyphLoadFunc)( FT_AutoHinter  hinter,
                                  FT_GlyphSlot   slot,
                                  FT_Size        size,
                                  FT_UInt        glyph_index,
                                  FT_Int32       load_flags );


  /*************************************************************************/
  /*                                                                       */
  /* <Struct>                                                              */
  /*    FT_AutoHinter_InterfaceRec                                         */
  /*                                                                       */
  /* <Description>                                                         */
  /*    The auto-hinter module's interface.                                */
  /*                                                                       */
  typedef struct  FT_AutoHinter_InterfaceRec_
  {
    FT_AutoHinter_GlobalResetFunc  reset_face;
    FT_AutoHinter_GlobalGetFunc    get_global_hints;
    FT_AutoHinter_GlobalDoneFunc   done_global_hints;
    FT_AutoHinter_GlyphLoadFunc    load_glyph;

  } FT_AutoHinter_InterfaceRec, *FT_AutoHinter_Interface;


#ifndef FT_CONFIG_OPTION_PIC

#define FT_DEFINE_AUTOHINTER_INTERFACE(       \
          class_,                             \
          reset_face_,                        \
          get_global_hints_,                  \
          done_global_hints_,                 \
          load_glyph_ )                       \
  FT_CALLBACK_TABLE_DEF                       \
  const FT_AutoHinter_InterfaceRec  class_ =  \
  {                                           \
    reset_face_,                              \
    get_global_hints_,                        \
    done_global_hints_,                       \
    load_glyph_                               \
  };

#else /* FT_CONFIG_OPTION_PIC */

#define FT_DEFINE_AUTOHINTER_INTERFACE(                            \
          class_,                                                  \
          reset_face_,                                             \
          get_global_hints_,                                       \
          done_global_hints_,                                      \
          load_glyph_ )                                            \
  void                                                             \
  FT_Init_Class_ ## class_( FT_Library                   library,  \
                            FT_AutoHinter_InterfaceRec*  clazz )   \
  {                                                                \
    FT_UNUSED( library );                                          \
                                                                   \
    clazz->reset_face        = reset_face_;                        \
    clazz->get_global_hints  = get_global_hints_;                  \
    clazz->done_global_hints = done_global_hints_;                 \
    clazz->load_glyph        = load_glyph_;                        \
  }

#endif /* FT_CONFIG_OPTION_PIC */

FT_END_HEADER

#endif /* __AUTOHINT_H__ */


/* END */
