| /***************************************************************************/ |
| /* */ |
| /* pshalgo1.h */ |
| /* */ |
| /* PostScript hinting algorithm 1 (specification). */ |
| /* */ |
| /* 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 __PSHALGO1_H__ |
| #define __PSHALGO1_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, |
| FT_Render_Mode hint_mode ); |
| |
| |
| #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 /* __PSHALGO1_H__ */ |
| |
| |
| /* END */ |