Imported Upstream version 2.13.2
[platform/upstream/freetype2.git] / src / sdf / ftsdfrend.h
1 /****************************************************************************
2  *
3  * ftsdfrend.h
4  *
5  *   Signed Distance Field renderer interface (specification).
6  *
7  * Copyright (C) 2020-2023 by
8  * David Turner, Robert Wilhelm, and Werner Lemberg.
9  *
10  * Written by Anuj Verma.
11  *
12  * This file is part of the FreeType project, and may only be used,
13  * modified, and distributed under the terms of the FreeType project
14  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
15  * this file you indicate that you have read the license and
16  * understand and accept it fully.
17  *
18  */
19
20
21 #ifndef FTSDFREND_H_
22 #define FTSDFREND_H_
23
24 #include <freetype/ftrender.h>
25 #include <freetype/ftmodapi.h>
26 #include <freetype/internal/ftobjs.h>
27
28 FT_BEGIN_HEADER
29
30
31   /**************************************************************************
32    *
33    * @struct:
34    *   SDF_Renderer_Module
35    *
36    * @description:
37    *   This struct extends the native renderer struct `FT_RendererRec`.  It
38    *   is basically used to store various parameters required by the
39    *   renderer and some additional parameters that can be used to tweak the
40    *   output of the renderer.
41    *
42    * @fields:
43    *   root ::
44    *     The native rendere struct.
45    *
46    *   spread ::
47    *     This is an essential parameter/property required by the renderer.
48    *     `spread` defines the maximum unsigned value that is present in the
49    *     final SDF output.  For the default value check file
50    *     `ftsdfcommon.h`.
51    *
52    *   flip_sign ::
53    *     By default positive values indicate positions inside of contours,
54    *     i.e., filled by a contour.  If this property is true then that
55    *     output will be the opposite of the default, i.e., negative values
56    *     indicate positions inside of contours.
57    *
58    *   flip_y ::
59    *     Setting this parameter to true makes the output image flipped
60    *     along the y-axis.
61    *
62    *   overlaps ::
63    *     Set this to true to generate SDF for glyphs having overlapping
64    *     contours.  The overlapping support is limited to glyphs that do not
65    *     have self-intersecting contours.  Also, removing overlaps require a
66    *     considerable amount of extra memory; additionally, it will not work
67    *     if generating SDF from bitmap.
68    *
69    * @note:
70    *   All properties except `overlaps` are valid for both the 'sdf' and
71    *   'bsdf' renderers.
72    *
73    */
74   typedef struct  SDF_Renderer_Module_
75   {
76     FT_RendererRec  root;
77     FT_UInt         spread;
78     FT_Bool         flip_sign;
79     FT_Bool         flip_y;
80     FT_Bool         overlaps;
81
82   } SDF_Renderer_Module, *SDF_Renderer;
83
84
85   /**************************************************************************
86    *
87    * @renderer:
88    *   ft_sdf_renderer_class
89    *
90    * @description:
91    *   Renderer to convert @FT_Outline to signed distance fields.
92    *
93    */
94   FT_DECLARE_RENDERER( ft_sdf_renderer_class )
95
96
97   /**************************************************************************
98    *
99    * @renderer:
100    *   ft_bitmap_sdf_renderer_class
101    *
102    * @description:
103    *   This is not exactly a renderer; it is just a converter that
104    *   transforms bitmaps to signed distance fields.
105    *
106    * @note:
107    *   This is not a separate module, it is part of the 'sdf' module.
108    *
109    */
110   FT_DECLARE_RENDERER( ft_bitmap_sdf_renderer_class )
111
112
113 FT_END_HEADER
114
115 #endif /* FTSDFREND_H_ */
116
117
118 /* END */