/**************************************************************************** * * ftdrv.h * * FreeType internal font driver interface (specification). * * Copyright (C) 1996-2023 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 FTDRV_H_ #define FTDRV_H_ #include <freetype/ftmodapi.h> #include "compiler-macros.h" FT_BEGIN_HEADER FT_Face_InitFunc; FT_Face_DoneFunc; FT_Size_InitFunc; FT_Size_DoneFunc; FT_Slot_InitFunc; FT_Slot_DoneFunc; FT_Size_RequestFunc; FT_Size_SelectFunc; FT_Slot_LoadFunc; FT_Face_GetKerningFunc; FT_Face_AttachFunc; FT_Face_GetAdvancesFunc; /************************************************************************** * * @struct: * FT_Driver_ClassRec * * @description: * The font driver class. This structure mostly contains pointers to * driver methods. * * @fields: * root :: * The parent module. * * face_object_size :: * The size of a face object in bytes. * * size_object_size :: * The size of a size object in bytes. * * slot_object_size :: * The size of a glyph object in bytes. * * init_face :: * The format-specific face constructor. * * done_face :: * The format-specific face destructor. * * init_size :: * The format-specific size constructor. * * done_size :: * The format-specific size destructor. * * init_slot :: * The format-specific slot constructor. * * done_slot :: * The format-specific slot destructor. * * * load_glyph :: * A function handle to load a glyph to a slot. This field is * mandatory! * * get_kerning :: * A function handle to return the unscaled kerning for a given pair of * glyphs. Can be set to 0 if the format doesn't support kerning. * * attach_file :: * This function handle is used to read additional data for a face from * another file/stream. For example, this can be used to add data from * AFM or PFM files on a Type 1 face, or a CIDMap on a CID-keyed face. * * get_advances :: * A function handle used to return advance widths of 'count' glyphs * (in font units), starting at 'first'. The 'vertical' flag must be * set to get vertical advance heights. The 'advances' buffer is * caller-allocated. The idea of this function is to be able to * perform device-independent text layout without loading a single * glyph image. * * request_size :: * A handle to a function used to request the new character size. Can * be set to 0 if the scaling done in the base layer suffices. * * select_size :: * A handle to a function used to select a new fixed size. It is used * only if @FT_FACE_FLAG_FIXED_SIZES is set. Can be set to 0 if the * scaling done in the base layer suffices. * * @note: * Most function pointers, with the exception of `load_glyph`, can be set * to 0 to indicate a default behaviour. */ FT_Driver_Class; /************************************************************************** * * @macro: * FT_DECLARE_DRIVER * * @description: * Used to create a forward declaration of an FT_Driver_ClassRec struct * instance. * * @macro: * FT_DEFINE_DRIVER * * @description: * Used to initialize an instance of FT_Driver_ClassRec struct. * * `ftinit.c` (ft_create_default_module_classes) already contains a * mechanism to call these functions for the default modules described in * `ftmodule.h`. * * The struct will be allocated in the global scope (or the scope where * the macro is used). */ #define FT_DECLARE_DRIVER( class_ ) … #define FT_DEFINE_DRIVER( \ class_, \ flags_, \ size_, \ name_, \ version_, \ requires_, \ interface_, \ init_, \ done_, \ get_interface_, \ face_object_size_, \ size_object_size_, \ slot_object_size_, \ init_face_, \ done_face_, \ init_size_, \ done_size_, \ init_slot_, \ done_slot_, \ load_glyph_, \ get_kerning_, \ attach_file_, \ get_advances_, \ request_size_, \ select_size_ ) … FT_END_HEADER #endif /* FTDRV_H_ */ /* END */