blob: 164b10c330a2c0b3b64f39f759ecd3d2e7430ea2 [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
cristy7e41fe82010-12-04 23:12:08 +00002 Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization
cristy3ed852e2009-09-05 21:47:34 +00003 dedicated to making software imaging solutions freely available.
4
5 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
7
8 http://www.imagemagick.org/script/license.php
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 MagickCore drawing methods.
17*/
18#ifndef _MAGICKCORE_DRAW_H
19#define _MAGICKCORE_DRAW_H
20
21#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
cristy4c08aed2011-07-01 19:47:50 +000025#include "MagickCore/geometry.h"
26#include "MagickCore/image.h"
27#include "MagickCore/pixel.h"
28#include "MagickCore/type.h"
cristy3ed852e2009-09-05 21:47:34 +000029
30typedef enum
31{
32 UndefinedAlign,
33 LeftAlign,
34 CenterAlign,
35 RightAlign
36} AlignType;
37
38typedef enum
39{
40 UndefinedPathUnits,
41 UserSpace,
42 UserSpaceOnUse,
43 ObjectBoundingBox
44} ClipPathUnits;
45
46typedef enum
47{
48 UndefinedDecoration,
49 NoDecoration,
50 UnderlineDecoration,
51 OverlineDecoration,
52 LineThroughDecoration
53} DecorationType;
54
55typedef enum
56{
cristyc9b12952010-03-28 01:12:28 +000057 UndefinedDirection,
cristybdcb4b72010-04-23 00:15:29 +000058 RightToLeftDirection,
59 LeftToRightDirection
cristyc9b12952010-03-28 01:12:28 +000060} DirectionType;
61
62typedef enum
63{
cristy3ed852e2009-09-05 21:47:34 +000064 UndefinedRule,
65#undef EvenOddRule
66 EvenOddRule,
67 NonZeroRule
68} FillRule;
69
70typedef enum
71{
72 UndefinedGradient,
73 LinearGradient,
74 RadialGradient
75} GradientType;
76
77typedef enum
78{
79 UndefinedCap,
80 ButtCap,
81 RoundCap,
82 SquareCap
83} LineCap;
84
85typedef enum
86{
87 UndefinedJoin,
88 MiterJoin,
89 RoundJoin,
90 BevelJoin
91} LineJoin;
92
93typedef enum
94{
95 UndefinedMethod,
96 PointMethod,
97 ReplaceMethod,
98 FloodfillMethod,
99 FillToBorderMethod,
100 ResetMethod
101} PaintMethod;
102
103typedef enum
104{
105 UndefinedPrimitive,
106 PointPrimitive,
107 LinePrimitive,
108 RectanglePrimitive,
109 RoundRectanglePrimitive,
110 ArcPrimitive,
111 EllipsePrimitive,
112 CirclePrimitive,
113 PolylinePrimitive,
114 PolygonPrimitive,
115 BezierPrimitive,
116 ColorPrimitive,
117 MattePrimitive,
118 TextPrimitive,
119 ImagePrimitive,
120 PathPrimitive
121} PrimitiveType;
122
123typedef enum
124{
125 UndefinedReference,
126 GradientReference
127} ReferenceType;
128
129typedef enum
130{
131 UndefinedSpread,
132 PadSpread,
133 ReflectSpread,
134 RepeatSpread
135} SpreadMethod;
136
137typedef struct _PointInfo
138{
139 double
140 x,
141 y;
142} PointInfo;
143
144typedef struct _StopInfo
145{
cristy4c08aed2011-07-01 19:47:50 +0000146 PixelInfo
cristy3ed852e2009-09-05 21:47:34 +0000147 color;
148
149 MagickRealType
150 offset;
151} StopInfo;
152
153typedef struct _GradientInfo
154{
155 GradientType
156 type;
157
158 RectangleInfo
159 bounding_box;
160
161 SegmentInfo
162 gradient_vector;
163
164 StopInfo
165 *stops;
166
cristybb503372010-05-27 20:51:26 +0000167 size_t
cristy3ed852e2009-09-05 21:47:34 +0000168 number_stops;
169
170 SpreadMethod
171 spread;
172
173 MagickBooleanType
174 debug;
175
cristybb503372010-05-27 20:51:26 +0000176 size_t
cristy3ed852e2009-09-05 21:47:34 +0000177 signature;
178
179 PointInfo
180 center;
181
182 MagickRealType
183 radius;
184} GradientInfo;
185
186typedef struct _ElementReference
187{
188 char
189 *id;
190
191 ReferenceType
192 type;
193
194 GradientInfo
195 gradient;
196
cristybb503372010-05-27 20:51:26 +0000197 size_t
cristy3ed852e2009-09-05 21:47:34 +0000198 signature;
199
200 struct _ElementReference
201 *previous,
202 *next;
203} ElementReference;
204
205typedef struct _DrawInfo
206{
207 char
208 *primitive,
209 *geometry;
210
211 RectangleInfo
212 viewbox;
213
214 AffineMatrix
215 affine;
216
217 GravityType
218 gravity;
219
220 PixelPacket
221 fill,
222 stroke;
223
224 double
225 stroke_width;
226
227 GradientInfo
228 gradient;
229
230 Image
231 *fill_pattern,
cristy3ed852e2009-09-05 21:47:34 +0000232 *stroke_pattern;
233
234 MagickBooleanType
235 stroke_antialias,
236 text_antialias;
237
238 FillRule
239 fill_rule;
240
241 LineCap
242 linecap;
243
244 LineJoin
245 linejoin;
246
cristybb503372010-05-27 20:51:26 +0000247 size_t
cristy3ed852e2009-09-05 21:47:34 +0000248 miterlimit;
249
250 double
251 dash_offset;
252
253 DecorationType
254 decorate;
255
256 CompositeOperator
257 compose;
258
259 char
260 *text;
261
cristybb503372010-05-27 20:51:26 +0000262 size_t
cristy3ed852e2009-09-05 21:47:34 +0000263 face;
264
265 char
266 *font,
267 *metrics,
268 *family;
269
270 StyleType
271 style;
272
273 StretchType
274 stretch;
275
cristybb503372010-05-27 20:51:26 +0000276 size_t
cristy3ed852e2009-09-05 21:47:34 +0000277 weight;
278
279 char
280 *encoding;
281
282 double
283 pointsize;
284
285 char
286 *density;
287
288 AlignType
289 align;
290
291 PixelPacket
292 undercolor,
293 border_color;
294
295 char
296 *server_name;
297
298 double
299 *dash_pattern;
300
301 char
302 *clip_mask;
303
304 SegmentInfo
305 bounds;
306
307 ClipPathUnits
308 clip_units;
309
310 Quantum
cristy4c08aed2011-07-01 19:47:50 +0000311 alpha;
cristy3ed852e2009-09-05 21:47:34 +0000312
313 MagickBooleanType
314 render;
315
316 ElementReference
317 element_reference;
318
319 MagickBooleanType
320 debug;
321
cristybb503372010-05-27 20:51:26 +0000322 size_t
cristy3ed852e2009-09-05 21:47:34 +0000323 signature;
324
325 double
326 kerning,
cristyb32b90a2009-09-07 21:45:48 +0000327 interword_spacing,
cristy6ac8b332010-04-22 02:24:11 +0000328 interline_spacing;
329
330 DirectionType
cristyc9b12952010-03-28 01:12:28 +0000331 direction;
cristy3ed852e2009-09-05 21:47:34 +0000332} DrawInfo;
333
334typedef struct _PrimitiveInfo
335{
336 PointInfo
337 point;
338
cristybb503372010-05-27 20:51:26 +0000339 size_t
cristy3ed852e2009-09-05 21:47:34 +0000340 coordinates;
341
342 PrimitiveType
343 primitive;
344
345 PaintMethod
346 method;
347
348 char
349 *text;
350} PrimitiveInfo;
351
352typedef struct _TypeMetric
353{
354 PointInfo
355 pixels_per_em;
356
357 double
358 ascent,
359 descent,
360 width,
361 height,
362 max_advance,
363 underline_position,
364 underline_thickness;
365
366 SegmentInfo
367 bounds;
368
369 PointInfo
370 origin;
371} TypeMetric;
372
373extern MagickExport DrawInfo
374 *AcquireDrawInfo(void),
375 *CloneDrawInfo(const ImageInfo *,const DrawInfo *),
376 *DestroyDrawInfo(DrawInfo *);
377
378extern MagickExport MagickBooleanType
379 DrawAffineImage(Image *,const Image *,const AffineMatrix *),
cristy018f07f2011-09-04 21:15:19 +0000380 DrawClipPath(Image *,const DrawInfo *,const char *,ExceptionInfo *),
cristy3ed852e2009-09-05 21:47:34 +0000381 DrawGradientImage(Image *,const DrawInfo *),
cristy018f07f2011-09-04 21:15:19 +0000382 DrawImage(Image *,const DrawInfo *,ExceptionInfo *),
383 DrawPatternPath(Image *,const DrawInfo *,const char *,Image **,
384 ExceptionInfo *),
cristy3ed852e2009-09-05 21:47:34 +0000385 DrawPrimitive(Image *,const DrawInfo *,const PrimitiveInfo *);
386
387extern MagickExport void
388 GetAffineMatrix(AffineMatrix *),
389 GetDrawInfo(const ImageInfo *,DrawInfo *);
390
391#if defined(__cplusplus) || defined(c_plusplus)
392}
393#endif
394
395#endif