1 /**************************************************************************** 2 * 3 * ftrender.h 4 * 5 * FreeType renderer modules public interface (specification). 6 * 7 * Copyright (C) 1996-2020 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 <freetype/ftmodapi.h> 24 #include <freetype/ftglyph.h> 25 26 27 FT_BEGIN_HEADER 28 29 30 /************************************************************************** 31 * 32 * @section: 33 * module_management 34 * 35 */ 36 37 38 /* create a new glyph object */ 39 typedef FT_Error 40 (*FT_Glyph_InitFunc)( FT_Glyph glyph, 41 FT_GlyphSlot slot ); 42 43 /* destroys a given glyph object */ 44 typedef void 45 (*FT_Glyph_DoneFunc)( FT_Glyph glyph ); 46 47 typedef void 48 (*FT_Glyph_TransformFunc)( FT_Glyph glyph, 49 const FT_Matrix* matrix, 50 const FT_Vector* delta ); 51 52 typedef void 53 (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph, 54 FT_BBox* abbox ); 55 56 typedef FT_Error 57 (*FT_Glyph_CopyFunc)( FT_Glyph source, 58 FT_Glyph target ); 59 60 typedef FT_Error 61 (*FT_Glyph_PrepareFunc)( FT_Glyph glyph, 62 FT_GlyphSlot slot ); 63 64 /* deprecated */ 65 #define FT_Glyph_Init_Func FT_Glyph_InitFunc 66 #define FT_Glyph_Done_Func FT_Glyph_DoneFunc 67 #define FT_Glyph_Transform_Func FT_Glyph_TransformFunc 68 #define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc 69 #define FT_Glyph_Copy_Func FT_Glyph_CopyFunc 70 #define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc 71 72 73 struct FT_Glyph_Class_ 74 { 75 FT_Long glyph_size; 76 FT_Glyph_Format glyph_format; 77 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_Render_Mode 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 :: 128 * The root @FT_Module_Class fields. 129 * 130 * glyph_format :: 131 * The glyph image format this renderer handles. 132 * 133 * render_glyph :: 134 * A method used to render the image that is in a given glyph slot into 135 * a bitmap. 136 * 137 * transform_glyph :: 138 * A method used to transform the image that is in a given glyph slot. 139 * 140 * get_glyph_cbox :: 141 * A method used to access the glyph's cbox. 142 * 143 * set_mode :: 144 * A method used to pass additional parameters. 145 * 146 * raster_class :: 147 * For @FT_GLYPH_FORMAT_OUTLINE renderers only. This is a pointer to 148 * its raster's class. 149 */ 150 typedef struct FT_Renderer_Class_ 151 { 152 FT_Module_Class root; 153 154 FT_Glyph_Format glyph_format; 155 156 FT_Renderer_RenderFunc render_glyph; 157 FT_Renderer_TransformFunc transform_glyph; 158 FT_Renderer_GetCBoxFunc get_glyph_cbox; 159 FT_Renderer_SetModeFunc set_mode; 160 161 FT_Raster_Funcs* raster_class; 162 163 } FT_Renderer_Class; 164 165 166 /************************************************************************** 167 * 168 * @function: 169 * FT_Get_Renderer 170 * 171 * @description: 172 * Retrieve the current renderer for a given glyph format. 173 * 174 * @input: 175 * library :: 176 * A handle to the library object. 177 * 178 * format :: 179 * The glyph format. 180 * 181 * @return: 182 * A renderer handle. 0~if none found. 183 * 184 * @note: 185 * An error will be returned if a module already exists by that name, or 186 * if the module requires a version of FreeType that is too great. 187 * 188 * To add a new renderer, simply use @FT_Add_Module. To retrieve a 189 * renderer by its name, use @FT_Get_Module. 190 */ 191 FT_EXPORT( FT_Renderer ) 192 FT_Get_Renderer( FT_Library library, 193 FT_Glyph_Format format ); 194 195 196 /************************************************************************** 197 * 198 * @function: 199 * FT_Set_Renderer 200 * 201 * @description: 202 * Set the current renderer to use, and set additional mode. 203 * 204 * @inout: 205 * library :: 206 * A handle to the library object. 207 * 208 * @input: 209 * renderer :: 210 * A handle to the renderer object. 211 * 212 * num_params :: 213 * The number of additional parameters. 214 * 215 * parameters :: 216 * Additional parameters. 217 * 218 * @return: 219 * FreeType error code. 0~means success. 220 * 221 * @note: 222 * In case of success, the renderer will be used to convert glyph images 223 * in the renderer's known format into bitmaps. 224 * 225 * This doesn't change the current renderer for other formats. 226 * 227 * Currently, no FreeType renderer module uses `parameters`; you should 228 * thus always pass `NULL` as the value. 229 */ 230 FT_EXPORT( FT_Error ) 231 FT_Set_Renderer( FT_Library library, 232 FT_Renderer renderer, 233 FT_UInt num_params, 234 FT_Parameter* parameters ); 235 236 /* */ 237 238 239 FT_END_HEADER 240 241 #endif /* FTRENDER_H_ */ 242 243 244 /* END */ 245