blob: 4ab22f14f93b904f03a06d77c7f461266ac3eddc [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,
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{
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,
cristy6ac8b332010-04-22 02:24:11 +0000329 interline_spacing;
330
331 DirectionType
cristyc9b12952010-03-28 01:12:28 +0000332 direction;
cristy3ed852e2009-09-05 21:47:34 +0000333} DrawInfo;
334
335typedef struct _PrimitiveInfo
336{
337 PointInfo
338 point;
339
340 unsigned long
341 coordinates;
342
343 PrimitiveType
344 primitive;
345
346 PaintMethod
347 method;
348
349 char
350 *text;
351} PrimitiveInfo;
352
353typedef struct _TypeMetric
354{
355 PointInfo
356 pixels_per_em;
357
358 double
359 ascent,
360 descent,
361 width,
362 height,
363 max_advance,
364 underline_position,
365 underline_thickness;
366
367 SegmentInfo
368 bounds;
369
370 PointInfo
371 origin;
372} TypeMetric;
373
374extern MagickExport DrawInfo
375 *AcquireDrawInfo(void),
376 *CloneDrawInfo(const ImageInfo *,const DrawInfo *),
377 *DestroyDrawInfo(DrawInfo *);
378
379extern MagickExport MagickBooleanType
380 DrawAffineImage(Image *,const Image *,const AffineMatrix *),
381 DrawClipPath(Image *,const DrawInfo *,const char *),
382 DrawGradientImage(Image *,const DrawInfo *),
383 DrawImage(Image *,const DrawInfo *),
384 DrawPatternPath(Image *,const DrawInfo *,const char *,Image **),
385 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