1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* pshalgo1.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* PostScript hinting algorithm 1 (specification). */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 2001 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth #ifndef __PSHALGO1_H__ 20*37da2899SCharles.Forsyth #define __PSHALGO1_H__ 21*37da2899SCharles.Forsyth 22*37da2899SCharles.Forsyth #include "pshrec.h" 23*37da2899SCharles.Forsyth 24*37da2899SCharles.Forsyth FT_BEGIN_HEADER 25*37da2899SCharles.Forsyth 26*37da2899SCharles.Forsyth typedef struct PSH1_HintRec_* PSH1_Hint; 27*37da2899SCharles.Forsyth 28*37da2899SCharles.Forsyth typedef enum 29*37da2899SCharles.Forsyth { 30*37da2899SCharles.Forsyth PSH1_HINT_FLAG_GHOST = PS_HINT_FLAG_GHOST, 31*37da2899SCharles.Forsyth PSH1_HINT_FLAG_BOTTOM = PS_HINT_FLAG_BOTTOM, 32*37da2899SCharles.Forsyth PSH1_HINT_FLAG_ACTIVE = 4 33*37da2899SCharles.Forsyth 34*37da2899SCharles.Forsyth } PSH1_Hint_Flags; 35*37da2899SCharles.Forsyth 36*37da2899SCharles.Forsyth #define psh1_hint_is_active( x ) \ 37*37da2899SCharles.Forsyth ( ( (x)->flags & PSH1_HINT_FLAG_ACTIVE ) != 0 ) 38*37da2899SCharles.Forsyth #define psh1_hint_is_ghost( x ) \ 39*37da2899SCharles.Forsyth ( ( (x)->flags & PSH1_HINT_FLAG_GHOST ) != 0 ) 40*37da2899SCharles.Forsyth 41*37da2899SCharles.Forsyth #define psh1_hint_activate( x ) (x)->flags |= PSH1_HINT_FLAG_ACTIVE 42*37da2899SCharles.Forsyth #define psh1_hint_deactivate( x ) (x)->flags &= ~PSH1_HINT_FLAG_ACTIVE 43*37da2899SCharles.Forsyth 44*37da2899SCharles.Forsyth typedef struct PSH1_HintRec_ 45*37da2899SCharles.Forsyth { 46*37da2899SCharles.Forsyth FT_Int org_pos; 47*37da2899SCharles.Forsyth FT_Int org_len; 48*37da2899SCharles.Forsyth FT_Pos cur_pos; 49*37da2899SCharles.Forsyth FT_Pos cur_len; 50*37da2899SCharles.Forsyth 51*37da2899SCharles.Forsyth FT_UInt flags; 52*37da2899SCharles.Forsyth 53*37da2899SCharles.Forsyth PSH1_Hint parent; 54*37da2899SCharles.Forsyth FT_Int order; 55*37da2899SCharles.Forsyth 56*37da2899SCharles.Forsyth } PSH1_HintRec; 57*37da2899SCharles.Forsyth 58*37da2899SCharles.Forsyth 59*37da2899SCharles.Forsyth /* this is an interpolation zone used for strong points; */ 60*37da2899SCharles.Forsyth /* weak points are interpolated according to their strong */ 61*37da2899SCharles.Forsyth /* neighbours */ 62*37da2899SCharles.Forsyth typedef struct PSH1_ZoneRec_ 63*37da2899SCharles.Forsyth { 64*37da2899SCharles.Forsyth FT_Fixed scale; 65*37da2899SCharles.Forsyth FT_Fixed delta; 66*37da2899SCharles.Forsyth FT_Pos min; 67*37da2899SCharles.Forsyth FT_Pos max; 68*37da2899SCharles.Forsyth 69*37da2899SCharles.Forsyth } PSH1_ZoneRec, *PSH1_Zone; 70*37da2899SCharles.Forsyth 71*37da2899SCharles.Forsyth 72*37da2899SCharles.Forsyth typedef struct PSH1_Hint_TableRec_ 73*37da2899SCharles.Forsyth { 74*37da2899SCharles.Forsyth FT_UInt max_hints; 75*37da2899SCharles.Forsyth FT_UInt num_hints; 76*37da2899SCharles.Forsyth PSH1_Hint hints; 77*37da2899SCharles.Forsyth PSH1_Hint* sort; 78*37da2899SCharles.Forsyth PSH1_Hint* sort_global; 79*37da2899SCharles.Forsyth FT_UInt num_zones; 80*37da2899SCharles.Forsyth PSH1_Zone zones; 81*37da2899SCharles.Forsyth PSH1_Zone zone; 82*37da2899SCharles.Forsyth PS_Mask_Table hint_masks; 83*37da2899SCharles.Forsyth PS_Mask_Table counter_masks; 84*37da2899SCharles.Forsyth 85*37da2899SCharles.Forsyth } PSH1_Hint_TableRec, *PSH1_Hint_Table; 86*37da2899SCharles.Forsyth 87*37da2899SCharles.Forsyth 88*37da2899SCharles.Forsyth extern FT_Error 89*37da2899SCharles.Forsyth ps1_hints_apply( PS_Hints ps_hints, 90*37da2899SCharles.Forsyth FT_Outline* outline, 91*37da2899SCharles.Forsyth PSH_Globals globals, 92*37da2899SCharles.Forsyth FT_Render_Mode hint_mode ); 93*37da2899SCharles.Forsyth 94*37da2899SCharles.Forsyth 95*37da2899SCharles.Forsyth #ifdef DEBUG_HINTER 96*37da2899SCharles.Forsyth extern PSH1_Hint_Table ps1_debug_hint_table; 97*37da2899SCharles.Forsyth 98*37da2899SCharles.Forsyth typedef void 99*37da2899SCharles.Forsyth (*PSH1_HintFunc)( PSH1_Hint hint, 100*37da2899SCharles.Forsyth FT_Bool vertical ); 101*37da2899SCharles.Forsyth 102*37da2899SCharles.Forsyth extern PSH1_HintFunc ps1_debug_hint_func; 103*37da2899SCharles.Forsyth #endif 104*37da2899SCharles.Forsyth 105*37da2899SCharles.Forsyth FT_END_HEADER 106*37da2899SCharles.Forsyth 107*37da2899SCharles.Forsyth #endif /* __PSHALGO1_H__ */ 108*37da2899SCharles.Forsyth 109*37da2899SCharles.Forsyth 110*37da2899SCharles.Forsyth /* END */ 111