1a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/***************************************************************************/
2a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
3a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  ttsubpix.h                                                             */
4a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
5a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*    TrueType Subpixel Hinting.                                           */
6a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  Copyright 2010-2013 by                                                 */
8a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
10a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  This file is part of the FreeType project, and may only be used,       */
11a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  modified, and distributed under the terms of the FreeType project      */
12a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  this file you indicate that you have read the license and              */
14a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  understand and accept it fully.                                        */
15a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
16a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/***************************************************************************/
17a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
18a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
19a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifndef __TTSUBPIX_H__
20a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define __TTSUBPIX_H__
21a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
22a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include <ft2build.h>
23a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include "ttobjs.h"
24a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include "ttinterp.h"
25a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
26a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
27a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu WangFT_BEGIN_HEADER
28a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
29a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
30a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
31a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
32a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /*************************************************************************/
33a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /*                                                                       */
34a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /* ID flags to identify special functions at FDEF and runtime.           */
35a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /*                                                                       */
36a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /*                                                                       */
37a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_INLINE_DELTA_1       0x0000001
38a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_INLINE_DELTA_2       0x0000002
39a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_DIAGONAL_STROKE      0x0000004
40a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_VACUFORM_ROUND_1     0x0000008
41a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_TTFAUTOHINT_1        0x0000010
42a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_SPACING_1            0x0000020
43a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_SPACING_2            0x0000040
44a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_TYPEMAN_STROKES      0x0000080
45a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_TYPEMAN_DIAGENDCTRL  0x0000100
46a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
47a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
48a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /*************************************************************************/
49a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /*                                                                       */
50a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /* Tweak flags that are set for each glyph by the below rules.           */
51a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /*                                                                       */
52a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /*                                                                       */
53a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_ALLOW_X_DMOVE                   0x0000001
54a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_ALWAYS_DO_DELTAP                0x0000002
55a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_ALWAYS_SKIP_DELTAP              0x0000004
56a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_COURIER_NEW_2_HACK              0x0000008
57a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_DEEMBOLDEN                      0x0000010
58a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_DO_SHPIX                        0x0000020
59a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_EMBOLDEN                        0x0000040
60a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_MIAP_HACK                       0x0000080
61a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_NORMAL_ROUND                    0x0000100
62a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_NO_ALIGNRP_AFTER_IUP            0x0000200
63a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_NO_CALL_AFTER_IUP               0x0000400
64a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_NO_DELTAP_AFTER_IUP             0x0000800
65a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_PIXEL_HINTING                   0x0001000
66a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_RASTERIZER_35                   0x0002000
67a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES          0x0004000
68a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_SKIP_IUP                        0x0008000
69a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES           0x0010000
70a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_SKIP_OFFPIXEL_Y_MOVES           0x0020000
71a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_TIMES_NEW_ROMAN_HACK            0x0040000
72a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP    0x0080000
73a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
74a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
75a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  FT_LOCAL( FT_Bool )
76a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  sph_test_tweak( TT_Face               face,
77a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                  const FT_String*      family,
78a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                  FT_UInt               ppem,
79a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                  const FT_String*      style,
80a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                  FT_UInt               glyph_index,
81a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                  const SPH_TweakRule*  rule,
82a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                  FT_UInt               num_rules );
83a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
84a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  FT_LOCAL( FT_UInt )
85a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  sph_test_tweak_x_scaling( TT_Face           face,
86a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                            const FT_String*  family,
87a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                            FT_UInt           ppem,
88a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                            const FT_String*  style,
89a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                            FT_UInt           glyph_index );
90a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
91a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  FT_LOCAL( void )
92a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  sph_set_tweaks( TT_Loader  loader,
93a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang                  FT_UInt    glyph_index );
94a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
95a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
96a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /* These macros are defined absent a method for setting them */
97a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_BITMAP_WIDTHS           FALSE
98a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_SET_SUBPIXEL            TRUE
99a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_SET_GRAYSCALE           FALSE
100a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_SET_COMPATIBLE_WIDTHS   FALSE
101a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_SET_RASTERIZER_VERSION  38
102a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
103a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
104a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
105a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
106a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu WangFT_END_HEADER
107a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
108a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* __TTSUBPIX_H__ */
109a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
110a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* END */
111