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/* */ 741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier/* Copyright 1996-2012 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 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttdriver.h" 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttgload.h" 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttpload.h" 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttgxvar.h" 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "tterrors.h" 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 43295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include "ttpic.h" 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* messages during execution. */ 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_COMPONENT 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT trace_ttdriver 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** F A C E S ****/ 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef PAIR_TAG 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define PAIR_TAG( left, right ) ( ( (FT_ULong)left << 16 ) | \ 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_ULong)right ) 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* tt_get_kerning */ 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A driver method used to return the kerning vector between two */ 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyphs of the same face. */ 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* face :: A handle to the source face object. */ 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* left_glyph :: The index of the left glyph in the kern pair. */ 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* right_glyph :: The index of the right glyph in the kern pair. */ 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Output> */ 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* kerning :: The kerning vector. This is in font units for */ 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* scalable formats, and in pixels for fixed-sizes */ 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* formats. */ 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FreeType error code. 0 means success. */ 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Note> */ 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Only horizontal layouts (left-to-right & right-to-left) are */ 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* supported by this function. Other layouts, or more sophisticated */ 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* kernings, are out of scope of this method (the basic driver */ 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* interface is meant to be simple). */ 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* They can be implemented by format-specific interfaces. */ 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_kerning( FT_Face ttface, /* TT_Face */ 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt left_glyph, 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt right_glyph, 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Vector* kerning ) 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face face = (TT_Face)ttface; 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt = (SFNT_Service)face->sfnt; 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project kerning->x = 0; 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project kerning->y = 0; 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( sfnt ) 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project kerning->x = sfnt->get_kerning( face, left_glyph, right_glyph ); 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef PAIR_TAG 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_advances( FT_Face ttface, 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt start, 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt count, 1320a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Int32 flags, 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed *advances ) 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt nn; 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face face = (TT_Face) ttface; 1370a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* XXX: TODO: check for sbits */ 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 1410a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( flags & FT_LOAD_VERTICAL_LAYOUT ) 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 1430a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project for ( nn = 0; nn < count; nn++ ) 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Short tsb; 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UShort ah; 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 1480a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 149aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner TT_Get_VMetrics( face, start + nn, &tsb, &ah ); 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project advances[nn] = ah; 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 1550a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project for ( nn = 0; nn < count; nn++ ) 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Short lsb; 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UShort aw; 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 1600a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 161aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner TT_Get_HMetrics( face, start + nn, &lsb, &aw ); 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project advances[nn] = aw; 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 1650a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 1660a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project return TT_Err_Ok; 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** S I Z E S ****/ 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_select( FT_Size size, 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong strike_index ) 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face ttface = (TT_Face)size->face; 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size ttsize = (TT_Size)size; 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error = TT_Err_Ok; 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = strike_index; 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_IS_SCALABLE( size->face ) ) 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* use the scaled metrics, even when tt_size_reset fails */ 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Select_Metrics( size->face, strike_index ); 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_reset( ttsize ); 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt = (SFNT_Service) ttface->sfnt; 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Size_Metrics* metrics = &size->metrics; 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = sfnt->load_strike_metrics( ttface, strike_index, metrics ); 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = 0xFFFFFFFFUL; 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_request( FT_Size size, 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Size_Request req ) 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size ttsize = (TT_Size)size; 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error = TT_Err_Ok; 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_HAS_FIXED_SIZES( size->face ) ) 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face ttface = (TT_Face)size->face; 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt = (SFNT_Service) ttface->sfnt; 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong strike_index; 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = sfnt->set_sbit_strike( ttface, req, &strike_index ); 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ttsize->strike_index = 0xFFFFFFFFUL; 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return tt_size_select( size, strike_index ); 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */ 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Request_Metrics( size->face, req ); 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_IS_SCALABLE( size->face ) ) 249aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner { 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = tt_size_reset( ttsize ); 251aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner ttsize->root.metrics = ttsize->metrics; 252aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner } 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 26141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* tt_glyph_load */ 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A driver method used to load a glyph within a given glyph slot. */ 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* slot :: A handle to the target slot object where the glyph */ 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* will be loaded. */ 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* size :: A handle to the source face size at which the glyph */ 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* must be scaled, loaded, etc. */ 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyph_index :: The index of the glyph in the font file. */ 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* load_flags :: A flag indicating what to load for this glyph. The */ 2760a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* FT_LOAD_XXX constants can be used to control the */ 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* glyph loading process (e.g., whether the outline */ 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* should be scaled, whether to load bitmaps or not, */ 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* whether to hint the outline, etc). */ 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FreeType error code. 0 means success. */ 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 28541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier tt_glyph_load( FT_GlyphSlot ttslot, /* TT_GlyphSlot */ 28641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Size ttsize, /* TT_Size */ 28741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_UInt glyph_index, 28841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Int32 load_flags ) 289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_GlyphSlot slot = (TT_GlyphSlot)ttslot; 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size size = (TT_Size)ttsize; 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Face face = ttslot->face; 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !slot ) 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return TT_Err_Invalid_Slot_Handle; 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !size ) 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return TT_Err_Invalid_Size_Handle; 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 302295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !face ) 303295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return TT_Err_Invalid_Argument; 304295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 305295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef FT_CONFIG_OPTION_INCREMENTAL 306295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( glyph_index >= (FT_UInt)face->num_glyphs && 307295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner !face->internal->incremental_interface ) 308295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 309295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( glyph_index >= (FT_UInt)face->num_glyphs ) 310295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return TT_Err_Invalid_Argument; 312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 3130a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( load_flags & FT_LOAD_NO_HINTING ) 3140a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 3150a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* both FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT */ 31641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* are necessary to disable hinting for tricky fonts */ 3170a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3180a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( FT_IS_TRICKY( face ) ) 3190a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags &= ~FT_LOAD_NO_HINTING; 3200a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3210a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( load_flags & FT_LOAD_NO_AUTOHINT ) 3220a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_HINTING; 3230a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 3240a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 325049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( load_flags & ( FT_LOAD_NO_RECURSE | FT_LOAD_NO_SCALE ) ) 326049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 3270a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_BITMAP | FT_LOAD_NO_SCALE; 3280a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3290a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( !FT_IS_TRICKY( face ) ) 3300a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project load_flags |= FT_LOAD_NO_HINTING; 331049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 332049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 333049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* now load the glyph outline if necessary */ 334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = TT_Load_Glyph( size, slot, glyph_index, load_flags ); 335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* force drop-out mode to 2 - irrelevant now */ 337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* slot->outline.dropout_mode = 2; */ 338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 340049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 341049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 342049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 343049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 344049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 345049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 346049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 347049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 348049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** D R I V E R I N T E R F A C E ****/ 349049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 350049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /**** ****/ 351049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 352049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 353049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 354049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 355049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 356295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_DEFINE_SERVICE_MULTIMASTERSREC(tt_service_gx_multi_masters, 357049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Get_MM_Func) NULL, 358049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Set_MM_Design_Func) NULL, 359049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, 360049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Get_MM_Var_Func) TT_Get_MM_Var, 361049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Set_Var_Design_Func)TT_Set_Var_Design 362295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 364049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static const FT_Service_TrueTypeEngineRec tt_service_truetype_engine = 366049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 367049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_USE_BYTECODE_INTERPRETER 368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 369049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING 370049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_UNPATENTED 371049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 372049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_PATENTED 373049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 374049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 375049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else /* !TT_USE_BYTECODE_INTERPRETER */ 376049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 377049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRUETYPE_ENGINE_TYPE_NONE 378049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 379049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_USE_BYTECODE_INTERPRETER */ 380049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 381049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 382295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_DEFINE_SERVICE_TTGLYFREC(tt_service_truetype_glyf, 383049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (TT_Glyf_GetLocationFunc)tt_face_get_location 384295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 385049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 386049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 387295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_DEFINE_SERVICEDESCREC4(tt_services, 388295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE, 389295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_MULTI_MASTERS, &FT_TT_SERVICE_GX_MULTI_MASTERS_GET, 390295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine, 391295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_TT_GLYF, &FT_TT_SERVICE_TRUETYPE_GLYF_GET 392295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 393295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 394295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_DEFINE_SERVICEDESCREC3(tt_services, 395295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE, 396295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine, 397295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_SERVICE_ID_TT_GLYF, &FT_TT_SERVICE_TRUETYPE_GLYF_GET 398295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 399049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 400049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 401049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_Module_Interface ) 402049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_interface( FT_Module driver, /* TT_Driver */ 403049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* tt_interface ) 404049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 40541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Library library; 406049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Module_Interface result; 407049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Module sfntd; 408049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project SFNT_Service sfnt; 409049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 41041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 41141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier /* FT_TT_SERVICES_GET derefers `library' in PIC mode */ 41241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#ifdef FT_CONFIG_OPTION_PIC 41341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !driver ) 41441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return NULL; 41541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library = driver->library; 41641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !library ) 41741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return NULL; 41841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#endif 41941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 420295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner result = ft_service_list_lookup( FT_TT_SERVICES_GET, tt_interface ); 421049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( result != NULL ) 422049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return result; 423049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 42441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#ifndef FT_CONFIG_OPTION_PIC 425295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( !driver ) 426295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return NULL; 42741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library = driver->library; 42841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !library ) 42941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return NULL; 43041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#endif 431295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 432049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* only return the default interface from the SFNT module */ 43341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier sfntd = FT_Get_Module( library, "sfnt" ); 434049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( sfntd ) 435049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 436049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt = (SFNT_Service)( sfntd->clazz->module_interface ); 437049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( sfnt ) 438049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return sfnt->get_interface( driver, tt_interface ); 439049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 440049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 441049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 442049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 443049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 444049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 445049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The FT_DriverInterface structure is defined in ftdriver.h. */ 446049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 447049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_USE_BYTECODE_INTERPRETER 448295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define TT_HINTER_FLAG FT_MODULE_DRIVER_HAS_HINTER 449295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 450295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define TT_HINTER_FLAG 0 451295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 452295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 453295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 454295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define TT_SIZE_SELECT tt_size_select 455049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 456295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define TT_SIZE_SELECT 0 457049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 458049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 45941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_DEFINE_DRIVER( tt_driver_class, 46041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 46141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_MODULE_FONT_DRIVER | 46241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_MODULE_DRIVER_SCALABLE | 463295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner TT_HINTER_FLAG, 464295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 465049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_DriverRec ), 466049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 467049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project "truetype", /* driver name */ 468049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x10000L, /* driver version == 1.0 */ 469049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x20000L, /* driver requires FreeType 2.0 or above */ 470049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 471049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (void*)0, /* driver specific interface */ 472049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 473049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_driver_init, 474049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_driver_done, 475049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_interface, 476049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 477049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_FaceRec ), 478049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( TT_SizeRec ), 479049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sizeof ( FT_GlyphSlotRec ), 480049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 481049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_init, 482049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_done, 483049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_init, 484049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_done, 485049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_slot_init, 48641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 0, /* FT_Slot_DoneFunc */ 487049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 48841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier ft_stub_set_char_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */ 489295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ft_stub_set_pixel_sizes, /* FT_CONFIG_OPTION_OLD_INTERNALS */ 490295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 49141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier tt_glyph_load, 492049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 493049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_kerning, 49441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 0, /* FT_Face_AttachFunc */ 495049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_get_advances, 496049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 497049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_size_request, 498295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner TT_SIZE_SELECT 499295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 500049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 501049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 502049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 503