1a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/***************************************************************************/
2a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
3a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  ftcffdrv.h                                                             */
4a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
5a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*    FreeType API for controlling the CFF driver (specification only).    */
6a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*                                                                         */
7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/*  Copyright 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 __FTCFFDRV_H__
20a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define __FTCFFDRV_H__
21a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
22a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include <ft2build.h>
23a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include FT_FREETYPE_H
24a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
25a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef FREETYPE_H
26a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#error "freetype.h of FreeType 1 has been loaded!"
27a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#error "Please fix the directory search order for header files"
28a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#error "so that freetype.h of FreeType 2 is found first."
29a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif
30a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
31a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
32a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu WangFT_BEGIN_HEADER
33a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
34a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
35a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /**************************************************************************
36a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
37a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @section:
38a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   cff_driver
39a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
40a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @title:
41a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   The CFF driver
42a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
43a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @abstract:
44a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   Controlling the CFF driver module.
45a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
46a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @description:
47a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   While FreeType's CFF driver doesn't expose API functions by itself,
48a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   it is possible to control its behaviour with @FT_Property_Set and
49a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   @FT_Property_Get.  The following lists the available properties
50a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   together with the necessary macros and structures.
51a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
52a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   The CFF driver's module name is `cff'.
53a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
54a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   */
55a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
56a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
57a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /**************************************************************************
58a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
59a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @property:
60a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   hinting-engine
61a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
62a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @description:
63a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   Thanks to Adobe, which contributed a new hinting (and parsing)
64a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   engine, an application can select between `freetype' and `adobe' if
65a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   compiled with CFF_CONFIG_OPTION_OLD_ENGINE.  If this configuration
66a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   macro isn't defined, `hinting-engine' does nothing.
67a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
68a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   The default engine is `freetype' if CFF_CONFIG_OPTION_OLD_ENGINE is
69a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   defined, and `adobe' otherwise.
70a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
71a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   The following example code demonstrates how to select Adobe's hinting
72a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   engine (omitting the error handling).
73a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
74a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   {
75a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Library  library;
76a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Face     face;
77a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_UInt     hinting_engine = FT_CFF_HINTING_ADOBE;
78a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
79a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
80a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Init_FreeType( &library );
81a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
82a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Property_Set( library, "cff",
83a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *                               "hinting-engine", &hinting_engine );
84a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   }
85a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
86a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @note:
87a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   This property can be used with @FT_Property_Get also.
88a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
89a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   */
90a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
91a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
92a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /**************************************************************************
93a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
94a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @enum:
95a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   FT_CFF_HINTING_XXX
96a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
97a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @description:
98a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   A list of constants used for the @hinting-engine property to select
99a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   the hinting engine for CFF fonts.
100a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
101a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @values:
102a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   FT_CFF_HINTING_FREETYPE ::
103a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     Use the old FreeType hinting engine.
104a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
105a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   FT_CFF_HINTING_ADOBE ::
106a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     Use the hinting engine contributed by Adobe.
107a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
108a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   */
109a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define FT_CFF_HINTING_FREETYPE  0
110a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define FT_CFF_HINTING_ADOBE     1
111a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
112a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
113a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang  /**************************************************************************
114a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
115a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @property:
116a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   no-stem-darkening
117a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
118a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @description:
119a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   By default, the Adobe CFF engine darkens stems at smaller sizes,
120a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   regardless of hinting, to enhance contrast.  Setting this property,
121a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   stem darkening gets switched off.
122a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
123a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
124a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
125a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   {
126a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Library  library;
127a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Face     face;
128a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Bool     no_stem_darkening = TRUE;
129a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
130a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
131a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Init_FreeType( &library );
132a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
133a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *     FT_Property_Set( library, "cff",
134a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *                               "no-stem-darkening", &no_stem_darkening );
135a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   }
136a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
137a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   * @note:
138a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *   This property can be used with @FT_Property_Get also.
139a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   *
140a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang   */
141a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
142a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
143a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */
144a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
145a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu WangFT_END_HEADER
146a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
147a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
148a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* __FTCFFDRV_H__ */
149a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
150a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang
151a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* END */
152