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