1a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/***************************************************************************/
2a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
3a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  ftttdrv.h                                                              */
4a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
5a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*    FreeType API for controlling the TrueType driver                     */
6a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*    (specification only).                                                */
7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
8a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  Copyright 2013 by                                                      */
9a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
10a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
11a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  This file is part of the FreeType project, and may only be used,       */
12a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  modified, and distributed under the terms of the FreeType project      */
13a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
14a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  this file you indicate that you have read the license and              */
15a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  understand and accept it fully.                                        */
16a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
17a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/***************************************************************************/
18a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
19a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
20a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifndef __FTTTDRV_H__
21a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define __FTTTDRV_H__
22a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
23a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include <ft2build.h>
24a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include FT_FREETYPE_H
25a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
26a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef FREETYPE_H
27a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#error "freetype.h of FreeType 1 has been loaded!"
28a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#error "Please fix the directory search order for header files"
29a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#error "so that freetype.h of FreeType 2 is found first."
30a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif
31a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
32a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
33a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu WangFT_BEGIN_HEADER
34a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
35a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
36a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /**************************************************************************
37a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
38a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @section:
39a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   tt_driver
40a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
41a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @title:
42a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   The TrueType driver
43a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
44a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @abstract:
45a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   Controlling the TrueType driver module.
46a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
47a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @description:
48a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   While FreeType's TrueType driver doesn't expose API functions by
49a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   itself, it is possible to control its behaviour with @FT_Property_Set
50a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   and @FT_Property_Get.  The following lists the available properties
51a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   together with the necessary macros and structures.
52a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
53a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   The TrueType driver's module name is `truetype'.
54a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
55a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   */
56a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
57a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
58a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /**************************************************************************
59a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
60a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @property:
61a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   interpreter-version
62a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
63a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @description:
64a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   Currently, two versions are available which represent the bytecode
65a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   interpreter with and without subpixel hinting support,
66a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   respectively.  The default is subpixel support if
67a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel
68a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   support otherwise (since it isn't available then).
69a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
70a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   If subpixel hinting is on, many TrueType bytecode instructions
71a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   behave differently compared to B/W or grayscale rendering.  The
72a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   main idea is to render at a much increased horizontal resolution,
73a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   then sampling down the created output to subpixel precision.
74a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   However, many older fonts are not suited to this and must be
75a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   specially taken care of by applying (hardcoded) font-specific
76a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   tweaks.
77a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
78a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   Details on subpixel hinting and some of the necessary tweaks can be
79a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   found in Greg Hitchcock's whitepaper at
80a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   `http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
81a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
82a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   The following example code demonstrates how to activate subpixel
83a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   hinting (omitting the error handling).
84a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
85a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   {
86a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Library  library;
87a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Face     face;
88a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_UInt     interpreter_version = TT_INTERPRETER_VERSION_38;
89a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
90a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
91a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Init_FreeType( &library );
92a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
93a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Property_Set( library, "truetype",
94a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *                               "interpreter-version",
95a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *                               &interpreter_version );
96a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   }
97a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
98a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @note:
99a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   This property can be used with @FT_Property_Get also.
100a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
101a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   */
102a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
103a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
104a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /**************************************************************************
105a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
106a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @enum:
107a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   TT_INTERPRETER_VERSION_XXX
108a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
109a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @description:
110a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   A list of constants used for the @interpreter-version property to
111a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   select the hinting engine for Truetype fonts.
112a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
113a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   The numeric value in the constant names represents the version
114a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   number as returned by the `GETINFO' bytecode instruction.
115a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
116a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @values:
117a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   TT_INTERPRETER_VERSION_35 ::
118a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
119a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     Windows~98; only grayscale and B/W rasterizing is supported.
120a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
121a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   TT_INTERPRETER_VERSION_38 ::
122a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     Version~38 corresponds to MS rasterizer v.1.9; it is roughly
123a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     equivalent to the hinting provided by DirectWrite ClearType (as
124a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     can be found, for example, in the Internet Explorer~9 running on
125a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     Windows~7).
126a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
127a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @note:
128a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   This property controls the behaviour of the bytecode interpreter
129a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   and thus how outlines get hinted.  It does *not* control how glyph
130a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   get rasterized!  In particular, it does not control subpixel color
131a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   filtering.
132a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
133a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   If FreeType has not been compiled with configuration option
134a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   FT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 causes an
135a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   `FT_Err_Unimplemented_Feature' error.
136a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
137a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   */
138a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define TT_INTERPRETER_VERSION_35  35
139a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define TT_INTERPRETER_VERSION_38  38
140a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
141a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
142a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */
143a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
144a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu WangFT_END_HEADER
145a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
146a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
147a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* __FTTTDRV_H__ */
148a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
149a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
150a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* END */
151