/**************************************************************************** * * ftrender.h * * FreeType renderer modules public interface (specification). * * Copyright (C) 1996-2022 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 FTRENDER_H_ #define FTRENDER_H_ #include #include FT_BEGIN_HEADER /************************************************************************** * * @section: * module_management * */ /* create a new glyph object */ typedef FT_Error (*FT_Glyph_InitFunc)( FT_Glyph glyph, FT_GlyphSlot slot ); /* destroys a given glyph object */ typedef void (*FT_Glyph_DoneFunc)( FT_Glyph glyph ); typedef void (*FT_Glyph_TransformFunc)( FT_Glyph glyph, const FT_Matrix* matrix, const FT_Vector* delta ); typedef void (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph, FT_BBox* abbox ); typedef FT_Error (*FT_Glyph_CopyFunc)( FT_Glyph source, FT_Glyph target ); typedef FT_Error (*FT_Glyph_PrepareFunc)( FT_Glyph glyph, FT_GlyphSlot slot ); /* deprecated */ #define FT_Glyph_Init_Func FT_Glyph_InitFunc #define FT_Glyph_Done_Func FT_Glyph_DoneFunc #define FT_Glyph_Transform_Func FT_Glyph_TransformFunc #define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc #define FT_Glyph_Copy_Func FT_Glyph_CopyFunc #define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc struct FT_Glyph_Class_ { FT_Long glyph_size; FT_Glyph_Format glyph_format; FT_Glyph_InitFunc glyph_init; FT_Glyph_DoneFunc glyph_done; FT_Glyph_CopyFunc glyph_copy; FT_Glyph_TransformFunc glyph_transform; FT_Glyph_GetBBoxFunc glyph_bbox; FT_Glyph_PrepareFunc glyph_prepare; }; typedef FT_Error (*FT_Renderer_RenderFunc)( FT_Renderer renderer, FT_GlyphSlot slot, FT_Render_Mode mode, const FT_Vector* origin ); typedef FT_Error (*FT_Renderer_TransformFunc)( FT_Renderer renderer, FT_GlyphSlot slot, const FT_Matrix* matrix, const FT_Vector* delta ); typedef void (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer, FT_GlyphSlot slot, FT_BBox* cbox ); typedef FT_Error (*FT_Renderer_SetModeFunc)( FT_Renderer renderer, FT_ULong mode_tag, FT_Pointer mode_ptr ); /* deprecated identifiers */ #define FTRenderer_render FT_Renderer_RenderFunc #define FTRenderer_transform FT_Renderer_TransformFunc #define FTRenderer_getCBox FT_Renderer_GetCBoxFunc #define FTRenderer_setMode FT_Renderer_SetModeFunc /************************************************************************** * * @struct: * FT_Renderer_Class * * @description: * The renderer module class descriptor. * * @fields: * root :: * The root @FT_Module_Class fields. * * glyph_format :: * The glyph image format this renderer handles. * * render_glyph :: * A method used to render the image that is in a given glyph slot into * a bitmap. * * transform_glyph :: * A method used to transform the image that is in a given glyph slot. * * get_glyph_cbox :: * A method used to access the glyph's cbox. * * set_mode :: * A method used to pass additional parameters. * * raster_class :: * For @FT_GLYPH_FORMAT_OUTLINE renderers only. This is a pointer to * its raster's class. */ typedef struct FT_Renderer_Class_ { FT_Module_Class root; FT_Glyph_Format glyph_format; FT_Renderer_RenderFunc render_glyph; FT_Renderer_TransformFunc transform_glyph; FT_Renderer_GetCBoxFunc get_glyph_cbox; FT_Renderer_SetModeFunc set_mode; FT_Raster_Funcs* raster_class; } FT_Renderer_Class; /************************************************************************** * * @function: * FT_Get_Renderer * * @description: * Retrieve the current renderer for a given glyph format. * * @input: * library :: * A handle to the library object. * * format :: * The glyph format. * * @return: * A renderer handle. 0~if none found. * * @note: * An error will be returned if a module already exists by that name, or * if the module requires a version of FreeType that is too great. * * To add a new renderer, simply use @FT_Add_Module. To retrieve a * renderer by its name, use @FT_Get_Module. */ FT_EXPORT( FT_Renderer ) FT_Get_Renderer( FT_Library library, FT_Glyph_Format format ); /************************************************************************** * * @function: * FT_Set_Renderer * * @description: * Set the current renderer to use, and set additional mode. * * @inout: * library :: * A handle to the library object. * * @input: * renderer :: * A handle to the renderer object. * * num_params :: * The number of additional parameters. * * parameters :: * Additional parameters. * * @return: * FreeType error code. 0~means success. * * @note: * In case of success, the renderer will be used to convert glyph images * in the renderer's known format into bitmaps. * * This doesn't change the current renderer for other formats. * * Currently, no FreeType renderer module uses `parameters`; you should * thus always pass `NULL` as the value. */ FT_EXPORT( FT_Error ) FT_Set_Renderer( FT_Library library, FT_Renderer renderer, FT_UInt num_params, FT_Parameter* parameters ); /* */ FT_END_HEADER #endif /* FTRENDER_H_ */ /* END */