1 /* 2 Copyright 1999-2021 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 410