1 module ft.image;
2 
3 import core.stdc.config : c_long, c_ulong;
4 import ft.types : makeTag;
5 
6 extern(C) nothrow:
7 
8 
9 alias FT_Pos = c_long;
10 
11 
12 struct FT_Vector
13 {
14     FT_Pos  x;
15     FT_Pos  y;
16 }
17 
18 struct FT_BBox
19 {
20     FT_Pos  xMin, yMin;
21     FT_Pos  xMax, yMax;
22 }
23 
24 
25 enum FT_Pixel_Mode
26 {
27     FT_PIXEL_MODE_NONE = 0,
28     FT_PIXEL_MODE_MONO,
29     FT_PIXEL_MODE_GRAY,
30     FT_PIXEL_MODE_GRAY2,
31     FT_PIXEL_MODE_GRAY4,
32     FT_PIXEL_MODE_LCD,
33     FT_PIXEL_MODE_LCD_V,
34     FT_PIXEL_MODE_BGRA,
35 
36     FT_PIXEL_MODE_MAX      /* do not remove */
37 }
38 
39 enum FT_PIXEL_MODE_NONE = FT_Pixel_Mode.FT_PIXEL_MODE_NONE;
40 enum FT_PIXEL_MODE_MONO = FT_Pixel_Mode.FT_PIXEL_MODE_MONO;
41 enum FT_PIXEL_MODE_GRAY = FT_Pixel_Mode.FT_PIXEL_MODE_GRAY;
42 enum FT_PIXEL_MODE_GRAY2 = FT_Pixel_Mode.FT_PIXEL_MODE_GRAY2;
43 enum FT_PIXEL_MODE_GRAY4 = FT_Pixel_Mode.FT_PIXEL_MODE_GRAY4;
44 enum FT_PIXEL_MODE_LCD = FT_Pixel_Mode.FT_PIXEL_MODE_LCD;
45 enum FT_PIXEL_MODE_LCD_V = FT_Pixel_Mode.FT_PIXEL_MODE_LCD_V;
46 enum FT_PIXEL_MODE_BGRA = FT_Pixel_Mode.FT_PIXEL_MODE_BGRA;
47 enum FT_PIXEL_MODE_MAX = FT_Pixel_Mode.FT_PIXEL_MODE_MAX;
48 
49 
50 struct FT_Bitmap
51 {
52     uint    rows;
53     uint    width;
54     int     pitch;
55     ubyte*  buffer;
56     ushort  num_grays;
57     ubyte   pixel_mode;
58     ubyte   palette_mode;
59     void*   palette;
60 }
61 
62 
63 
64 struct FT_Outline
65 {
66     short       n_contours;      /* number of contours in glyph        */
67     short       n_points;        /* number of points in the glyph      */
68 
69     FT_Vector*  points;          /* the outline's points               */
70     char*       tags;            /* the points flags                   */
71     short*      contours;        /* the contour end points             */
72 
73     int         flags;           /* outline masks                      */
74 }
75 
76 enum FT_OUTLINE_CONTOURS_MAX = short.max;
77 enum FT_OUTLINE_POINTS_MAX = short.max;
78 
79 enum FT_OUTLINE_NONE = 0x0;
80 enum FT_OUTLINE_OWNER = 0x1;
81 enum FT_OUTLINE_EVEN_ODD_FILL = 0x2;
82 enum FT_OUTLINE_REVERSE_FILL = 0x4;
83 enum FT_OUTLINE_IGNORE_DROPOUTS = 0x8;
84 enum FT_OUTLINE_SMART_DROPOUTS = 0x10;
85 enum FT_OUTLINE_INCLUDE_STUBS = 0x20;
86 
87 enum FT_OUTLINE_HIGH_PRECISION = 0x100;
88 enum FT_OUTLINE_SINGLE_PASS = 0x200;
89 
90 
91 extern(D)
92 auto FT_CURVE_TAG(T)(T flag)
93 {
94     return flag & 3;
95 }
96 
97 enum FT_CURVE_TAG_ON = 1;
98 enum FT_CURVE_TAG_CONIC = 0;
99 enum FT_CURVE_TAG_CUBIC = 2;
100 
101 enum FT_CURVE_TAG_HAS_SCANMODE = 4;
102 
103 enum FT_CURVE_TAG_TOUCH_X = 8;
104 enum FT_CURVE_TAG_TOUCH_Y = 16;
105 
106 enum FT_CURVE_TAG_TOUCH_BOTH = FT_CURVE_TAG_TOUCH_X | FT_CURVE_TAG_TOUCH_Y;
107 
108 enum FT_Curve_Tag_On = FT_CURVE_TAG_ON;
109 enum FT_Curve_Tag_Conic = FT_CURVE_TAG_CONIC;
110 enum FT_Curve_Tag_Cubic = FT_CURVE_TAG_CUBIC;
111 enum FT_Curve_Tag_Touch_X = FT_CURVE_TAG_TOUCH_X;
112 enum FT_Curve_Tag_Touch_Y = FT_CURVE_TAG_TOUCH_Y;
113 
114 
115 alias FT_Outline_MoveToFunc = int function ( const(FT_Vector)* to,
116                                              void*             user );
117 
118 alias FT_Outline_MoveTo_Func = FT_Outline_MoveToFunc;
119 
120 
121 alias FT_Outline_LineToFunc = int function ( const(FT_Vector)* to,
122                                              void*             user );
123 
124 alias FT_Outline_LineTo_Func = FT_Outline_LineToFunc;
125 
126 
127 alias FT_Outline_ConicToFunc = int function ( const(FT_Vector)*  control,
128                                               const(FT_Vector)*  to,
129                                               void*             user );
130 
131 alias FT_Outline_ConicTo_Func = FT_Outline_ConicToFunc;
132 
133 
134 alias FT_Outline_CubicToFunc = int function ( const(FT_Vector)*  control1,
135                                               const(FT_Vector)*  control2,
136                                               const(FT_Vector)*  to,
137                                               void*             user );
138 
139 alias FT_Outline_CubicTo_Func = FT_Outline_CubicToFunc;
140 
141 
142 struct FT_Outline_Funcs
143 {
144     FT_Outline_MoveToFunc   move_to;
145     FT_Outline_LineToFunc   line_to;
146     FT_Outline_ConicToFunc  conic_to;
147     FT_Outline_CubicToFunc  cubic_to;
148 
149     int                     shift;
150     FT_Pos                  delta;
151 }
152 
153 
154 enum FT_Glyph_Format
155 {
156     FT_GLYPH_FORMAT_NONE = 0,
157 
158     FT_GLYPH_FORMAT_COMPOSITE = makeTag!('c', 'o', 'm', 'p' ),
159     FT_GLYPH_FORMAT_BITMAP = makeTag!('b', 'i', 't', 's' ),
160     FT_GLYPH_FORMAT_OUTLINE = makeTag!('o', 'u', 't', 'l' ),
161     FT_GLYPH_FORMAT_PLOTTER = makeTag!('p', 'l', 'o', 't' )
162 }
163 
164 enum FT_GLYPH_FORMAT_NONE = FT_Glyph_Format.FT_GLYPH_FORMAT_NONE;
165 enum FT_GLYPH_FORMAT_COMPOSITE = FT_Glyph_Format.FT_GLYPH_FORMAT_COMPOSITE;
166 enum FT_GLYPH_FORMAT_BITMAP = FT_Glyph_Format.FT_GLYPH_FORMAT_BITMAP;
167 enum FT_GLYPH_FORMAT_OUTLINE = FT_Glyph_Format.FT_GLYPH_FORMAT_OUTLINE;
168 enum FT_GLYPH_FORMAT_PLOTTER = FT_Glyph_Format.FT_GLYPH_FORMAT_PLOTTER;
169 
170 struct FT_RasterRec;
171 alias FT_Raster = FT_RasterRec*;
172 
173 struct FT_Span
174 {
175     short   x;
176     ushort  len;
177     ubyte   coverage;
178 }
179 
180 
181 alias FT_SpanFunc = void function ( int             y,
182                                     int             count,
183                                     const(FT_Span)* spans,
184                                     void*           user );
185 
186 alias FT_Raster_Span_Func = FT_SpanFunc;
187 
188 
189 alias FT_Raster_BitTest_Func = int function ( int    y,
190                                               int    x,
191                                               void*  user );
192 
193 alias FT_Raster_BitSet_Func = void function ( int    y,
194                                               int    x,
195                                               void*  user );
196 
197 enum FT_RASTER_FLAG_DEFAULT = 0x0;
198 enum FT_RASTER_FLAG_AA = 0x1;
199 enum FT_RASTER_FLAG_DIRECT = 0x2;
200 enum FT_RASTER_FLAG_CLIP = 0x4;
201 
202 struct FT_Raster_Params
203 {
204     const(FT_Bitmap)*       target;
205     const(void)*            source;
206     int                     flags;
207     FT_SpanFunc             gray_spans;
208     FT_SpanFunc             black_spans;  /* unused */
209     FT_Raster_BitTest_Func  bit_test;     /* unused */
210     FT_Raster_BitSet_Func   bit_set;      /* unused */
211     void*                   user;
212     FT_BBox                 clip_box;
213 }
214 
215 
216 alias FT_Raster_NewFunc = int function (void* memory, FT_Raster* raster);
217 
218 alias FT_Raster_New_Func = FT_Raster_NewFunc;
219 
220 alias FT_Raster_DoneFunc = void function (FT_Raster raster);
221 
222 alias FT_Raster_Done_Func = FT_Raster_DoneFunc;
223 
224 alias FT_Raster_ResetFunc = void function ( FT_Raster       raster,
225                                             ubyte*  pool_base,
226                                             c_ulong   pool_size );
227 
228 alias FT_Raster_Reset_Func = FT_Raster_ResetFunc;
229 
230 
231 alias FT_Raster_SetModeFunc = int function ( FT_Raster      raster,
232                                              c_ulong  mode,
233                                              void*          args );
234 
235 alias FT_Raster_Set_Mode_Func = FT_Raster_SetModeFunc;
236 
237 
238 alias FT_Raster_RenderFunc = int function ( FT_Raster                raster,
239                                             const(FT_Raster_Params)* params );
240 
241 alias FT_Raster_Render_Func = FT_Raster_RenderFunc;
242 
243 
244 
245 struct FT_Raster_Funcs
246 {
247     FT_Glyph_Format        glyph_format;
248 
249     FT_Raster_NewFunc      raster_new;
250     FT_Raster_ResetFunc    raster_reset;
251     FT_Raster_SetModeFunc  raster_set_mode;
252     FT_Raster_RenderFunc   raster_render;
253     FT_Raster_DoneFunc     raster_done;
254 }