1 /****************************************************************************
   2  *
   3  * ftrender.h
   4  *
   5  *   FreeType renderer modules public interface (specification).
   6  *
   7  * Copyright (C) 1996-2019 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 
  79     FT_Glyph_InitFunc       glyph_init;
  80     FT_Glyph_DoneFunc       glyph_done;
  81     FT_Glyph_CopyFunc       glyph_copy;
  82     FT_Glyph_TransformFunc  glyph_transform;
  83     FT_Glyph_GetBBoxFunc    glyph_bbox;
  84     FT_Glyph_PrepareFunc    glyph_prepare;
  85   };
  86 
  87 
  88   typedef FT_Error
  89   (*FT_Renderer_RenderFunc)( FT_Renderer       renderer,
  90                              FT_GlyphSlot      slot,
  91                              FT_Render_Mode    mode,
  92                              const FT_Vector*  origin );
  93 
  94   typedef FT_Error
  95   (*FT_Renderer_TransformFunc)( FT_Renderer       renderer,
  96                                 FT_GlyphSlot      slot,
  97                                 const FT_Matrix*  matrix,
  98                                 const FT_Vector*  delta );
  99 
 100 
 101   typedef void
 102   (*FT_Renderer_GetCBoxFunc)( FT_Renderer   renderer,
 103                               FT_GlyphSlot  slot,
 104                               FT_BBox*      cbox );
 105 
 106 
 107   typedef FT_Error
 108   (*FT_Renderer_SetModeFunc)( FT_Renderer  renderer,
 109                               FT_ULong     mode_tag,
 110                               FT_Pointer   mode_ptr );
 111 
 112 /* deprecated identifiers */
 113 #define FTRenderer_render  FT_Renderer_RenderFunc
 114 #define FTRenderer_transform  FT_Renderer_TransformFunc
 115 #define FTRenderer_getCBox  FT_Renderer_GetCBoxFunc
 116 #define FTRenderer_setMode  FT_Renderer_SetModeFunc
 117 
 118 
 119   /**************************************************************************
 120    *
 121    * @struct:
 122    *   FT_Renderer_Class
 123    *
 124    * @description:
 125    *   The renderer module class descriptor.
 126    *
 127    * @fields:
 128    *   root ::
 129    *     The root @FT_Module_Class fields.
 130    *
 131    *   glyph_format ::
 132    *     The glyph image format this renderer handles.
 133    *
 134    *   render_glyph ::
 135    *     A method used to render the image that is in a given glyph slot into
 136    *     a bitmap.
 137    *
 138    *   transform_glyph ::
 139    *     A method used to transform the image that is in a given glyph slot.
 140    *
 141    *   get_glyph_cbox ::
 142    *     A method used to access the glyph's cbox.
 143    *
 144    *   set_mode ::
 145    *     A method used to pass additional parameters.
 146    *
 147    *   raster_class ::
 148    *     For @FT_GLYPH_FORMAT_OUTLINE renderers only.  This is a pointer to
 149    *     its raster's class.
 150    */
 151   typedef struct  FT_Renderer_Class_
 152   {
 153     FT_Module_Class            root;
 154 
 155     FT_Glyph_Format            glyph_format;
 156 
 157     FT_Renderer_RenderFunc     render_glyph;
 158     FT_Renderer_TransformFunc  transform_glyph;
 159     FT_Renderer_GetCBoxFunc    get_glyph_cbox;
 160     FT_Renderer_SetModeFunc    set_mode;
 161 
 162     FT_Raster_Funcs*           raster_class;
 163 
 164   } FT_Renderer_Class;
 165 
 166 
 167   /**************************************************************************
 168    *
 169    * @function:
 170    *   FT_Get_Renderer
 171    *
 172    * @description:
 173    *   Retrieve the current renderer for a given glyph format.
 174    *
 175    * @input:
 176    *   library ::
 177    *     A handle to the library object.
 178    *
 179    *   format ::
 180    *     The glyph format.
 181    *
 182    * @return:
 183    *   A renderer handle.  0~if none found.
 184    *
 185    * @note:
 186    *   An error will be returned if a module already exists by that name, or
 187    *   if the module requires a version of FreeType that is too great.
 188    *
 189    *   To add a new renderer, simply use @FT_Add_Module.  To retrieve a
 190    *   renderer by its name, use @FT_Get_Module.
 191    */
 192   FT_EXPORT( FT_Renderer )
 193   FT_Get_Renderer( FT_Library       library,
 194                    FT_Glyph_Format  format );
 195 
 196 
 197   /**************************************************************************
 198    *
 199    * @function:
 200    *   FT_Set_Renderer
 201    *
 202    * @description:
 203    *   Set the current renderer to use, and set additional mode.
 204    *
 205    * @inout:
 206    *   library ::
 207    *     A handle to the library object.
 208    *
 209    * @input:
 210    *   renderer ::
 211    *     A handle to the renderer object.
 212    *
 213    *   num_params ::
 214    *     The number of additional parameters.
 215    *
 216    *   parameters ::
 217    *     Additional parameters.
 218    *
 219    * @return:
 220    *   FreeType error code.  0~means success.
 221    *
 222    * @note:
 223    *   In case of success, the renderer will be used to convert glyph images
 224    *   in the renderer's known format into bitmaps.
 225    *
 226    *   This doesn't change the current renderer for other formats.
 227    *
 228    *   Currently, no FreeType renderer module uses `parameters`; you should
 229    *   thus always pass `NULL` as the value.
 230    */
 231   FT_EXPORT( FT_Error )
 232   FT_Set_Renderer( FT_Library     library,
 233                    FT_Renderer    renderer,
 234                    FT_UInt        num_params,
 235                    FT_Parameter*  parameters );
 236 
 237   /* */
 238 
 239 
 240 FT_END_HEADER
 241 
 242 #endif /* FTRENDER_H_ */
 243 
 244 
 245 /* END */