"Fossies" - the Fresh Open Source Software Archive

Member "SDL2_ttf-2.20.2/external/freetype/src/autofit/afcjk.h" (25 May 2022, 4191 Bytes) of package /linux/misc/SDL2_ttf-2.20.2.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "afcjk.h" see the Fossies "Dox" file reference documentation.

    1 /****************************************************************************
    2  *
    3  * afcjk.h
    4  *
    5  *   Auto-fitter hinting routines for CJK writing system (specification).
    6  *
    7  * Copyright (C) 2006-2022 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 AFCJK_H_
   20 #define AFCJK_H_
   21 
   22 #include "afhints.h"
   23 #include "aflatin.h"
   24 
   25 
   26 FT_BEGIN_HEADER
   27 
   28 
   29   /* the CJK-specific writing system */
   30 
   31   AF_DECLARE_WRITING_SYSTEM_CLASS( af_cjk_writing_system_class )
   32 
   33 
   34   /*************************************************************************/
   35   /*************************************************************************/
   36   /*****                                                               *****/
   37   /*****              C J K   G L O B A L   M E T R I C S              *****/
   38   /*****                                                               *****/
   39   /*************************************************************************/
   40   /*************************************************************************/
   41 
   42 
   43   /*
   44    * CJK glyphs tend to fill the square.  So we have both vertical and
   45    * horizontal blue zones.  But some glyphs have flat bounding strokes that
   46    * leave some space between neighbour glyphs.
   47    */
   48 
   49 #define AF_CJK_IS_TOP_BLUE( b ) \
   50           ( (b)->properties & AF_BLUE_PROPERTY_CJK_TOP )
   51 #define AF_CJK_IS_HORIZ_BLUE( b ) \
   52           ( (b)->properties & AF_BLUE_PROPERTY_CJK_HORIZ )
   53 #define AF_CJK_IS_RIGHT_BLUE  AF_CJK_IS_TOP_BLUE
   54 
   55 #define AF_CJK_MAX_WIDTHS  16
   56 
   57 
   58 #define AF_CJK_BLUE_ACTIVE      ( 1U << 0 ) /* zone height is <= 3/4px      */
   59 #define AF_CJK_BLUE_TOP         ( 1U << 1 ) /* result of AF_CJK_IS_TOP_BLUE */
   60 #define AF_CJK_BLUE_ADJUSTMENT  ( 1U << 2 ) /* used for scale adjustment    */
   61                                             /* optimization                 */
   62 
   63 
   64   typedef struct  AF_CJKBlueRec_
   65   {
   66     AF_WidthRec  ref;
   67     AF_WidthRec  shoot; /* undershoot */
   68     FT_UInt      flags;
   69 
   70   } AF_CJKBlueRec, *AF_CJKBlue;
   71 
   72 
   73   typedef struct  AF_CJKAxisRec_
   74   {
   75     FT_Fixed       scale;
   76     FT_Pos         delta;
   77 
   78     FT_UInt        width_count;                   /* number of used widths */
   79     AF_WidthRec    widths[AF_CJK_MAX_WIDTHS];     /* widths array          */
   80     FT_Pos         edge_distance_threshold;     /* used for creating edges */
   81     FT_Pos         standard_width;           /* the default stem thickness */
   82     FT_Bool        extra_light;           /* is standard width very light? */
   83 
   84     /* used for horizontal metrics too for CJK */
   85     FT_Bool        control_overshoot;
   86     FT_UInt        blue_count;
   87     AF_CJKBlueRec  blues[AF_BLUE_STRINGSET_MAX];
   88 
   89     FT_Fixed       org_scale;
   90     FT_Pos         org_delta;
   91 
   92   } AF_CJKAxisRec, *AF_CJKAxis;
   93 
   94 
   95   typedef struct  AF_CJKMetricsRec_
   96   {
   97     AF_StyleMetricsRec  root;
   98     FT_UInt             units_per_em;
   99     AF_CJKAxisRec       axis[AF_DIMENSION_MAX];
  100 
  101   } AF_CJKMetricsRec, *AF_CJKMetrics;
  102 
  103 
  104 #ifdef AF_CONFIG_OPTION_CJK
  105   FT_LOCAL( FT_Error )
  106   af_cjk_metrics_init( AF_CJKMetrics  metrics,
  107                        FT_Face        face );
  108 
  109   FT_LOCAL( void )
  110   af_cjk_metrics_scale( AF_CJKMetrics  metrics,
  111                         AF_Scaler      scaler );
  112 
  113   FT_LOCAL( FT_Error )
  114   af_cjk_hints_init( AF_GlyphHints  hints,
  115                      AF_CJKMetrics  metrics );
  116 
  117   FT_LOCAL( FT_Error )
  118   af_cjk_hints_apply( FT_UInt        glyph_index,
  119                       AF_GlyphHints  hints,
  120                       FT_Outline*    outline,
  121                       AF_CJKMetrics  metrics );
  122 
  123   /* shared; called from afindic.c */
  124   FT_LOCAL( void )
  125   af_cjk_metrics_check_digits( AF_CJKMetrics  metrics,
  126                                FT_Face        face );
  127 
  128   FT_LOCAL( void )
  129   af_cjk_metrics_init_widths( AF_CJKMetrics  metrics,
  130                               FT_Face        face );
  131 #endif /* AF_CONFIG_OPTION_CJK */
  132 
  133 
  134 /* */
  135 
  136 FT_END_HEADER
  137 
  138 #endif /* AFCJK_H_ */
  139 
  140 
  141 /* END */