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