| /***************************************************************************/ |
| /* */ |
| /* 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__ */ |