1a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/***************************************************************************/ 2a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* */ 3a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* ttsubpix.h */ 4a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* */ 5a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* TrueType Subpixel Hinting. */ 6a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* */ 7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* Copyright 2010-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 __TTSUBPIX_H__ 20a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define __TTSUBPIX_H__ 21a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 22a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include <ft2build.h> 23a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include "ttobjs.h" 24a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include "ttinterp.h" 25a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 26a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 27a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu WangFT_BEGIN_HEADER 28a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 29a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 30a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 31a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 32a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /*************************************************************************/ 33a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */ 34a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* ID flags to identify special functions at FDEF and runtime. */ 35a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */ 36a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */ 37a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_INLINE_DELTA_1 0x0000001 38a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_INLINE_DELTA_2 0x0000002 39a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_DIAGONAL_STROKE 0x0000004 40a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_VACUFORM_ROUND_1 0x0000008 41a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_TTFAUTOHINT_1 0x0000010 42a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_SPACING_1 0x0000020 43a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_SPACING_2 0x0000040 44a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_TYPEMAN_STROKES 0x0000080 45a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_FDEF_TYPEMAN_DIAGENDCTRL 0x0000100 46a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 47a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 48a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /*************************************************************************/ 49a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */ 50a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* Tweak flags that are set for each glyph by the below rules. */ 51a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */ 52a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */ 53a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_ALLOW_X_DMOVE 0x0000001 54a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_ALWAYS_DO_DELTAP 0x0000002 55a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_ALWAYS_SKIP_DELTAP 0x0000004 56a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_COURIER_NEW_2_HACK 0x0000008 57a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_DEEMBOLDEN 0x0000010 58a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_DO_SHPIX 0x0000020 59a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_EMBOLDEN 0x0000040 60a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_MIAP_HACK 0x0000080 61a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_NORMAL_ROUND 0x0000100 62a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_NO_ALIGNRP_AFTER_IUP 0x0000200 63a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_NO_CALL_AFTER_IUP 0x0000400 64a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_NO_DELTAP_AFTER_IUP 0x0000800 65a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_PIXEL_HINTING 0x0001000 66a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_RASTERIZER_35 0x0002000 67a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES 0x0004000 68a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_SKIP_IUP 0x0008000 69a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES 0x0010000 70a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_SKIP_OFFPIXEL_Y_MOVES 0x0020000 71a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_TIMES_NEW_ROMAN_HACK 0x0040000 72a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP 0x0080000 73a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 74a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 75a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_LOCAL( FT_Bool ) 76a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang sph_test_tweak( TT_Face face, 77a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_String* family, 78a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt ppem, 79a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_String* style, 80a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt glyph_index, 81a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const SPH_TweakRule* rule, 82a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt num_rules ); 83a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 84a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_LOCAL( FT_UInt ) 85a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang sph_test_tweak_x_scaling( TT_Face face, 86a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_String* family, 87a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt ppem, 88a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_String* style, 89a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt glyph_index ); 90a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 91a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_LOCAL( void ) 92a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang sph_set_tweaks( TT_Loader loader, 93a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt glyph_index ); 94a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 95a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 96a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* These macros are defined absent a method for setting them */ 97a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_BITMAP_WIDTHS FALSE 98a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_SET_SUBPIXEL TRUE 99a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_SET_GRAYSCALE FALSE 100a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_SET_COMPATIBLE_WIDTHS FALSE 101a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_OPTION_SET_RASTERIZER_VERSION 38 102a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 103a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ 104a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 105a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 106a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu WangFT_END_HEADER 107a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 108a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* __TTSUBPIX_H__ */ 109a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 110a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* END */ 111