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