• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2   Copyright 1999-2016 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   AlphaPrimitive,
107   ArcPrimitive,
108   BezierPrimitive,
109   CirclePrimitive,
110   ColorPrimitive,
111   EllipsePrimitive,
112   ImagePrimitive,
113   LinePrimitive,
114   PathPrimitive,
115   PointPrimitive,
116   PolygonPrimitive,
117   PolylinePrimitive,
118   RectanglePrimitive,
119   RoundRectanglePrimitive,
120   TextPrimitive
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   PointInfo
170     center,
171     radii;
172 
173   double
174     radius,
175     angle;
176 
177   size_t
178     signature;
179 } GradientInfo;
180 
181 typedef struct _ElementReference
182 {
183   char
184     *id;
185 
186   ReferenceType
187     type;
188 
189   GradientInfo
190     gradient;
191 
192   struct _ElementReference
193     *previous,
194     *next;
195 
196   size_t
197     signature;
198 } ElementReference;
199 
200 typedef struct _DrawInfo
201 {
202   char
203     *primitive,
204     *geometry;
205 
206   RectangleInfo
207     viewbox;
208 
209   AffineMatrix
210     affine;
211 
212   PixelInfo
213     fill,
214     stroke,
215     undercolor,
216     border_color;
217 
218   Image
219     *fill_pattern,
220     *stroke_pattern;
221 
222   double
223     stroke_width;
224 
225   GradientInfo
226     gradient;
227 
228   MagickBooleanType
229     stroke_antialias,
230     text_antialias;
231 
232   FillRule
233     fill_rule;
234 
235   LineCap
236     linecap;
237 
238   LineJoin
239     linejoin;
240 
241   size_t
242     miterlimit;
243 
244   double
245     dash_offset;
246 
247   DecorationType
248     decorate;
249 
250   CompositeOperator
251     compose;
252 
253   char
254     *text,
255     *font,
256     *metrics,
257     *family;
258 
259   size_t
260     face;
261 
262   StyleType
263     style;
264 
265   StretchType
266     stretch;
267 
268   size_t
269     weight;
270 
271   char
272     *encoding;
273 
274   double
275     pointsize;
276 
277   char
278     *density;
279 
280   AlignType
281     align;
282 
283   GravityType
284     gravity;
285 
286   char
287     *server_name;
288 
289   double
290     *dash_pattern;
291 
292   char
293     *clip_mask;
294 
295   SegmentInfo
296     bounds;
297 
298   ClipPathUnits
299     clip_units;
300 
301   Quantum
302     alpha;
303 
304   MagickBooleanType
305     render;
306 
307   ElementReference
308     element_reference;
309 
310   double
311     kerning,
312     interword_spacing,
313     interline_spacing;
314 
315   DirectionType
316     direction;
317 
318   MagickBooleanType
319     debug;
320 
321   size_t
322     signature;
323 
324   double
325     fill_alpha,
326     stroke_alpha;
327 } DrawInfo;
328 
329 
330 typedef struct _PrimitiveInfo
331 {
332   PointInfo
333     point;
334 
335   size_t
336     coordinates;
337 
338   PrimitiveType
339     primitive;
340 
341   PaintMethod
342     method;
343 
344   char
345     *text;
346 } PrimitiveInfo;
347 
348 typedef struct _TypeMetric
349 {
350   PointInfo
351     pixels_per_em;
352 
353   double
354     ascent,
355     descent,
356     width,
357     height,
358     max_advance,
359     underline_position,
360     underline_thickness;
361 
362   SegmentInfo
363     bounds;
364 
365   PointInfo
366     origin;
367 } TypeMetric;
368 
369 extern MagickExport DrawInfo
370   *AcquireDrawInfo(void),
371   *CloneDrawInfo(const ImageInfo *,const DrawInfo *),
372   *DestroyDrawInfo(DrawInfo *);
373 
374 extern MagickExport MagickBooleanType
375   DrawAffineImage(Image *,const Image *,const AffineMatrix *,ExceptionInfo *),
376   DrawClipPath(Image *,const DrawInfo *,const char *,ExceptionInfo *),
377   DrawGradientImage(Image *,const DrawInfo *,ExceptionInfo *),
378   DrawImage(Image *,const DrawInfo *,ExceptionInfo *),
379   DrawPatternPath(Image *,const DrawInfo *,const char *,Image **,
380     ExceptionInfo *),
381   DrawPrimitive(Image *,const DrawInfo *,const PrimitiveInfo *,ExceptionInfo *);
382 
383 extern MagickExport void
384   GetAffineMatrix(AffineMatrix *),
385   GetDrawInfo(const ImageInfo *,DrawInfo *);
386 
387 #if defined(__cplusplus) || defined(c_plusplus)
388 }
389 #endif
390 
391 #endif
392