blob: b286df5d7282734d775a84b3e1f0c90583859bfb [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
cristy1454be72011-12-19 01:52:48 +00002 Copyright 1999-2012 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
cristy3ed852e2009-09-05 21:47:34 +0000137typedef struct _StopInfo
138{
cristy4c08aed2011-07-01 19:47:50 +0000139 PixelInfo
cristy3ed852e2009-09-05 21:47:34 +0000140 color;
141
142 MagickRealType
143 offset;
144} StopInfo;
145
146typedef struct _GradientInfo
147{
148 GradientType
149 type;
150
151 RectangleInfo
152 bounding_box;
153
154 SegmentInfo
155 gradient_vector;
156
157 StopInfo
158 *stops;
159
cristybb503372010-05-27 20:51:26 +0000160 size_t
cristy3ed852e2009-09-05 21:47:34 +0000161 number_stops;
162
163 SpreadMethod
164 spread;
165
166 MagickBooleanType
167 debug;
168
cristybb503372010-05-27 20:51:26 +0000169 size_t
cristy3ed852e2009-09-05 21:47:34 +0000170 signature;
171
172 PointInfo
173 center;
174
175 MagickRealType
176 radius;
177} GradientInfo;
178
179typedef struct _ElementReference
180{
181 char
182 *id;
183
184 ReferenceType
185 type;
186
187 GradientInfo
188 gradient;
189
cristybb503372010-05-27 20:51:26 +0000190 size_t
cristy3ed852e2009-09-05 21:47:34 +0000191 signature;
192
193 struct _ElementReference
194 *previous,
195 *next;
196} ElementReference;
197
198typedef struct _DrawInfo
199{
200 char
201 *primitive,
202 *geometry;
203
204 RectangleInfo
205 viewbox;
206
207 AffineMatrix
208 affine;
209
cristy101ab702011-10-13 13:06:32 +0000210 PixelInfo
cristy3ed852e2009-09-05 21:47:34 +0000211 fill,
anthonyfd706f92012-01-19 04:22:02 +0000212 stroke,
213 undercolor,
214 border_color;
215
216 Image
217 *fill_pattern,
218 *stroke_pattern;
cristy3ed852e2009-09-05 21:47:34 +0000219
220 double
221 stroke_width;
222
223 GradientInfo
224 gradient;
225
cristy3ed852e2009-09-05 21:47:34 +0000226 MagickBooleanType
227 stroke_antialias,
228 text_antialias;
229
230 FillRule
231 fill_rule;
232
233 LineCap
234 linecap;
235
236 LineJoin
237 linejoin;
238
cristybb503372010-05-27 20:51:26 +0000239 size_t
cristy3ed852e2009-09-05 21:47:34 +0000240 miterlimit;
241
242 double
243 dash_offset;
244
245 DecorationType
246 decorate;
247
248 CompositeOperator
249 compose;
250
251 char
anthonyfd706f92012-01-19 04:22:02 +0000252 *text,
cristy3ed852e2009-09-05 21:47:34 +0000253 *font,
254 *metrics,
255 *family;
256
anthonyfd706f92012-01-19 04:22:02 +0000257 size_t
258 face;
259
cristy3ed852e2009-09-05 21:47:34 +0000260 StyleType
261 style;
262
263 StretchType
264 stretch;
265
cristybb503372010-05-27 20:51:26 +0000266 size_t
cristy3ed852e2009-09-05 21:47:34 +0000267 weight;
268
269 char
270 *encoding;
271
272 double
273 pointsize;
274
275 char
276 *density;
277
278 AlignType
279 align;
280
anthonyfd706f92012-01-19 04:22:02 +0000281 GravityType
282 gravity;
cristy3ed852e2009-09-05 21:47:34 +0000283
284 char
285 *server_name;
286
287 double
288 *dash_pattern;
289
290 char
291 *clip_mask;
292
293 SegmentInfo
294 bounds;
295
296 ClipPathUnits
297 clip_units;
298
299 Quantum
cristy4c08aed2011-07-01 19:47:50 +0000300 alpha;
cristy3ed852e2009-09-05 21:47:34 +0000301
302 MagickBooleanType
303 render;
304
305 ElementReference
306 element_reference;
307
cristy3ed852e2009-09-05 21:47:34 +0000308 double
309 kerning,
cristyb32b90a2009-09-07 21:45:48 +0000310 interword_spacing,
cristy6ac8b332010-04-22 02:24:11 +0000311 interline_spacing;
312
313 DirectionType
cristyc9b12952010-03-28 01:12:28 +0000314 direction;
cristyc0c324c2011-10-29 23:14:03 +0000315
316 MagickBooleanType
cristyc0c324c2011-10-29 23:14:03 +0000317 debug;
318
319 size_t
320 signature;
cristy3ed852e2009-09-05 21:47:34 +0000321} DrawInfo;
322
anthonyfd706f92012-01-19 04:22:02 +0000323
cristy3ed852e2009-09-05 21:47:34 +0000324typedef struct _PrimitiveInfo
325{
326 PointInfo
327 point;
328
cristybb503372010-05-27 20:51:26 +0000329 size_t
cristy3ed852e2009-09-05 21:47:34 +0000330 coordinates;
331
332 PrimitiveType
333 primitive;
334
335 PaintMethod
336 method;
337
338 char
339 *text;
340} PrimitiveInfo;
341
342typedef struct _TypeMetric
343{
344 PointInfo
345 pixels_per_em;
346
347 double
348 ascent,
349 descent,
350 width,
351 height,
352 max_advance,
353 underline_position,
354 underline_thickness;
355
356 SegmentInfo
357 bounds;
358
359 PointInfo
360 origin;
361} TypeMetric;
362
363extern MagickExport DrawInfo
364 *AcquireDrawInfo(void),
365 *CloneDrawInfo(const ImageInfo *,const DrawInfo *),
366 *DestroyDrawInfo(DrawInfo *);
367
368extern MagickExport MagickBooleanType
cristy947cb4c2011-10-20 18:41:46 +0000369 DrawAffineImage(Image *,const Image *,const AffineMatrix *,ExceptionInfo *),
cristy018f07f2011-09-04 21:15:19 +0000370 DrawClipPath(Image *,const DrawInfo *,const char *,ExceptionInfo *),
cristy947cb4c2011-10-20 18:41:46 +0000371 DrawGradientImage(Image *,const DrawInfo *,ExceptionInfo *),
cristy018f07f2011-09-04 21:15:19 +0000372 DrawImage(Image *,const DrawInfo *,ExceptionInfo *),
373 DrawPatternPath(Image *,const DrawInfo *,const char *,Image **,
374 ExceptionInfo *),
cristy947cb4c2011-10-20 18:41:46 +0000375 DrawPrimitive(Image *,const DrawInfo *,const PrimitiveInfo *,ExceptionInfo *);
cristy3ed852e2009-09-05 21:47:34 +0000376
377extern MagickExport void
378 GetAffineMatrix(AffineMatrix *),
379 GetDrawInfo(const ImageInfo *,DrawInfo *);
380
381#if defined(__cplusplus) || defined(c_plusplus)
382}
383#endif
384
385#endif