]> granicus.if.org Git - imagemagick/blob - MagickCore/draw.h
(no commit message)
[imagemagick] / MagickCore / draw.h
1 /*
2   Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization
3   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)
22 extern "C" {
23 #endif
24
25 #include "MagickCore/geometry.h"
26 #include "MagickCore/image.h"
27 #include "MagickCore/pixel.h"
28 #include "MagickCore/type.h"
29
30 typedef enum
31 {
32   UndefinedAlign,
33   LeftAlign,
34   CenterAlign,
35   RightAlign
36 } AlignType;
37
38 typedef enum
39 {
40   UndefinedPathUnits,
41   UserSpace,
42   UserSpaceOnUse,
43   ObjectBoundingBox
44 } ClipPathUnits;
45
46 typedef enum
47 {
48   UndefinedDecoration,
49   NoDecoration,
50   UnderlineDecoration,
51   OverlineDecoration,
52   LineThroughDecoration
53 } DecorationType;
54
55 typedef enum
56 {
57   UndefinedDirection,
58   RightToLeftDirection,
59   LeftToRightDirection
60 } DirectionType;
61
62 typedef enum
63 {
64   UndefinedRule,
65 #undef EvenOddRule
66   EvenOddRule,
67   NonZeroRule
68 } FillRule;
69
70 typedef enum
71 {
72   UndefinedGradient,
73   LinearGradient,
74   RadialGradient
75 } GradientType;
76
77 typedef enum
78 {
79   UndefinedCap,
80   ButtCap,
81   RoundCap,
82   SquareCap
83 } LineCap;
84
85 typedef enum
86 {
87   UndefinedJoin,
88   MiterJoin,
89   RoundJoin,
90   BevelJoin
91 } LineJoin;
92
93 typedef enum
94 {
95   UndefinedMethod,
96   PointMethod,
97   ReplaceMethod,
98   FloodfillMethod,
99   FillToBorderMethod,
100   ResetMethod
101 } PaintMethod;
102
103 typedef 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
123 typedef enum
124 {
125   UndefinedReference,
126   GradientReference
127 } ReferenceType;
128
129 typedef enum
130 {
131   UndefinedSpread,
132   PadSpread,
133   ReflectSpread,
134   RepeatSpread
135 } SpreadMethod;
136
137 typedef struct _StopInfo
138 {
139   PixelInfo
140     color;
141
142   MagickRealType
143     offset;
144 } StopInfo;
145
146 typedef 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
160   size_t
161     number_stops;
162
163   SpreadMethod
164     spread;
165
166   MagickBooleanType
167     debug;
168
169   size_t
170     signature;
171
172   PointInfo
173     center;
174
175   MagickRealType
176     radius;
177 } GradientInfo;
178
179 typedef struct _ElementReference
180 {
181   char
182     *id;
183
184   ReferenceType
185     type;
186
187   GradientInfo
188     gradient;
189
190   size_t
191     signature;
192
193   struct _ElementReference
194     *previous,
195     *next;
196 } ElementReference;
197
198 typedef struct _DrawInfo
199 {
200   char
201     *primitive,
202     *geometry;
203
204   RectangleInfo
205     viewbox;
206
207   AffineMatrix
208     affine;
209
210   GravityType
211     gravity;
212
213   PixelInfo
214     fill,
215     stroke;
216
217   double
218     stroke_width;
219
220   GradientInfo
221     gradient;
222
223   Image
224     *fill_pattern,
225     *stroke_pattern;
226
227   MagickBooleanType
228     stroke_antialias,
229     text_antialias;
230
231   FillRule
232     fill_rule;
233
234   LineCap
235     linecap;
236
237   LineJoin
238     linejoin;
239
240   size_t
241     miterlimit;
242
243   double
244     dash_offset;
245
246   DecorationType
247     decorate;
248
249   CompositeOperator
250     compose;
251
252   char
253     *text;
254
255   size_t
256     face;
257
258   char
259     *font,
260     *metrics,
261     *family;
262
263   StyleType
264     style;
265
266   StretchType
267     stretch;
268
269   size_t
270     weight;
271
272   char
273     *encoding;
274
275   double
276     pointsize;
277
278   char
279     *density;
280
281   AlignType
282     align;
283
284   PixelInfo
285     undercolor,
286     border_color;
287
288   char
289     *server_name;
290
291   double
292     *dash_pattern;
293
294   char
295     *clip_mask;
296
297   SegmentInfo
298     bounds;
299
300   ClipPathUnits
301     clip_units;
302
303   Quantum
304     alpha;
305
306   MagickBooleanType
307     render;
308
309   ElementReference
310     element_reference;
311
312   double
313     kerning,
314     interword_spacing,
315     interline_spacing;
316
317   DirectionType
318     direction;
319
320   MagickBooleanType
321
322     debug;
323
324   size_t
325     signature;
326 } DrawInfo;
327
328 typedef struct _PrimitiveInfo
329 {
330   PointInfo
331     point;
332
333   size_t
334     coordinates;
335
336   PrimitiveType
337     primitive;
338
339   PaintMethod
340     method;
341
342   char
343     *text;
344 } PrimitiveInfo;
345
346 typedef struct _TypeMetric
347 {
348   PointInfo
349     pixels_per_em;
350
351   double
352     ascent,
353     descent,
354     width,
355     height,
356     max_advance,
357     underline_position,
358     underline_thickness;
359
360   SegmentInfo
361     bounds;
362
363   PointInfo
364     origin;
365 } TypeMetric;
366
367 extern MagickExport DrawInfo
368   *AcquireDrawInfo(void),
369   *CloneDrawInfo(const ImageInfo *,const DrawInfo *),
370   *DestroyDrawInfo(DrawInfo *);
371
372 extern MagickExport MagickBooleanType
373   DrawAffineImage(Image *,const Image *,const AffineMatrix *,ExceptionInfo *),
374   DrawClipPath(Image *,const DrawInfo *,const char *,ExceptionInfo *),
375   DrawGradientImage(Image *,const DrawInfo *,ExceptionInfo *),
376   DrawImage(Image *,const DrawInfo *,ExceptionInfo *),
377   DrawPatternPath(Image *,const DrawInfo *,const char *,Image **,
378     ExceptionInfo *),
379   DrawPrimitive(Image *,const DrawInfo *,const PrimitiveInfo *,ExceptionInfo *);
380
381 extern MagickExport void
382   GetAffineMatrix(AffineMatrix *),
383   GetDrawInfo(const ImageInfo *,DrawInfo *);
384
385 #if defined(__cplusplus) || defined(c_plusplus)
386 }
387 #endif
388
389 #endif