1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* pshglob.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* PostScript hinter global hinting management. */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 2001, 2002 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 __PSHGLOB_H__ 20*37da2899SCharles.Forsyth #define __PSHGLOB_H__ 21*37da2899SCharles.Forsyth 22*37da2899SCharles.Forsyth 23*37da2899SCharles.Forsyth #include FT_FREETYPE_H 24*37da2899SCharles.Forsyth #include FT_INTERNAL_POSTSCRIPT_HINTS_H 25*37da2899SCharles.Forsyth 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth FT_BEGIN_HEADER 28*37da2899SCharles.Forsyth 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth /*************************************************************************/ 31*37da2899SCharles.Forsyth /*************************************************************************/ 32*37da2899SCharles.Forsyth /***** *****/ 33*37da2899SCharles.Forsyth /***** GLOBAL HINTS INTERNALS *****/ 34*37da2899SCharles.Forsyth /***** *****/ 35*37da2899SCharles.Forsyth /*************************************************************************/ 36*37da2899SCharles.Forsyth /*************************************************************************/ 37*37da2899SCharles.Forsyth 38*37da2899SCharles.Forsyth 39*37da2899SCharles.Forsyth /*************************************************************************/ 40*37da2899SCharles.Forsyth /* */ 41*37da2899SCharles.Forsyth /* @constant: */ 42*37da2899SCharles.Forsyth /* PS_GLOBALS_MAX_BLUE_ZONES */ 43*37da2899SCharles.Forsyth /* */ 44*37da2899SCharles.Forsyth /* @description: */ 45*37da2899SCharles.Forsyth /* The maximum number of blue zones in a font global hints structure. */ 46*37da2899SCharles.Forsyth /* See @PS_Globals_BluesRec. */ 47*37da2899SCharles.Forsyth /* */ 48*37da2899SCharles.Forsyth #define PS_GLOBALS_MAX_BLUE_ZONES 16 49*37da2899SCharles.Forsyth 50*37da2899SCharles.Forsyth 51*37da2899SCharles.Forsyth /*************************************************************************/ 52*37da2899SCharles.Forsyth /* */ 53*37da2899SCharles.Forsyth /* @constant: */ 54*37da2899SCharles.Forsyth /* PS_GLOBALS_MAX_STD_WIDTHS */ 55*37da2899SCharles.Forsyth /* */ 56*37da2899SCharles.Forsyth /* @description: */ 57*37da2899SCharles.Forsyth /* The maximum number of standard and snap widths in either the */ 58*37da2899SCharles.Forsyth /* horizontal or vertical direction. See @PS_Globals_WidthsRec. */ 59*37da2899SCharles.Forsyth /* */ 60*37da2899SCharles.Forsyth #define PS_GLOBALS_MAX_STD_WIDTHS 16 61*37da2899SCharles.Forsyth 62*37da2899SCharles.Forsyth 63*37da2899SCharles.Forsyth /* standard and snap width */ 64*37da2899SCharles.Forsyth typedef struct PSH_WidthRec_ 65*37da2899SCharles.Forsyth { 66*37da2899SCharles.Forsyth FT_Int org; 67*37da2899SCharles.Forsyth FT_Pos cur; 68*37da2899SCharles.Forsyth FT_Pos fit; 69*37da2899SCharles.Forsyth 70*37da2899SCharles.Forsyth } PSH_WidthRec, *PSH_Width; 71*37da2899SCharles.Forsyth 72*37da2899SCharles.Forsyth 73*37da2899SCharles.Forsyth /* standard and snap widths table */ 74*37da2899SCharles.Forsyth typedef struct PSH_WidthsRec_ 75*37da2899SCharles.Forsyth { 76*37da2899SCharles.Forsyth FT_UInt count; 77*37da2899SCharles.Forsyth PSH_WidthRec widths[PS_GLOBALS_MAX_STD_WIDTHS]; 78*37da2899SCharles.Forsyth 79*37da2899SCharles.Forsyth } PSH_WidthsRec, *PSH_Widths; 80*37da2899SCharles.Forsyth 81*37da2899SCharles.Forsyth 82*37da2899SCharles.Forsyth typedef struct PSH_DimensionRec_ 83*37da2899SCharles.Forsyth { 84*37da2899SCharles.Forsyth PSH_WidthsRec stdw; 85*37da2899SCharles.Forsyth FT_Fixed scale_mult; 86*37da2899SCharles.Forsyth FT_Fixed scale_delta; 87*37da2899SCharles.Forsyth 88*37da2899SCharles.Forsyth } PSH_DimensionRec, *PSH_Dimension; 89*37da2899SCharles.Forsyth 90*37da2899SCharles.Forsyth 91*37da2899SCharles.Forsyth /* blue zone descriptor */ 92*37da2899SCharles.Forsyth typedef struct PSH_Blue_ZoneRec_ 93*37da2899SCharles.Forsyth { 94*37da2899SCharles.Forsyth FT_Int org_ref; 95*37da2899SCharles.Forsyth FT_Int org_delta; 96*37da2899SCharles.Forsyth FT_Int org_top; 97*37da2899SCharles.Forsyth FT_Int org_bottom; 98*37da2899SCharles.Forsyth 99*37da2899SCharles.Forsyth FT_Pos cur_ref; 100*37da2899SCharles.Forsyth FT_Pos cur_delta; 101*37da2899SCharles.Forsyth FT_Pos cur_bottom; 102*37da2899SCharles.Forsyth FT_Pos cur_top; 103*37da2899SCharles.Forsyth 104*37da2899SCharles.Forsyth } PSH_Blue_ZoneRec, *PSH_Blue_Zone; 105*37da2899SCharles.Forsyth 106*37da2899SCharles.Forsyth 107*37da2899SCharles.Forsyth typedef struct PSH_Blue_TableRec_ 108*37da2899SCharles.Forsyth { 109*37da2899SCharles.Forsyth FT_UInt count; 110*37da2899SCharles.Forsyth PSH_Blue_ZoneRec zones[PS_GLOBALS_MAX_BLUE_ZONES]; 111*37da2899SCharles.Forsyth 112*37da2899SCharles.Forsyth } PSH_Blue_TableRec, *PSH_Blue_Table; 113*37da2899SCharles.Forsyth 114*37da2899SCharles.Forsyth 115*37da2899SCharles.Forsyth /* blue zones table */ 116*37da2899SCharles.Forsyth typedef struct PSH_BluesRec_ 117*37da2899SCharles.Forsyth { 118*37da2899SCharles.Forsyth PSH_Blue_TableRec normal_top; 119*37da2899SCharles.Forsyth PSH_Blue_TableRec normal_bottom; 120*37da2899SCharles.Forsyth PSH_Blue_TableRec family_top; 121*37da2899SCharles.Forsyth PSH_Blue_TableRec family_bottom; 122*37da2899SCharles.Forsyth 123*37da2899SCharles.Forsyth FT_Fixed blue_scale; 124*37da2899SCharles.Forsyth FT_Int blue_shift; 125*37da2899SCharles.Forsyth FT_Int blue_threshold; 126*37da2899SCharles.Forsyth FT_Int blue_fuzz; 127*37da2899SCharles.Forsyth FT_Bool no_overshoots; 128*37da2899SCharles.Forsyth 129*37da2899SCharles.Forsyth } PSH_BluesRec, *PSH_Blues; 130*37da2899SCharles.Forsyth 131*37da2899SCharles.Forsyth 132*37da2899SCharles.Forsyth /* font globals. */ 133*37da2899SCharles.Forsyth /* dimension 0 => X coordinates + vertical hints/stems */ 134*37da2899SCharles.Forsyth /* dimension 1 => Y coordinates + horizontal hints/stems */ 135*37da2899SCharles.Forsyth typedef struct PSH_GlobalsRec_ 136*37da2899SCharles.Forsyth { 137*37da2899SCharles.Forsyth FT_Memory memory; 138*37da2899SCharles.Forsyth PSH_DimensionRec dimension[2]; 139*37da2899SCharles.Forsyth PSH_BluesRec blues; 140*37da2899SCharles.Forsyth 141*37da2899SCharles.Forsyth } PSH_GlobalsRec; 142*37da2899SCharles.Forsyth 143*37da2899SCharles.Forsyth 144*37da2899SCharles.Forsyth #define PSH_BLUE_ALIGN_NONE 0 145*37da2899SCharles.Forsyth #define PSH_BLUE_ALIGN_TOP 1 146*37da2899SCharles.Forsyth #define PSH_BLUE_ALIGN_BOT 2 147*37da2899SCharles.Forsyth 148*37da2899SCharles.Forsyth 149*37da2899SCharles.Forsyth typedef struct PSH_AlignmentRec_ 150*37da2899SCharles.Forsyth { 151*37da2899SCharles.Forsyth int align; 152*37da2899SCharles.Forsyth FT_Pos align_top; 153*37da2899SCharles.Forsyth FT_Pos align_bot; 154*37da2899SCharles.Forsyth 155*37da2899SCharles.Forsyth } PSH_AlignmentRec, *PSH_Alignment; 156*37da2899SCharles.Forsyth 157*37da2899SCharles.Forsyth 158*37da2899SCharles.Forsyth FT_LOCAL( void ) 159*37da2899SCharles.Forsyth psh_globals_funcs_init( PSH_Globals_FuncsRec* funcs ); 160*37da2899SCharles.Forsyth 161*37da2899SCharles.Forsyth 162*37da2899SCharles.Forsyth /* snap a stem width to fitter coordinates. `org_width' is in font */ 163*37da2899SCharles.Forsyth /* units. The result is in device pixels (26.6 format). */ 164*37da2899SCharles.Forsyth FT_LOCAL( FT_Pos ) 165*37da2899SCharles.Forsyth psh_dimension_snap_width( PSH_Dimension dimension, 166*37da2899SCharles.Forsyth FT_Int org_width ); 167*37da2899SCharles.Forsyth 168*37da2899SCharles.Forsyth /* snap a stem to one or two blue zones */ 169*37da2899SCharles.Forsyth FT_LOCAL( void ) 170*37da2899SCharles.Forsyth psh_blues_snap_stem( PSH_Blues blues, 171*37da2899SCharles.Forsyth FT_Int stem_top, 172*37da2899SCharles.Forsyth FT_Int stem_bot, 173*37da2899SCharles.Forsyth PSH_Alignment alignment ); 174*37da2899SCharles.Forsyth /* */ 175*37da2899SCharles.Forsyth 176*37da2899SCharles.Forsyth #ifdef DEBUG_HINTER 177*37da2899SCharles.Forsyth extern PSH_Globals ps_debug_globals; 178*37da2899SCharles.Forsyth #endif 179*37da2899SCharles.Forsyth 180*37da2899SCharles.Forsyth 181*37da2899SCharles.Forsyth FT_END_HEADER 182*37da2899SCharles.Forsyth 183*37da2899SCharles.Forsyth 184*37da2899SCharles.Forsyth #endif /* __PSHGLOB_H__ */ 185*37da2899SCharles.Forsyth 186*37da2899SCharles.Forsyth 187*37da2899SCharles.Forsyth /* END */ 188