1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ftmm.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Multiple Master font support (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 777f63d23f7d380b0ff02c18fd6a154ab9063128aDavid 'Digit' Turner/* Copyright 1996-2001, 2003, 2004, 2009 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_MULTIPLE_MASTERS_H 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_OBJECTS_H 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_MULTIPLE_MASTERS_H 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* messages during execution. */ 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_COMPONENT 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT trace_mm 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_face_get_mm_service( FT_Face face, 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_MultiMasters *aservice ) 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *aservice = NULL; 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !face ) 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return FT_Err_Invalid_Face_Handle; 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_HAS_MULTIPLE_MASTERS( face ) ) 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FACE_LOOKUP_SERVICE( face, 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *aservice, 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project MULTI_MASTERS ); 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 5577f63d23f7d380b0ff02c18fd6a154ab9063128aDavid 'Digit' Turner if ( *aservice ) 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Ok; 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftmm.h */ 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Get_Multi_Master( FT_Face face, 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Multi_Master *amaster ) 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_MultiMasters service; 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = ft_face_get_mm_service( face, &service ); 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( service->get_mm ) 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = service->get_mm( face, amaster ); 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftmm.h */ 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Get_MM_Var( FT_Face face, 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_MM_Var* *amaster ) 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_MultiMasters service; 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = ft_face_get_mm_service( face, &service ); 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( service->get_mm_var ) 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = service->get_mm_var( face, amaster ); 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftmm.h */ 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Set_MM_Design_Coordinates( FT_Face face, 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_coords, 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long* coords ) 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_MultiMasters service; 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = ft_face_get_mm_service( face, &service ); 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( service->set_mm_design ) 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = service->set_mm_design( face, num_coords, coords ); 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftmm.h */ 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Set_Var_Design_Coordinates( FT_Face face, 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_coords, 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed* coords ) 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_MultiMasters service; 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = ft_face_get_mm_service( face, &service ); 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( service->set_var_design ) 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = service->set_var_design( face, num_coords, coords ); 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftmm.h */ 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Set_MM_Blend_Coordinates( FT_Face face, 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_coords, 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed* coords ) 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_MultiMasters service; 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = ft_face_get_mm_service( face, &service ); 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( service->set_mm_blend ) 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = service->set_mm_blend( face, num_coords, coords ); 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftmm.h */ 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This is exactly the same as the previous function. It exists for */ 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* orthogonality. */ 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Set_Var_Blend_Coordinates( FT_Face face, 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_coords, 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Fixed* coords ) 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Service_MultiMasters service; 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = ft_face_get_mm_service( face, &service ); 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( service->set_mm_blend ) 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = service->set_mm_blend( face, num_coords, coords ); 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 203