| 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 | |