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 */
246