1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ttdriver.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* TrueType font driver implementation (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* Copyright 1996-2013 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_STREAM_H 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_SFNT_H 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_XFREE86_NAME_H 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_MULTIPLE_MASTERS_H 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_MULTIPLE_MASTERS_H 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_TRUETYPE_ENGINE_H 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_TRUETYPE_GLYF_H 32a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include FT_SERVICE_PROPERTIES_H 33a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#include FT_TRUETYPE_DRIVER_H 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttdriver.h" 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttgload.h" 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttpload.h" 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttgxvar.h" 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "tterrors.h" 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 45295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include "ttpic.h" 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* messages during execution. */ 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_COMPONENT 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT trace_ttdriver 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 57a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* 58a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * PROPERTY SERVICE 59a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang * 60a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang */ 61a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang static FT_Error 62a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang tt_property_set( FT_Module module, /* TT_Driver */ 63a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const char* property_name, 64a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const void* value ) 65a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang { 66a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Error error = FT_Err_Ok; 67a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang TT_Driver driver = (TT_Driver)module; 68a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 69a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 70a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang if ( !ft_strcmp( property_name, "interpreter-version" ) ) 71a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang { 72a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt* interpreter_version = (FT_UInt*)value; 73a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 74a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 75a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifndef TT_CONFIG_OPTION_SUBPIXEL_HINTING 76a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang if ( *interpreter_version != TT_INTERPRETER_VERSION_35 ) 77a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang error = FT_ERR( Unimplemented_Feature ); 78a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang else 79a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif 80a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang driver->interpreter_version = *interpreter_version; 81a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 82a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return error; 83a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang } 84a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 85a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_TRACE0(( "tt_property_set: missing property `%s'\n", 86a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang property_name )); 87a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Missing_Property ); 88a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang } 89a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 90a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 91a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang static FT_Error 92a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang tt_property_get( FT_Module module, /* TT_Driver */ 93a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const char* property_name, 94a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const void* value ) 95a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang { 96a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Error error = FT_Err_Ok; 97a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang TT_Driver driver = (TT_Driver)module; 98a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 99a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt interpreter_version = driver->interpreter_version; 100a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 101a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 102a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang if ( !ft_strcmp( property_name, "interpreter-version" ) ) 103a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang { 104a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_UInt* val = (FT_UInt*)value; 105a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 106a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 107a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang *val = interpreter_version; 108a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 109a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return error; 110a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang } 111a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 112a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_TRACE0(( "tt_property_get: missing property `%s'\n", 113a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang property_name )); 114a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Missing_Property ); 115a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang } 116a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 117a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 118a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_DEFINE_SERVICE_PROPERTIESREC( 119a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang tt_service_properties, 120a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang (FT_Properties_SetFunc)tt_property_set, 121a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang (FT_Properties_GetFunc)tt_property_get ) 122a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 123a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** F A C E S ****/ 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef PAIR_TAG 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PAIR_TAG( left, right ) ( ( (FT_ULong)left << 16 ) | \ 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_ULong)right ) 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* tt_get_kerning */ 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A driver method used to return the kerning vector between two */ 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyphs of the same face. */ 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* face :: A handle to the source face object. */ 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* left_glyph :: The index of the left glyph in the kern pair. */ 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* right_glyph :: The index of the right glyph in the kern pair. */ 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Output> */ 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* kerning :: The kerning vector. This is in font units for */ 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* scalable formats, and in pixels for fixed-sizes */ 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* formats. */ 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FreeType error code. 0 means success. */ 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Note> */ 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Only horizontal layouts (left-to-right & right-to-left) are */ 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* supported by this function. Other layouts, or more sophisticated */ 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* kernings, are out of scope of this method (the basic driver */ 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* interface is meant to be simple). */ 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* They can be implemented by format-specific interfaces. */ 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_kerning( FT_Face ttface, /* TT_Face */ 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt left_glyph, 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt right_glyph, 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Vector* kerning ) 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face face = (TT_Face)ttface; 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt = (SFNT_Service)face->sfnt; 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project kerning->x = 0; 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project kerning->y = 0; 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( sfnt ) 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project kerning->x = sfnt->get_kerning( face, left_glyph, right_glyph ); 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef PAIR_TAG 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_advances( FT_Face ttface, 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt start, 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt count, 2010a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Int32 flags, 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed *advances ) 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt nn; 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face face = (TT_Face) ttface; 2060a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* XXX: TODO: check for sbits */ 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2100a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( flags & FT_LOAD_VERTICAL_LAYOUT ) 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 2120a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project for ( nn = 0; nn < count; nn++ ) 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Short tsb; 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UShort ah; 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2170a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 218c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner TT_Get_VMetrics( face, start + nn, &tsb, &ah ); 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project advances[nn] = ah; 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 2240a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project for ( nn = 0; nn < count; nn++ ) 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Short lsb; 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UShort aw; 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2290a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 230c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner TT_Get_HMetrics( face, start + nn, &lsb, &aw ); 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project advances[nn] = aw; 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 2340a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 235a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_Err_Ok; 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** S I Z E S ****/ 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_select( FT_Size size, 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong strike_index ) 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face ttface = (TT_Face)size->face; 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size ttsize = (TT_Size)size; 259a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Error error = FT_Err_Ok; 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = strike_index; 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_IS_SCALABLE( size->face ) ) 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* use the scaled metrics, even when tt_size_reset fails */ 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Select_Metrics( size->face, strike_index ); 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_reset( ttsize ); 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt = (SFNT_Service) ttface->sfnt; 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Size_Metrics* metrics = &size->metrics; 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = sfnt->load_strike_metrics( ttface, strike_index, metrics ); 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = 0xFFFFFFFFUL; 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ 286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_request( FT_Size size, 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Size_Request req ) 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size ttsize = (TT_Size)size; 293a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Error error = FT_Err_Ok; 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_HAS_FIXED_SIZES( size->face ) ) 299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face ttface = (TT_Face)size->face; 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt = (SFNT_Service) ttface->sfnt; 302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong strike_index; 303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = sfnt->set_sbit_strike( ttface, req, &strike_index ); 306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = 0xFFFFFFFFUL; 309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return tt_size_select( size, strike_index ); 311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ 314049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 315049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Request_Metrics( size->face, req ); 316049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 317049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_IS_SCALABLE( size->face ) ) 318c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner { 319049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = tt_size_reset( ttsize ); 320c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner ttsize->root.metrics = ttsize->metrics; 321c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner } 322049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 323049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 324049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 325049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 326049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 327049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 328049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 329049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 330e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang /* tt_glyph_load */ 331049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 332049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 333049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A driver method used to load a glyph within a given glyph slot. */ 334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* slot :: A handle to the target slot object where the glyph */ 337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* will be loaded. */ 338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* size :: A handle to the source face size at which the glyph */ 340049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* must be scaled, loaded, etc. */ 341049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 342049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyph_index :: The index of the glyph in the font file. */ 343049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 344049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* load_flags :: A flag indicating what to load for this glyph. The */ 3450a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* FT_LOAD_XXX constants can be used to control the */ 346049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyph loading process (e.g., whether the outline */ 347049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* should be scaled, whether to load bitmaps or not, */ 348049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* whether to hint the outline, etc). */ 349049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 350049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 351049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FreeType error code. 0 means success. */ 352049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 353049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 354e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang tt_glyph_load( FT_GlyphSlot ttslot, /* TT_GlyphSlot */ 355e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Size ttsize, /* TT_Size */ 356e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_UInt glyph_index, 357e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Int32 load_flags ) 358049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 359049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_GlyphSlot slot = (TT_GlyphSlot)ttslot; 360049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size size = (TT_Size)ttsize; 361049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Face face = ttslot->face; 362049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 364049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !slot ) 366a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Invalid_Slot_Handle ); 367049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !size ) 369a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Invalid_Size_Handle ); 370049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 371295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !face ) 372a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Invalid_Argument ); 373295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 374295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef FT_CONFIG_OPTION_INCREMENTAL 375295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( glyph_index >= (FT_UInt)face->num_glyphs && 376295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner !face->internal->incremental_interface ) 377295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 378295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( glyph_index >= (FT_UInt)face->num_glyphs ) 379295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 380a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Invalid_Argument ); 381049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 3820a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( load_flags & FT_LOAD_NO_HINTING ) 3830a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 3840a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT */ 385e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang /* are necessary to disable hinting for tricky fonts */ 3860a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3870a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( FT_IS_TRICKY( face ) ) 3880a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags &= ~FT_LOAD_NO_HINTING; 3890a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3900a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( load_flags & FT_LOAD_NO_AUTOHINT ) 3910a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_HINTING; 3920a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 3930a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 394049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( load_flags & ( FT_LOAD_NO_RECURSE | FT_LOAD_NO_SCALE ) ) 395049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 3960a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE; 3970a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3980a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( !FT_IS_TRICKY( face ) ) 3990a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_HINTING; 400049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 401049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 402049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* now load the glyph outline if necessary */ 403049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = TT_Load_Glyph( size, slot, glyph_index, load_flags ); 404049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 405049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* force drop-out mode to 2 - irrelevant now */ 406049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* slot->outline.dropout_mode = 2; */ 407049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 408049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 409049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 410049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 411049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 412049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 413049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 414049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 415049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 416049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 417049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** D R I V E R I N T E R F A C E ****/ 418049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 419049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 420049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 421049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 422049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 423049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 424049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 425a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_DEFINE_SERVICE_MULTIMASTERSREC( 426a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang tt_service_gx_multi_masters, 427049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Get_MM_Func) NULL, 428049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Set_MM_Design_Func) NULL, 429049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, 430049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Get_MM_Var_Func) TT_Get_MM_Var, 431a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang (FT_Set_Var_Design_Func)TT_Set_Var_Design ) 432049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 433049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 434049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static const FT_Service_TrueTypeEngineRec tt_service_truetype_engine = 435049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 436049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_USE_BYTECODE_INTERPRETER 437049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 438049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING 439049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_UNPATENTED 440049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 441049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_PATENTED 442049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 443049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 444049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else /* !TT_USE_BYTECODE_INTERPRETER */ 445049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 446049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_NONE 447049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 448049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_USE_BYTECODE_INTERPRETER */ 449049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 450049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 451a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_DEFINE_SERVICE_TTGLYFREC( 452a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang tt_service_truetype_glyf, 453a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang (TT_Glyf_GetLocationFunc)tt_face_get_location ) 454049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 455049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 456a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_DEFINE_SERVICEDESCREC5( 457a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang tt_services, 458295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE, 459a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_SERVICE_ID_MULTI_MASTERS, &TT_SERVICE_GX_MULTI_MASTERS_GET, 460295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine, 461a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET, 462a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET ) 463295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 464a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_DEFINE_SERVICEDESCREC4( 465a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang tt_services, 466295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE, 467295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine, 468a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET, 469a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET ) 470049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 471049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 472a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 473049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_Module_Interface ) 474049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_interface( FT_Module driver, /* TT_Driver */ 475049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* tt_interface ) 476049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 477e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Library library; 478049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Module_Interface result; 479049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Module sfntd; 480049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt; 481049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 482e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 483a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* TT_SERVICES_GET derefers `library' in PIC mode */ 484e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#ifdef FT_CONFIG_OPTION_PIC 485e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang if ( !driver ) 486e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang return NULL; 487e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang library = driver->library; 488e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang if ( !library ) 489e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang return NULL; 490e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif 491e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 492a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang result = ft_service_list_lookup( TT_SERVICES_GET, tt_interface ); 493049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( result != NULL ) 494049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return result; 495049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 496e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#ifndef FT_CONFIG_OPTION_PIC 497295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !driver ) 498295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return NULL; 499e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang library = driver->library; 500e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang if ( !library ) 501e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang return NULL; 502e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif 503295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 504049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* only return the default interface from the SFNT module */ 505e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang sfntd = FT_Get_Module( library, "sfnt" ); 506049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( sfntd ) 507049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 508049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt = (SFNT_Service)( sfntd->clazz->module_interface ); 509049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( sfnt ) 510049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return sfnt->get_interface( driver, tt_interface ); 511049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 512049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 513049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 514049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 515049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 516049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 517049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The FT_DriverInterface structure is defined in ftdriver.h. */ 518049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 519049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_USE_BYTECODE_INTERPRETER 520a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define TT_HINTER_FLAG FT_MODULE_DRIVER_HAS_HINTER 521295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 522a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define TT_HINTER_FLAG 0 523295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 524295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 525295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 526a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define TT_SIZE_SELECT tt_size_select 527049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 528a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define TT_SIZE_SELECT 0 529049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 530049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 531a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_DEFINE_DRIVER( 532a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang tt_driver_class, 533e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 534e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_MODULE_FONT_DRIVER | 535e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_MODULE_DRIVER_SCALABLE | 536295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner TT_HINTER_FLAG, 537295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 538049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_DriverRec ), 539049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 540049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project "truetype", /* driver name */ 541049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x10000L, /* driver version == 1.0 */ 542049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x20000L, /* driver requires FreeType 2.0 or above */ 543049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 544049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (void*)0, /* driver specific interface */ 545049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 546049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_driver_init, 547049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_driver_done, 548049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_interface, 549049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 550049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_FaceRec ), 551049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_SizeRec ), 552049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( FT_GlyphSlotRec ), 553049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 554049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_init, 555049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_done, 556049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_init, 557049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_done, 558049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_slot_init, 559e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 0, /* FT_Slot_DoneFunc */ 560049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 561e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang tt_glyph_load, 562049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 563049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_kerning, 564e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang 0, /* FT_Face_AttachFunc */ 565049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_advances, 566049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 567049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_request, 568295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner TT_SIZE_SELECT 569295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 570049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 571049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 572049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 573