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
28FT_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
113FT_END_HEADER
114
115#endif /* FTSDFREND_H_ */
116
117
118/* END */
119