shithub: freetype+ttf2subf

ref: adf07a930cb0ce44a57018a2c5edbc9ac8916d88
dir: /src/pshinter/pshalgo1.h/

View raw version
/***************************************************************************/
/*                                                                         */
/*  pshalgo1.h                                                             */
/*                                                                         */
/*    First (basic) Postscript hinting routines                            */
/*                                                                         */
/*  Copyright 2001 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.                                        */
/*                                                                         */
/***************************************************************************/

#ifndef __PS_HINTER_ALGO1_H__
#define __PS_HINTER_ALGO1_H__

#include "pshrec.h"

FT_BEGIN_HEADER

  typedef struct PSH1_HintRec_*   PSH1_Hint;

  typedef enum
  {
    PSH1_HINT_FLAG_GHOST  = PS_HINT_FLAG_GHOST,
    PSH1_HINT_FLAG_BOTTOM = PS_HINT_FLAG_BOTTOM,
    PSH1_HINT_FLAG_ACTIVE = 4
  
  } PSH1_Hint_Flags;

#define  psh1_hint_is_active(x)  (((x)->flags  & PSH1_HINT_FLAG_ACTIVE) != 0)
#define  psh1_hint_is_ghost(x)   (((x)->flags  & PSH1_HINT_FLAG_GHOST ) != 0)  

#define  psh1_hint_activate(x)     (x)->flags |= PSH1_HINT_FLAG_ACTIVE
#define  psh1_hint_deactivate(x)   (x)->flags &= ~PSH1_HINT_FLAG_ACTIVE

  typedef struct PSH1_HintRec_
  {
    FT_Int    org_pos;
    FT_Int    org_len;
    FT_Pos    cur_pos;
    FT_Pos    cur_len;
    
    FT_UInt   flags;
    
    PSH1_Hint  parent;
    FT_Int    order;
  
  } PSH1_HintRec;


 /* this is an interpolation zone used for strong points   */
 /* weak points are interpolated according to their strong */
 /* neighbours..                                           */
  typedef struct PSH1_ZoneRec_
  {
    FT_Fixed  scale;
    FT_Fixed  delta;
    FT_Pos    min;
    FT_Pos    max;
    
  } PSH1_ZoneRec, *PSH1_Zone;


  typedef struct PSH1_Hint_TableRec_
  {
    FT_UInt        max_hints;
    FT_UInt        num_hints;
    PSH1_Hint      hints;
    PSH1_Hint*     sort;
    PSH1_Hint*     sort_global;
    FT_UInt        num_zones;
    PSH1_Zone      zones;
    PSH1_Zone      zone;
    PS_Mask_Table  hint_masks;
    PS_Mask_Table  counter_masks;
    
  } PSH1_Hint_TableRec, *PSH1_Hint_Table;


  extern FT_Error
  ps1_hints_apply( PS_Hints      ps_hints,
                   FT_Outline*   outline,
                   PSH_Globals   globals );


#ifdef DEBUG_HINTER
  extern  PSH1_Hint_Table  ps1_debug_hint_table;

  typedef void  (*PSH1_HintFunc)( PSH1_Hint  hint, FT_Bool vertical );
  extern  PSH1_HintFunc    ps1_debug_hint_func;
#endif

FT_END_HEADER

#endif /* __PS_HINTER_FITTER_H__ */