| /***************************************************************************/ |
| /* */ |
| /* pshglob.h */ |
| /* */ |
| /* PostScript hinter global hinting management. */ |
| /* */ |
| /* Copyright 2001-2015 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 __PSHGLOB_H__ |
| #define __PSHGLOB_H__ |
| |
| |
| #include FT_FREETYPE_H |
| #include FT_INTERNAL_POSTSCRIPT_HINTS_H |
| |
| |
| FT_BEGIN_HEADER |
| |
| |
| /*************************************************************************/ |
| /*************************************************************************/ |
| /***** *****/ |
| /***** GLOBAL HINTS INTERNALS *****/ |
| /***** *****/ |
| /*************************************************************************/ |
| /*************************************************************************/ |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @constant: */ |
| /* PS_GLOBALS_MAX_BLUE_ZONES */ |
| /* */ |
| /* @description: */ |
| /* The maximum number of blue zones in a font global hints structure. */ |
| /* See @PS_Globals_BluesRec. */ |
| /* */ |
| #define PS_GLOBALS_MAX_BLUE_ZONES 16 |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* @constant: */ |
| /* PS_GLOBALS_MAX_STD_WIDTHS */ |
| /* */ |
| /* @description: */ |
| /* The maximum number of standard and snap widths in either the */ |
| /* horizontal or vertical direction. See @PS_Globals_WidthsRec. */ |
| /* */ |
| #define PS_GLOBALS_MAX_STD_WIDTHS 16 |
| |
| |
| /* standard and snap width */ |
| typedef struct PSH_WidthRec_ |
| { |
| FT_Int org; |
| FT_Pos cur; |
| FT_Pos fit; |
| |
| } PSH_WidthRec, *PSH_Width; |
| |
| |
| /* standard and snap widths table */ |
| typedef struct PSH_WidthsRec_ |
| { |
| FT_UInt count; |
| PSH_WidthRec widths[PS_GLOBALS_MAX_STD_WIDTHS]; |
| |
| } PSH_WidthsRec, *PSH_Widths; |
| |
| |
| typedef struct PSH_DimensionRec_ |
| { |
| PSH_WidthsRec stdw; |
| FT_Fixed scale_mult; |
| FT_Fixed scale_delta; |
| |
| } PSH_DimensionRec, *PSH_Dimension; |
| |
| |
| /* blue zone descriptor */ |
| typedef struct PSH_Blue_ZoneRec_ |
| { |
| FT_Int org_ref; |
| FT_Int org_delta; |
| FT_Int org_top; |
| FT_Int org_bottom; |
| |
| FT_Pos cur_ref; |
| FT_Pos cur_delta; |
| FT_Pos cur_bottom; |
| FT_Pos cur_top; |
| |
| } PSH_Blue_ZoneRec, *PSH_Blue_Zone; |
| |
| |
| typedef struct PSH_Blue_TableRec_ |
| { |
| FT_UInt count; |
| PSH_Blue_ZoneRec zones[PS_GLOBALS_MAX_BLUE_ZONES]; |
| |
| } PSH_Blue_TableRec, *PSH_Blue_Table; |
| |
| |
| /* blue zones table */ |
| typedef struct PSH_BluesRec_ |
| { |
| PSH_Blue_TableRec normal_top; |
| PSH_Blue_TableRec normal_bottom; |
| PSH_Blue_TableRec family_top; |
| PSH_Blue_TableRec family_bottom; |
| |
| FT_Fixed blue_scale; |
| FT_Int blue_shift; |
| FT_Int blue_threshold; |
| FT_Int blue_fuzz; |
| FT_Bool no_overshoots; |
| |
| } PSH_BluesRec, *PSH_Blues; |
| |
| |
| /* font globals. */ |
| /* dimension 0 => X coordinates + vertical hints/stems */ |
| /* dimension 1 => Y coordinates + horizontal hints/stems */ |
| typedef struct PSH_GlobalsRec_ |
| { |
| FT_Memory memory; |
| PSH_DimensionRec dimension[2]; |
| PSH_BluesRec blues; |
| |
| } PSH_GlobalsRec; |
| |
| |
| #define PSH_BLUE_ALIGN_NONE 0 |
| #define PSH_BLUE_ALIGN_TOP 1 |
| #define PSH_BLUE_ALIGN_BOT 2 |
| |
| |
| typedef struct PSH_AlignmentRec_ |
| { |
| int align; |
| FT_Pos align_top; |
| FT_Pos align_bot; |
| |
| } PSH_AlignmentRec, *PSH_Alignment; |
| |
| |
| FT_LOCAL( void ) |
| psh_globals_funcs_init( PSH_Globals_FuncsRec* funcs ); |
| |
| |
| #if 0 |
| /* snap a stem width to fitter coordinates. `org_width' is in font */ |
| /* units. The result is in device pixels (26.6 format). */ |
| FT_LOCAL( FT_Pos ) |
| psh_dimension_snap_width( PSH_Dimension dimension, |
| FT_Int org_width ); |
| #endif |
| |
| FT_LOCAL( void ) |
| psh_globals_set_scale( PSH_Globals globals, |
| FT_Fixed x_scale, |
| FT_Fixed y_scale, |
| FT_Fixed x_delta, |
| FT_Fixed y_delta ); |
| |
| /* snap a stem to one or two blue zones */ |
| FT_LOCAL( void ) |
| psh_blues_snap_stem( PSH_Blues blues, |
| FT_Int stem_top, |
| FT_Int stem_bot, |
| PSH_Alignment alignment ); |
| /* */ |
| |
| #ifdef DEBUG_HINTER |
| extern PSH_Globals ps_debug_globals; |
| #endif |
| |
| |
| FT_END_HEADER |
| |
| |
| #endif /* __PSHGLOB_H__ */ |
| |
| |
| /* END */ |