1 module dmagick.c.geometry; 2 3 import dmagick.c.exception; 4 import dmagick.c.image; 5 import dmagick.c.magickType; 6 7 alias ptrdiff_t ssize_t; 8 9 extern(C) 10 { 11 enum GeometryFlags 12 { 13 NoValue = 0x0000, 14 15 XValue = 0x0001, 16 XiValue = 0x0001, 17 18 YValue = 0x0002, 19 PsiValue = 0x0002, 20 21 WidthValue = 0x0004, 22 RhoValue = 0x0004, 23 24 HeightValue = 0x0008, 25 SigmaValue = 0x0008, 26 ChiValue = 0x0010, 27 XiNegative = 0x0020, 28 29 XNegative = 0x0020, 30 PsiNegative = 0x0040, 31 32 YNegative = 0x0040, 33 ChiNegative = 0x0080, 34 PercentValue = 0x1000, /* '%' percentage of something */ 35 AspectValue = 0x2000, /* '!' resize no-aspect - special use flag */ 36 NormalizeValue = 0x2000, /* '!' ScaleKernelValue() in morphology.c */ 37 LessValue = 0x4000, /* '<' resize smaller - special use flag */ 38 GreaterValue = 0x8000, /* '>' resize larger - spacial use flag */ 39 MinimumValue = 0x10000, /* '^' special handling needed */ 40 CorrelateNormalizeValue = 0x10000, /* '^' see ScaleKernelValue() */ 41 AreaValue = 0x20000, /* '@' resize to area - special use flag */ 42 DecimalValue = 0x40000, /* '.' floating point numbers found */ 43 SeparatorValue = 0x80000, /* 'x' separator found */ 44 45 AllValues = 0x7fffffff 46 } 47 48 /** 49 * Specify positioning of an object (e.g. text, image) within a 50 * bounding region (e.g. an image). Gravity provides a convenient way to 51 * locate objects irrespective of the size of the bounding region, in 52 * other words, you don't need to provide absolute coordinates in order 53 * to position an object. 54 * A common default for gravity is NorthWestGravity. 55 */ 56 enum GravityType 57 { 58 UndefinedGravity, /// 59 ForgetGravity = 0, /// Don't use gravity. 60 NorthWestGravity = 1, /// Position object at top-left of region. 61 NorthGravity = 2, /// Position object at top-center of region. 62 NorthEastGravity = 3, /// Position object at top-right of region. 63 WestGravity = 4, /// Position object at left-center of region. 64 CenterGravity = 5, /// Position object at center of region. 65 EastGravity = 6, /// Position object at right-center of region. 66 SouthWestGravity = 7, /// Position object at left-bottom of region. 67 SouthGravity = 8, /// Position object at bottom-center of region. 68 SouthEastGravity = 9, /// Position object at bottom-right of region. 69 StaticGravity = 10 /// 70 } 71 72 /** 73 * An AffineMatrix object describes a coordinate transformation. 74 */ 75 struct AffineMatrix 76 { 77 double 78 sx, /// The amount of scaling on the x-axis. 79 rx, /// The amount of rotation on the x-axis, in radians. 80 ry, /// The amount of rotation on the y-axis, in radians. 81 sy, /// The amount of scaling on the y-axis. 82 tx, /// The amount of translation on the x-axis, in pixels. 83 ty; /// The amount of translation on the x-axis, in pixels. 84 } 85 86 struct GeometryInfo 87 { 88 double 89 rho, 90 sigma, 91 xi, 92 psi, 93 chi; 94 } 95 96 struct OffsetInfo 97 { 98 ssize_t 99 x, 100 y; 101 } 102 103 struct RectangleInfo 104 { 105 size_t 106 width, 107 height; 108 109 ssize_t 110 x, 111 y; 112 } 113 114 char* GetPageGeometry(const(char)*); 115 116 MagickBooleanType IsGeometry(const(char)*); 117 MagickBooleanType IsSceneGeometry(const(char)*, const MagickBooleanType); 118 119 MagickStatusType GetGeometry(const(char)*, ssize_t*, ssize_t*, size_t*, size_t*); 120 MagickStatusType ParseAbsoluteGeometry(const(char)*, RectangleInfo*); 121 MagickStatusType ParseAffineGeometry(const(char)*, AffineMatrix*, ExceptionInfo*); 122 MagickStatusType ParseGeometry(const(char)*, GeometryInfo*); 123 MagickStatusType ParseGravityGeometry(const(Image)*, const(char)*, RectangleInfo*, ExceptionInfo*); 124 MagickStatusType ParseMetaGeometry(const(char)*, ssize_t*, ssize_t*, size_t*, size_t*); 125 MagickStatusType ParsePageGeometry(const(Image)*, const(char)*, RectangleInfo*, ExceptionInfo*); 126 MagickStatusType ParseRegionGeometry(const(Image)*, const(char)*, RectangleInfo*, ExceptionInfo*); 127 128 void GravityAdjustGeometry(const size_t, const size_t, const GravityType, RectangleInfo*); 129 void SetGeometry(const(Image)*, RectangleInfo*); 130 void SetGeometryInfo(GeometryInfo*); 131 }