/***************************************************************************/
/*                                                                         */
/*  ahhint.h                                                               */
/*                                                                         */
/*    Glyph hinter (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.        */
/*                                                                         */
/***************************************************************************/


#ifndef __AHHINT_H__
#define __AHHINT_H__


#include <ft2build.h>
#include "ahglobal.h"


FT_BEGIN_HEADER


#define AH_HINT_DEFAULT        0
#define AH_HINT_NO_ALIGNMENT   1
#define AH_HINT_NO_HORZ_EDGES  0x200000L  /* temporary hack */
#define AH_HINT_NO_VERT_EDGES  0x400000L  /* temporary hack */


  /* create a new empty hinter object */
  FT_LOCAL( FT_Error )
  ah_hinter_new( FT_Library  library,
                 AH_Hinter*  ahinter );

  /* Load a hinted glyph in the hinter */
  FT_LOCAL( FT_Error )
  ah_hinter_load_glyph( AH_Hinter     hinter,
                        FT_GlyphSlot  slot,
                        FT_Size       size,
                        FT_UInt       glyph_index,
                        FT_Int32      load_flags );

  /* finalize a hinter object */
  FT_LOCAL( void )
  ah_hinter_done( AH_Hinter  hinter );

  FT_LOCAL( void )
  ah_hinter_done_face_globals( AH_Face_Globals  globals );

  FT_LOCAL( void )
  ah_hinter_get_global_hints( AH_Hinter  hinter,
                              FT_Face    face,
                              void**     global_hints,
                              long*      global_len );

  FT_LOCAL( void )
  ah_hinter_done_global_hints( AH_Hinter  hinter,
                               void*      global_hints );


FT_END_HEADER

#endif /* __AHHINT_H__ */


/* END */
