1 /***************************************************************************/ 2 /* */ 3 /* ftrender.h */ 4 /* */ 5 /* FreeType renderer modules public interface (specification). */ 6 /* */ 7 /* Copyright 1996-2001, 2005, 2006 by */ 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9 /* */ 10 /* This file is part of the FreeType project, and may only be used, */ 11 /* modified, and distributed under the terms of the FreeType project */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13 /* this file you indicate that you have read the license and */ 14 /* understand and accept it fully. */ 15 /* */ 16 /***************************************************************************/ 17 18 19 #ifndef __FTRENDER_H__ 20 #define __FTRENDER_H__ 21 22 23 #include <ft2build.h> 24 #include FT_MODULE_H 25 #include FT_GLYPH_H 26 27 28 FT_BEGIN_HEADER 29 30 31 /*************************************************************************/ 32 /* */ 33 /* <Section> */ 34 /* module_management */ 35 /* */ 36 /*************************************************************************/ 37 38 39 /* create a new glyph object */ 40 typedef FT_Error 41 (*FT_Glyph_InitFunc)( FT_Glyph glyph, 42 FT_GlyphSlot slot ); 43 44 /* destroys a given glyph object */ 45 typedef void 46 (*FT_Glyph_DoneFunc)( FT_Glyph glyph ); 47 48 typedef void 49 (*FT_Glyph_TransformFunc)( FT_Glyph glyph, 50 const FT_Matrix* matrix, 51 const FT_Vector* delta ); 52 53 typedef void 54 (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph, 55 FT_BBox* abbox ); 56 57 typedef FT_Error 58 (*FT_Glyph_CopyFunc)( FT_Glyph source, 59 FT_Glyph target ); 60 61 typedef FT_Error 62 (*FT_Glyph_PrepareFunc)( FT_Glyph glyph, 63 FT_GlyphSlot slot ); 64 65 /* deprecated */ 66 #define FT_Glyph_Init_Func FT_Glyph_InitFunc 67 #define FT_Glyph_Done_Func FT_Glyph_DoneFunc 68 #define FT_Glyph_Transform_Func FT_Glyph_TransformFunc 69 #define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc 70 #define FT_Glyph_Copy_Func FT_Glyph_CopyFunc 71 #define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc 72 73 74 struct FT_Glyph_Class_ 75 { 76 FT_Long glyph_size; 77 FT_Glyph_Format glyph_format; 78 FT_Glyph_InitFunc glyph_init; 79 FT_Glyph_DoneFunc glyph_done; 80 FT_Glyph_CopyFunc glyph_copy; 81 FT_Glyph_TransformFunc glyph_transform; 82 FT_Glyph_GetBBoxFunc glyph_bbox; 83 FT_Glyph_PrepareFunc glyph_prepare; 84 }; 85 86 87 typedef FT_Error 88 (*FT_Renderer_RenderFunc)( FT_Renderer renderer, 89 FT_GlyphSlot slot, 90 FT_UInt mode, 91 const FT_Vector* origin ); 92 93 typedef FT_Error 94 (*FT_Renderer_TransformFunc)( FT_Renderer renderer, 95 FT_GlyphSlot slot, 96 const FT_Matrix* matrix, 97 const FT_Vector* delta ); 98 99 100 typedef void 101 (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer, 102 FT_GlyphSlot slot, 103 FT_BBox* cbox ); 104 105 106 typedef FT_Error 107 (*FT_Renderer_SetModeFunc)( FT_Renderer renderer, 108 FT_ULong mode_tag, 109 FT_Pointer mode_ptr ); 110 111 /* deprecated identifiers */ 112 #define FTRenderer_render FT_Renderer_RenderFunc 113 #define FTRenderer_transform FT_Renderer_TransformFunc 114 #define FTRenderer_getCBox FT_Renderer_GetCBoxFunc 115 #define FTRenderer_setMode FT_Renderer_SetModeFunc 116 117 118 /*************************************************************************/ 119 /* */ 120 /* <Struct> */ 121 /* FT_Renderer_Class */ 122 /* */ 123 /* <Description> */ 124 /* The renderer module class descriptor. */ 125 /* */ 126 /* <Fields> */ 127 /* root :: The root @FT_Module_Class fields. */ 128 /* */ 129 /* glyph_format :: The glyph image format this renderer handles. */ 130 /* */ 131 /* render_glyph :: A method used to render the image that is in a */ 132 /* given glyph slot into a bitmap. */ 133 /* */ 134 /* transform_glyph :: A method used to transform the image that is in */ 135 /* a given glyph slot. */ 136 /* */ 137 /* get_glyph_cbox :: A method used to access the glyph's cbox. */ 138 /* */ 139 /* set_mode :: A method used to pass additional parameters. */ 140 /* */ 141 /* raster_class :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */ 142 /* This is a pointer to its raster's class. */ 143 /* */ 144 /* raster :: For @FT_GLYPH_FORMAT_OUTLINE renderers only. */ 145 /* This is a pointer to the corresponding raster */ 146 /* object, if any. */ 147 /* */ 148 typedef struct FT_Renderer_Class_ 149 { 150 FT_Module_Class root; 151 152 FT_Glyph_Format glyph_format; 153 154 FT_Renderer_RenderFunc render_glyph; 155 FT_Renderer_TransformFunc transform_glyph; 156 FT_Renderer_GetCBoxFunc get_glyph_cbox; 157 FT_Renderer_SetModeFunc set_mode; 158 159 FT_Raster_Funcs* raster_class; 160 161 } FT_Renderer_Class; 162 163 164 /*************************************************************************/ 165 /* */ 166 /* <Function> */ 167 /* FT_Get_Renderer */ 168 /* */ 169 /* <Description> */ 170 /* Retrieve the current renderer for a given glyph format. */ 171 /* */ 172 /* <Input> */ 173 /* library :: A handle to the library object. */ 174 /* */ 175 /* format :: The glyph format. */ 176 /* */ 177 /* <Return> */ 178 /* A renderer handle. 0~if none found. */ 179 /* */ 180 /* <Note> */ 181 /* An error will be returned if a module already exists by that name, */ 182 /* or if the module requires a version of FreeType that is too great. */ 183 /* */ 184 /* To add a new renderer, simply use @FT_Add_Module. To retrieve a */ 185 /* renderer by its name, use @FT_Get_Module. */ 186 /* */ 187 FT_EXPORT( FT_Renderer ) 188 FT_Get_Renderer( FT_Library library, 189 FT_Glyph_Format format ); 190 191 192 /*************************************************************************/ 193 /* */ 194 /* <Function> */ 195 /* FT_Set_Renderer */ 196 /* */ 197 /* <Description> */ 198 /* Set the current renderer to use, and set additional mode. */ 199 /* */ 200 /* <InOut> */ 201 /* library :: A handle to the library object. */ 202 /* */ 203 /* <Input> */ 204 /* renderer :: A handle to the renderer object. */ 205 /* */ 206 /* num_params :: The number of additional parameters. */ 207 /* */ 208 /* parameters :: Additional parameters. */ 209 /* */ 210 /* <Return> */ 211 /* FreeType error code. 0~means success. */ 212 /* */ 213 /* <Note> */ 214 /* In case of success, the renderer will be used to convert glyph */ 215 /* images in the renderer's known format into bitmaps. */ 216 /* */ 217 /* This doesn't change the current renderer for other formats. */ 218 /* */ 219 FT_EXPORT( FT_Error ) 220 FT_Set_Renderer( FT_Library library, 221 FT_Renderer renderer, 222 FT_UInt num_params, 223 FT_Parameter* parameters ); 224 225 226 /* */ 227 228 229 FT_END_HEADER 230 231 #endif /* __FTRENDER_H__ */ 232 233 234 /* END */ 235