/***************************************************************************/ /* */ /* svmm.h */ /* */ /* The FreeType Multiple Masters and GX var services (specification). */ /* */ /* Copyright 2003-2018 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ /* this file you indicate that you have read the license and */ /* understand and accept it fully. */ /* */ /***************************************************************************/ #ifndef SVMM_H_ #define SVMM_H_ #include FT_INTERNAL_SERVICE_H FT_BEGIN_HEADER /* * A service used to manage multiple-masters data in a given face. * * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H). * */ #define FT_SERVICE_ID_MULTI_MASTERS "multi-masters" typedef FT_Error (*FT_Get_MM_Func)( FT_Face face, FT_Multi_Master* master ); typedef FT_Error (*FT_Get_MM_Var_Func)( FT_Face face, FT_MM_Var* *master ); typedef FT_Error (*FT_Set_MM_Design_Func)( FT_Face face, FT_UInt num_coords, FT_Long* coords ); /* use return value -1 to indicate that the new coordinates */ /* are equal to the current ones; no changes are thus needed */ typedef FT_Error (*FT_Set_Var_Design_Func)( FT_Face face, FT_UInt num_coords, FT_Fixed* coords ); /* use return value -1 to indicate that the new coordinates */ /* are equal to the current ones; no changes are thus needed */ typedef FT_Error (*FT_Set_MM_Blend_Func)( FT_Face face, FT_UInt num_coords, FT_Long* coords ); typedef FT_Error (*FT_Get_Var_Design_Func)( FT_Face face, FT_UInt num_coords, FT_Fixed* coords ); typedef FT_Error (*FT_Set_Instance_Func)( FT_Face face, FT_UInt instance_index ); typedef FT_Error (*FT_Get_MM_Blend_Func)( FT_Face face, FT_UInt num_coords, FT_Long* coords ); typedef FT_Error (*FT_Get_Var_Blend_Func)( FT_Face face, FT_UInt *num_coords, FT_Fixed* *coords, FT_Fixed* *normalizedcoords, FT_MM_Var* *mm_var ); typedef void (*FT_Done_Blend_Func)( FT_Face ); FT_DEFINE_SERVICE( MultiMasters ) { FT_Get_MM_Func get_mm; FT_Set_MM_Design_Func set_mm_design; FT_Set_MM_Blend_Func set_mm_blend; FT_Get_MM_Blend_Func get_mm_blend; FT_Get_MM_Var_Func get_mm_var; FT_Set_Var_Design_Func set_var_design; FT_Get_Var_Design_Func get_var_design; FT_Set_Instance_Func set_instance; /* for internal use; only needed for code sharing between modules */ FT_Get_Var_Blend_Func get_var_blend; FT_Done_Blend_Func done_blend; }; #ifndef FT_CONFIG_OPTION_PIC #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \ get_mm_, \ set_mm_design_, \ set_mm_blend_, \ get_mm_blend_, \ get_mm_var_, \ set_var_design_, \ get_var_design_, \ set_instance_, \ get_var_blend_, \ done_blend_ ) \ static const FT_Service_MultiMastersRec class_ = \ { \ get_mm_, \ set_mm_design_, \ set_mm_blend_, \ get_mm_blend_, \ get_mm_var_, \ set_var_design_, \ get_var_design_, \ set_instance_, \ get_var_blend_, \ done_blend_ \ }; #else /* FT_CONFIG_OPTION_PIC */ #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \ get_mm_, \ set_mm_design_, \ set_mm_blend_, \ get_mm_blend_, \ get_mm_var_, \ set_var_design_, \ get_var_design_, \ set_instance_, \ get_var_blend_, \ done_blend_ ) \ void \ FT_Init_Class_ ## class_( FT_Service_MultiMastersRec* clazz ) \ { \ clazz->get_mm = get_mm_; \ clazz->set_mm_design = set_mm_design_; \ clazz->set_mm_blend = set_mm_blend_; \ clazz->get_mm_blend = get_mm_blend_; \ clazz->get_mm_var = get_mm_var_; \ clazz->set_var_design = set_var_design_; \ clazz->get_var_design = get_var_design_; \ clazz->set_instance = set_instance_; \ clazz->get_var_blend = get_var_blend_; \ clazz->done_blend = done_blend_; \ } #endif /* FT_CONFIG_OPTION_PIC */ /* */ FT_END_HEADER #endif /* SVMM_H_ */ /* END */