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