tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pshglob.h (4860B)


      1 /****************************************************************************
      2 *
      3 * pshglob.h
      4 *
      5 *   PostScript hinter global hinting management.
      6 *
      7 * Copyright (C) 2001-2025 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 */