]> granicus.if.org Git - imagemagick/blob - MagickCore/draw.h
Added missing calls to xmlFreeDoc to fix memory leak reported in #1766.
[imagemagick] / MagickCore / draw.h
1 /*
2   Copyright 1999-2019 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.  You may
6   obtain a copy of the License at
7
8     https://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 #include "MagickCore/color.h"
26
27 #if defined(__cplusplus) || defined(c_plusplus)
28 extern "C" {
29 #endif
30
31 typedef enum
32 {
33   UndefinedAlign,
34   LeftAlign,
35   CenterAlign,
36   RightAlign
37 } AlignType;
38
39 typedef enum
40 {
41   UndefinedPathUnits,
42   UserSpace,
43   UserSpaceOnUse,
44   ObjectBoundingBox
45 } ClipPathUnits;
46
47 typedef enum
48 {
49   UndefinedDecoration,
50   NoDecoration,
51   UnderlineDecoration,
52   OverlineDecoration,
53   LineThroughDecoration
54 } DecorationType;
55
56 typedef enum
57 {
58   UndefinedDirection,
59   RightToLeftDirection,
60   LeftToRightDirection
61 } DirectionType;
62
63 typedef enum
64 {
65   UndefinedRule,
66 #undef EvenOddRule
67   EvenOddRule,
68   NonZeroRule
69 } FillRule;
70
71 typedef enum
72 {
73   UndefinedGradient,
74   LinearGradient,
75   RadialGradient
76 } GradientType;
77
78 typedef enum
79 {
80   UndefinedCap,
81   ButtCap,
82   RoundCap,
83   SquareCap
84 } LineCap;
85
86 typedef enum
87 {
88   UndefinedJoin,
89   MiterJoin,
90   RoundJoin,
91   BevelJoin
92 } LineJoin;
93
94 typedef enum
95 {
96   UndefinedMethod,
97   PointMethod,
98   ReplaceMethod,
99   FloodfillMethod,
100   FillToBorderMethod,
101   ResetMethod
102 } PaintMethod;
103
104 typedef enum
105 {
106   UndefinedPrimitive,
107   AlphaPrimitive,
108   ArcPrimitive,
109   BezierPrimitive,
110   CirclePrimitive,
111   ColorPrimitive,
112   EllipsePrimitive,
113   ImagePrimitive,
114   LinePrimitive,
115   PathPrimitive,
116   PointPrimitive,
117   PolygonPrimitive,
118   PolylinePrimitive,
119   RectanglePrimitive,
120   RoundRectanglePrimitive,
121   TextPrimitive
122 } PrimitiveType;
123
124 typedef enum
125 {
126   UndefinedReference,
127   GradientReference
128 } ReferenceType;
129
130 typedef enum
131 {
132   UndefinedSpread,
133   PadSpread,
134   ReflectSpread,
135   RepeatSpread
136 } SpreadMethod;
137
138 typedef struct _StopInfo
139 {
140   PixelInfo
141     color;
142
143   double
144     offset;
145 } StopInfo;
146
147 typedef struct _GradientInfo
148 {
149   GradientType
150     type;
151
152   RectangleInfo
153     bounding_box;
154
155   SegmentInfo
156     gradient_vector;
157
158   StopInfo
159     *stops;
160
161   size_t
162     number_stops;
163
164   SpreadMethod
165     spread;
166
167   MagickBooleanType
168     debug;
169
170   PointInfo
171     center,
172     radii;
173
174   double
175     radius,
176     angle;
177
178   size_t
179     signature;
180 } GradientInfo;
181
182 typedef struct _ElementReference
183 {
184   char
185     *id;
186
187   ReferenceType
188     type;
189
190   GradientInfo
191     gradient;
192
193   struct _ElementReference
194     *previous,
195     *next;
196
197   size_t
198     signature;
199 } ElementReference;
200
201 typedef struct _DrawInfo
202 {
203   char
204     *primitive,
205     *geometry;
206
207   RectangleInfo
208     viewbox;
209
210   AffineMatrix
211     affine;
212
213   PixelInfo
214     fill,
215     stroke,
216     undercolor,
217     border_color;
218
219   Image
220     *fill_pattern,
221     *stroke_pattern;
222
223   double
224     stroke_width;
225
226   GradientInfo
227     gradient;
228
229   MagickBooleanType
230     stroke_antialias,
231     text_antialias;
232
233   FillRule
234     fill_rule;
235
236   LineCap
237     linecap;
238
239   LineJoin
240     linejoin;
241
242   size_t
243     miterlimit;
244
245   double
246     dash_offset;
247
248   DecorationType
249     decorate;
250
251   CompositeOperator
252     compose;
253
254   char
255     *text,
256     *font,
257     *metrics,
258     *family;
259
260   size_t
261     face;
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   GravityType
285     gravity;
286
287   char
288     *server_name;
289
290   double
291     *dash_pattern;
292
293   char
294     *clip_mask;
295
296   SegmentInfo
297     bounds;
298
299   ClipPathUnits
300     clip_units;
301
302   Quantum
303     alpha;
304
305   MagickBooleanType
306     render;
307
308   ElementReference
309     element_reference;
310
311   double
312     kerning,
313     interword_spacing,
314     interline_spacing;
315
316   DirectionType
317     direction;
318
319   MagickBooleanType
320     debug;
321
322   size_t
323     signature;
324
325   double
326     fill_alpha,
327     stroke_alpha;
328
329   MagickBooleanType
330     clip_path;
331
332   Image
333     *clipping_mask;
334
335   ComplianceType
336     compliance;
337
338   Image
339     *composite_mask;
340
341   char
342     *id;
343 } DrawInfo;
344
345 typedef struct _PrimitiveInfo
346 {
347   PointInfo
348     point;
349
350   size_t
351     coordinates;
352
353   PrimitiveType
354     primitive;
355
356   PaintMethod
357     method;
358
359   char
360     *text;
361
362   MagickBooleanType
363     closed_subpath;
364 } PrimitiveInfo;
365
366 typedef struct _TypeMetric
367 {
368   PointInfo
369     pixels_per_em;
370
371   double
372     ascent,
373     descent,
374     width,
375     height,
376     max_advance,
377     underline_position,
378     underline_thickness;
379
380   SegmentInfo
381     bounds;
382
383   PointInfo
384     origin;
385 } TypeMetric;
386
387 extern MagickExport DrawInfo
388   *AcquireDrawInfo(void),
389   *CloneDrawInfo(const ImageInfo *,const DrawInfo *),
390   *DestroyDrawInfo(DrawInfo *);
391
392 extern MagickExport MagickBooleanType
393   DrawAffineImage(Image *,const Image *,const AffineMatrix *,ExceptionInfo *),
394   DrawClipPath(Image *,const DrawInfo *,const char *,ExceptionInfo *),
395   DrawGradientImage(Image *,const DrawInfo *,ExceptionInfo *),
396   DrawImage(Image *,const DrawInfo *,ExceptionInfo *),
397   DrawPatternPath(Image *,const DrawInfo *,const char *,Image **,
398     ExceptionInfo *),
399   DrawPrimitive(Image *,const DrawInfo *,const PrimitiveInfo *,ExceptionInfo *);
400
401 extern MagickExport void
402   GetAffineMatrix(AffineMatrix *),
403   GetDrawInfo(const ImageInfo *,DrawInfo *);
404
405 #if defined(__cplusplus) || defined(c_plusplus)
406 }
407 #endif
408
409 #endif