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/* */ 7727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/* 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 32727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#include FT_SERVICE_PROPERTIES_H 33727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#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 57727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* 58727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * PROPERTY SERVICE 59727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * 60727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease */ 61727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease static FT_Error 62727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_property_set( FT_Module module, /* TT_Driver */ 63727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const char* property_name, 64727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const void* value ) 65727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease { 66727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_Err_Ok; 67727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease TT_Driver driver = (TT_Driver)module; 68727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 69727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 70727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease if ( !ft_strcmp( property_name, "interpreter-version" ) ) 71727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease { 72727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_UInt* interpreter_version = (FT_UInt*)value; 73727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 74727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 75727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#ifndef TT_CONFIG_OPTION_SUBPIXEL_HINTING 76727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease if ( *interpreter_version != TT_INTERPRETER_VERSION_35 ) 77727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease error = FT_ERR( Unimplemented_Feature ); 78727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease else 79727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#endif 80727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease driver->interpreter_version = *interpreter_version; 81727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 82727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return error; 83727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease } 84727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 85727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_TRACE0(( "tt_property_set: missing property `%s'\n", 86727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease property_name )); 87727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_THROW( Missing_Property ); 88727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease } 89727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 90727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 91727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease static FT_Error 92727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_property_get( FT_Module module, /* TT_Driver */ 93727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const char* property_name, 94727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease const void* value ) 95727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease { 96727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_Err_Ok; 97727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease TT_Driver driver = (TT_Driver)module; 98727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 99727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_UInt interpreter_version = driver->interpreter_version; 100727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 101727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 102727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease if ( !ft_strcmp( property_name, "interpreter-version" ) ) 103727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease { 104727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_UInt* val = (FT_UInt*)value; 105727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 106727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 107727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease *val = interpreter_version; 108727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 109727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return error; 110727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease } 111727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 112727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_TRACE0(( "tt_property_get: missing property `%s'\n", 113727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease property_name )); 114727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_THROW( Missing_Property ); 115727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease } 116727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 117727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 118727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICE_PROPERTIESREC( 119727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_service_properties, 120727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_Properties_SetFunc)tt_property_set, 121727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_Properties_GetFunc)tt_property_get ) 122727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 123727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 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 218ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* since we don't need `tsb', we use zero for `yMax' parameter */ 219ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease TT_Get_VMetrics( face, start + nn, 0, &tsb, &ah ); 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project advances[nn] = ah; 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 2250a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project for ( nn = 0; nn < count; nn++ ) 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Short lsb; 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UShort aw; 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2300a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 231aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner TT_Get_HMetrics( face, start + nn, &lsb, &aw ); 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project advances[nn] = aw; 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 2350a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 236727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_Err_Ok; 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 /**** ****/ 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** S I Z E S ****/ 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 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_select( FT_Size size, 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong strike_index ) 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face ttface = (TT_Face)size->face; 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size ttsize = (TT_Size)size; 260727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_Err_Ok; 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = strike_index; 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_IS_SCALABLE( size->face ) ) 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* use the scaled metrics, even when tt_size_reset fails */ 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Select_Metrics( size->face, strike_index ); 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_reset( ttsize ); 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt = (SFNT_Service) ttface->sfnt; 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Size_Metrics* metrics = &size->metrics; 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = sfnt->load_strike_metrics( ttface, strike_index, metrics ); 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = 0xFFFFFFFFUL; 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ 287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_request( FT_Size size, 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Size_Request req ) 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size ttsize = (TT_Size)size; 294727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_Err_Ok; 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_HAS_FIXED_SIZES( size->face ) ) 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face ttface = (TT_Face)size->face; 302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt = (SFNT_Service) ttface->sfnt; 303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong strike_index; 304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = sfnt->set_sbit_strike( ttface, req, &strike_index ); 307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = 0xFFFFFFFFUL; 310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return tt_size_select( size, strike_index ); 312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 314049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ 315049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 316049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Request_Metrics( size->face, req ); 317049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 318049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_IS_SCALABLE( size->face ) ) 319aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner { 320049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = tt_size_reset( ttsize ); 321aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner ttsize->root.metrics = ttsize->metrics; 322aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner } 323049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 324049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 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 /* */ 330049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 33141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* tt_glyph_load */ 332049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 333049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A driver method used to load a glyph within a given glyph slot. */ 335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* slot :: A handle to the target slot object where the glyph */ 338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* will be loaded. */ 339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 340049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* size :: A handle to the source face size at which the glyph */ 341049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* must be scaled, loaded, etc. */ 342049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 343049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyph_index :: The index of the glyph in the font file. */ 344049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 345049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* load_flags :: A flag indicating what to load for this glyph. The */ 3460a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* FT_LOAD_XXX constants can be used to control the */ 347049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyph loading process (e.g., whether the outline */ 348049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* should be scaled, whether to load bitmaps or not, */ 349049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* whether to hint the outline, etc). */ 350049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 351049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 352049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FreeType error code. 0 means success. */ 353049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 354049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 35541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier tt_glyph_load( FT_GlyphSlot ttslot, /* TT_GlyphSlot */ 35641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Size ttsize, /* TT_Size */ 35741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_UInt glyph_index, 35841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Int32 load_flags ) 359049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 360049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_GlyphSlot slot = (TT_GlyphSlot)ttslot; 361049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size size = (TT_Size)ttsize; 362049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Face face = ttslot->face; 363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 364049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 366049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !slot ) 367727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_THROW( Invalid_Slot_Handle ); 368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 369049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !size ) 370727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_THROW( Invalid_Size_Handle ); 371049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 372295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !face ) 373727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_THROW( Invalid_Argument ); 374295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 375295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef FT_CONFIG_OPTION_INCREMENTAL 376295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( glyph_index >= (FT_UInt)face->num_glyphs && 377295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner !face->internal->incremental_interface ) 378295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 379295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( glyph_index >= (FT_UInt)face->num_glyphs ) 380295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 381727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_THROW( Invalid_Argument ); 382049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 3830a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( load_flags & FT_LOAD_NO_HINTING ) 3840a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 3850a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT */ 38641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* are necessary to disable hinting for tricky fonts */ 3870a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3880a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( FT_IS_TRICKY( face ) ) 3890a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags &= ~FT_LOAD_NO_HINTING; 3900a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3910a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( load_flags & FT_LOAD_NO_AUTOHINT ) 3920a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_HINTING; 3930a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 3940a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 395049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( load_flags & ( FT_LOAD_NO_RECURSE | FT_LOAD_NO_SCALE ) ) 396049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 3970a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE; 3980a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3990a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( !FT_IS_TRICKY( face ) ) 4000a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_HINTING; 401049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 402049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 403049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* now load the glyph outline if necessary */ 404049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = TT_Load_Glyph( size, slot, glyph_index, load_flags ); 405049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 406049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* force drop-out mode to 2 - irrelevant now */ 407049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* slot->outline.dropout_mode = 2; */ 408049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 409049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 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 /**** ****/ 418049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** D R I V E R I N T E R F A C E ****/ 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 425049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 426727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICE_MULTIMASTERSREC( 427727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_service_gx_multi_masters, 428049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Get_MM_Func) NULL, 429049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Set_MM_Design_Func) NULL, 430049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, 431049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Get_MM_Var_Func) TT_Get_MM_Var, 432727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_Set_Var_Design_Func)TT_Set_Var_Design ) 433049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 434049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 435049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static const FT_Service_TrueTypeEngineRec tt_service_truetype_engine = 436049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 437049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_USE_BYTECODE_INTERPRETER 438049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 439049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING 440049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_UNPATENTED 441049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 442049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_PATENTED 443049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 444049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 445049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else /* !TT_USE_BYTECODE_INTERPRETER */ 446049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 447049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_NONE 448049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 449049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_USE_BYTECODE_INTERPRETER */ 450049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 451049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 452727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICE_TTGLYFREC( 453727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_service_truetype_glyf, 454727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (TT_Glyf_GetLocationFunc)tt_face_get_location ) 455049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 456049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 457727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICEDESCREC5( 458727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_services, 459295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE, 460727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_MULTI_MASTERS, &TT_SERVICE_GX_MULTI_MASTERS_GET, 461295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine, 462727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET, 463727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET ) 464295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 465727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICEDESCREC4( 466727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_services, 467295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE, 468295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine, 469727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET, 470727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET ) 471049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 472049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 473727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 474049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_Module_Interface ) 475049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_interface( FT_Module driver, /* TT_Driver */ 476049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* tt_interface ) 477049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 47841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Library library; 479049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Module_Interface result; 480049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Module sfntd; 481049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt; 482049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 48341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 484727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* TT_SERVICES_GET derefers `library' in PIC mode */ 48541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#ifdef FT_CONFIG_OPTION_PIC 48641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !driver ) 48741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return NULL; 48841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library = driver->library; 48941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !library ) 49041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return NULL; 49141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#endif 49241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 493727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease result = ft_service_list_lookup( TT_SERVICES_GET, tt_interface ); 494049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( result != NULL ) 495049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return result; 496049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 49741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#ifndef FT_CONFIG_OPTION_PIC 498295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !driver ) 499295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return NULL; 50041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library = driver->library; 50141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !library ) 50241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return NULL; 50341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#endif 504295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 505049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* only return the default interface from the SFNT module */ 50641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier sfntd = FT_Get_Module( library, "sfnt" ); 507049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( sfntd ) 508049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 509049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt = (SFNT_Service)( sfntd->clazz->module_interface ); 510049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( sfnt ) 511049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return sfnt->get_interface( driver, tt_interface ); 512049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 513049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 514049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 515049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 516049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 517049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 518049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The FT_DriverInterface structure is defined in ftdriver.h. */ 519049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 520049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_USE_BYTECODE_INTERPRETER 521727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define TT_HINTER_FLAG FT_MODULE_DRIVER_HAS_HINTER 522295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 523727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define TT_HINTER_FLAG 0 524295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 525295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 526295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 527727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define TT_SIZE_SELECT tt_size_select 528049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 529727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define TT_SIZE_SELECT 0 530049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 531049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 532727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_DRIVER( 533727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_driver_class, 53441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 53541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_MODULE_FONT_DRIVER | 53641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_MODULE_DRIVER_SCALABLE | 537295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner TT_HINTER_FLAG, 538295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 539049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_DriverRec ), 540049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 541049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project "truetype", /* driver name */ 542049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x10000L, /* driver version == 1.0 */ 543049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x20000L, /* driver requires FreeType 2.0 or above */ 544049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 545049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (void*)0, /* driver specific interface */ 546049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 547049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_driver_init, 548049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_driver_done, 549049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_interface, 550049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 551049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_FaceRec ), 552049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_SizeRec ), 553049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( FT_GlyphSlotRec ), 554049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 555049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_init, 556049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_done, 557049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_init, 558049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_done, 559049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_slot_init, 56041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 0, /* FT_Slot_DoneFunc */ 561049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 56241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier tt_glyph_load, 563049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 564049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_kerning, 56541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 0, /* FT_Face_AttachFunc */ 566049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_advances, 567049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 568049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_request, 569295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner TT_SIZE_SELECT 570295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 571049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 572049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 573049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 574