misc/libfreetype/src/pshinter/pshglob.h
changeset 9372 915436ff64ab
parent 9371 f3840de881bd
child 9373 b769a8e38cbd
equal deleted inserted replaced
9371:f3840de881bd 9372:915436ff64ab
     1 /***************************************************************************/
       
     2 /*                                                                         */
       
     3 /*  pshglob.h                                                              */
       
     4 /*                                                                         */
       
     5 /*    PostScript hinter global hinting management.                         */
       
     6 /*                                                                         */
       
     7 /*  Copyright 2001, 2002, 2003 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( FT_Error )
       
   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 */