(root)/
freetype-2.13.2/
src/
pshinter/
pshglob.h
       1  /****************************************************************************
       2   *
       3   * pshglob.h
       4   *
       5   *   PostScript hinter global hinting management.
       6   *
       7   * Copyright (C) 2001-2023 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 <freetype/freetype.h>
      24  #include <freetype/internal/pshints.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 */