ReactOS  0.4.15-dev-1206-g731eddf
afcjk.h
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* afcjk.h */
4 /* */
5 /* Auto-fitter hinting routines for CJK writing system (specification). */
6 /* */
7 /* Copyright 2006-2018 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 
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  {
67  AF_WidthRec shoot; /* undershoot */
69 
71 
72 
73  typedef struct AF_CJKAxisRec_
74  {
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 */
88 
91 
93 
94 
95  typedef struct AF_CJKMetricsRec_
96  {
100 
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,
116 
117  FT_LOCAL( FT_Error )
118  af_cjk_hints_apply( FT_UInt glyph_index,
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 
137 
138 #endif /* AFCJK_H_ */
139 
140 
141 /* END */
namespace GUID const ADDRINFOEXW * hints
Definition: sock.c:80
int FT_Error
Definition: fttypes.h:300
FT_UInt blue_count
Definition: afcjk.h:86
FT_BEGIN_HEADER typedef signed long FT_Pos
Definition: ftimage.h:58
#define FT_END_HEADER
Definition: ftheader.h:54
FT_Pos delta
Definition: afcjk.h:76
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
Definition: glext.h:11745
struct AF_CJKMetricsRec_ * AF_CJKMetrics
struct AF_CJKBlueRec_ * AF_CJKBlue
AF_WidthRec ref
Definition: afcjk.h:66
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
FT_Pos standard_width
Definition: afcjk.h:81
#define FT_BEGIN_HEADER
Definition: ftheader.h:36
#define FT_LOCAL(x)
Definition: ftconfig.h:387
FT_UInt width_count
Definition: afcjk.h:78
FT_Pos edge_distance_threshold
Definition: afcjk.h:80
FT_Fixed scale
Definition: afcjk.h:75
struct AF_CJKAxisRec_ * AF_CJKAxis
FT_Bool extra_light
Definition: afcjk.h:82
AF_CJKAxisRec axis[AF_DIMENSION_MAX]
Definition: afcjk.h:99
#define AF_CJK_MAX_WIDTHS
Definition: afcjk.h:55
FT_UInt flags
Definition: afcjk.h:68
struct AF_CJKBlueRec_ AF_CJKBlueRec
AF_CJKBlueRec blues[AF_BLUE_STRINGSET_MAX]
Definition: afcjk.h:87
FT_Pos org_delta
Definition: afcjk.h:90
Definition: mesh.c:5329
signed long FT_Fixed
Definition: fttypes.h:288
AF_StyleMetricsRec root
Definition: afcjk.h:97
#define AF_DECLARE_WRITING_SYSTEM_CLASS(writing_system_class)
unsigned int FT_UInt
Definition: fttypes.h:231
FT_BEGIN_HEADER struct AF_WidthRec_ AF_WidthRec
AF_WidthRec shoot
Definition: afcjk.h:67
FT_Bool control_overshoot
Definition: afcjk.h:85
struct AF_CJKMetricsRec_ AF_CJKMetricsRec
struct AF_CJKAxisRec_ AF_CJKAxisRec
FT_Fixed org_scale
Definition: afcjk.h:89
AF_WidthRec widths[AF_CJK_MAX_WIDTHS]
Definition: afcjk.h:79
FT_UInt units_per_em
Definition: afcjk.h:98
GLenum GLuint GLint GLenum face
Definition: glext.h:7025