8007951b3712301a44217bb3828229794407af7f
[platform/upstream/freetype2.git] / include / freetype / ftrender.h
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 */