blob: 9b39ebee79f4a88aa776a6948b3c3c44031e7d9b [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001/*
cristy16af1cb2009-12-11 21:38:29 +00002 Copyright 1999-2010 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
25#include "magick/geometry.h"
26#include "magick/image.h"
27#include "magick/pixel.h"
28#include "magick/type.h"
29
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,
cristycf5467b2010-03-28 16:22:06 +000058 LeftToRightDirection,
59 RightToLeftDirection
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{
146 MagickPixelPacket
147 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
167 unsigned long
168 number_stops;
169
170 SpreadMethod
171 spread;
172
173 MagickBooleanType
174 debug;
175
176 unsigned long
177 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
197 unsigned long
198 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,
232 *tile,
233 *stroke_pattern;
234
235 MagickBooleanType
236 stroke_antialias,
237 text_antialias;
238
239 FillRule
240 fill_rule;
241
242 LineCap
243 linecap;
244
245 LineJoin
246 linejoin;
247
248 unsigned long
249 miterlimit;
250
251 double
252 dash_offset;
253
254 DecorationType
255 decorate;
256
257 CompositeOperator
258 compose;
259
260 char
261 *text;
262
263 unsigned long
264 face;
265
266 char
267 *font,
268 *metrics,
269 *family;
270
271 StyleType
272 style;
273
274 StretchType
275 stretch;
276
277 unsigned long
278 weight;
279
280 char
281 *encoding;
282
283 double
284 pointsize;
285
286 char
287 *density;
288
289 AlignType
290 align;
291
292 PixelPacket
293 undercolor,
294 border_color;
295
296 char
297 *server_name;
298
299 double
300 *dash_pattern;
301
302 char
303 *clip_mask;
304
305 SegmentInfo
306 bounds;
307
308 ClipPathUnits
309 clip_units;
310
311 Quantum
312 opacity;
313
314 MagickBooleanType
315 render;
316
317 ElementReference
318 element_reference;
319
320 MagickBooleanType
321 debug;
322
323 unsigned long
324 signature;
325
326 double
327 kerning,
cristyb32b90a2009-09-07 21:45:48 +0000328 interword_spacing,
cristyc9b12952010-03-28 01:12:28 +0000329 interline_spacing,
330 direction;
cristy3ed852e2009-09-05 21:47:34 +0000331} DrawInfo;
332
333typedef struct _PrimitiveInfo
334{
335 PointInfo
336 point;
337
338 unsigned long
339 coordinates;
340
341 PrimitiveType
342 primitive;
343
344 PaintMethod
345 method;
346
347 char
348 *text;
349} PrimitiveInfo;
350
351typedef struct _TypeMetric
352{
353 PointInfo
354 pixels_per_em;
355
356 double
357 ascent,
358 descent,
359 width,
360 height,
361 max_advance,
362 underline_position,
363 underline_thickness;
364
365 SegmentInfo
366 bounds;
367
368 PointInfo
369 origin;
370} TypeMetric;
371
372extern MagickExport DrawInfo
373 *AcquireDrawInfo(void),
374 *CloneDrawInfo(const ImageInfo *,const DrawInfo *),
375 *DestroyDrawInfo(DrawInfo *);
376
377extern MagickExport MagickBooleanType
378 DrawAffineImage(Image *,const Image *,const AffineMatrix *),
379 DrawClipPath(Image *,const DrawInfo *,const char *),
380 DrawGradientImage(Image *,const DrawInfo *),
381 DrawImage(Image *,const DrawInfo *),
382 DrawPatternPath(Image *,const DrawInfo *,const char *,Image **),
383 DrawPrimitive(Image *,const DrawInfo *,const PrimitiveInfo *);
384
385extern MagickExport void
386 GetAffineMatrix(AffineMatrix *),
387 GetDrawInfo(const ImageInfo *,DrawInfo *);
388
389#if defined(__cplusplus) || defined(c_plusplus)
390}
391#endif
392
393#endif