]> granicus.if.org Git - imagemagick/blob - MagickCore/draw.h
(no commit message)
[imagemagick] / MagickCore / draw.h
1 /*
2   Copyright 1999-2014 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 #include "MagickCore/geometry.h"
22 #include "MagickCore/image.h"
23 #include "MagickCore/pixel.h"
24 #include "MagickCore/type.h"
25
26 #if defined(__cplusplus) || defined(c_plusplus)
27 extern "C" {
28 #endif
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   double
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   double
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   PixelInfo
211     fill,
212     stroke,
213     undercolor,
214     border_color;
215
216   Image
217     *fill_pattern,
218     *stroke_pattern;
219
220   double
221     stroke_width;
222
223   GradientInfo
224     gradient;
225
226   MagickBooleanType
227     stroke_antialias,
228     text_antialias;
229
230   FillRule
231     fill_rule;
232
233   LineCap
234     linecap;
235
236   LineJoin
237     linejoin;
238
239   size_t
240     miterlimit;
241
242   double
243     dash_offset;
244
245   DecorationType
246     decorate;
247
248   CompositeOperator
249     compose;
250
251   char
252     *text,
253     *font,
254     *metrics,
255     *family;
256
257   size_t
258     face;
259
260   StyleType
261     style;
262
263   StretchType
264     stretch;
265
266   size_t
267     weight;
268
269   char
270     *encoding;
271
272   double
273     pointsize;
274
275   char
276     *density;
277
278   AlignType
279     align;
280
281   GravityType
282     gravity;
283
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
300     alpha;
301
302   MagickBooleanType
303     render;
304
305   ElementReference
306     element_reference;
307
308   double
309     kerning,
310     interword_spacing,
311     interline_spacing;
312
313   DirectionType
314     direction;
315
316   MagickBooleanType
317     debug;
318
319   size_t
320     signature;
321 } DrawInfo;
322
323
324 typedef struct _PrimitiveInfo
325 {
326   PointInfo
327     point;
328
329   size_t
330     coordinates;
331
332   PrimitiveType
333     primitive;
334
335   PaintMethod
336     method;
337
338   char
339     *text;
340 } PrimitiveInfo;
341
342 typedef 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
363 extern MagickExport DrawInfo
364   *AcquireDrawInfo(void),
365   *CloneDrawInfo(const ImageInfo *,const DrawInfo *),
366   *DestroyDrawInfo(DrawInfo *);
367
368 extern MagickExport MagickBooleanType
369   DrawAffineImage(Image *,const Image *,const AffineMatrix *,ExceptionInfo *),
370   DrawClipPath(Image *,const DrawInfo *,const char *,ExceptionInfo *),
371   DrawGradientImage(Image *,const DrawInfo *,ExceptionInfo *),
372   DrawImage(Image *,const DrawInfo *,ExceptionInfo *),
373   DrawPatternPath(Image *,const DrawInfo *,const char *,Image **,
374     ExceptionInfo *),
375   DrawPrimitive(Image *,const DrawInfo *,const PrimitiveInfo *,ExceptionInfo *);
376
377 extern MagickExport void
378   GetAffineMatrix(AffineMatrix *),
379   GetDrawInfo(const ImageInfo *,DrawInfo *);
380
381 #if defined(__cplusplus) || defined(c_plusplus)
382 }
383 #endif
384
385 #endif