summaryrefslogtreecommitdiff
path: root/dmagick/c/geometry.d
blob: 19a003534fa025c1f0cccd47b79a71b643e08157 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
module dmagick.c.geometry;

import dmagick.c.exception;
import dmagick.c.image;
import dmagick.c.magickType;

alias ptrdiff_t ssize_t;

extern(C)
{
	enum GeometryFlags
	{
		NoValue = 0x0000,

		XValue  = 0x0001,
		XiValue = 0x0001,

		YValue   = 0x0002,
		PsiValue = 0x0002,

		WidthValue = 0x0004,
		RhoValue   = 0x0004,

		HeightValue = 0x0008,
		SigmaValue  = 0x0008,
		ChiValue    = 0x0010,
		XiNegative  = 0x0020,

		XNegative   = 0x0020,
		PsiNegative = 0x0040,

		YNegative      = 0x0040,
		ChiNegative    = 0x0080,
		PercentValue   = 0x1000,  /* '%'  percentage of something */
		AspectValue    = 0x2000,  /* '!'  resize no-aspect - special use flag */
		NormalizeValue = 0x2000,  /* '!'  ScaleKernelValue() in morphology.c */
		LessValue      = 0x4000,  /* '<'  resize smaller - special use flag */
		GreaterValue   = 0x8000,  /* '>'  resize larger - spacial use flag */
		MinimumValue   = 0x10000, /* '^'  special handling needed */
		CorrelateNormalizeValue = 0x10000, /* '^' see ScaleKernelValue() */
		AreaValue      = 0x20000, /* '@'  resize to area - special use flag */
		DecimalValue   = 0x40000, /* '.'  floating point numbers found */

		AllValues = 0x7fffffff
	}

	enum GravityType
	{
		UndefinedGravity,
		ForgetGravity    = 0,
		NorthWestGravity = 1,
		NorthGravity     = 2,
		NorthEastGravity = 3,
		WestGravity      = 4,
		CenterGravity    = 5,
		EastGravity      = 6,
		SouthWestGravity = 7,
		SouthGravity     = 8,
		SouthEastGravity = 9,
		StaticGravity    = 10
	}

	struct AffineMatrix
	{
		double
			sx,
			rx,
			ry,
			sy,
			tx,
			ty;
	}

	struct GeometryInfo
	{
		double
			rho,
			sigma,
			xi,
			psi,
			chi;
	}

	struct OffsetInfo
	{
		ssize_t
			x,
			y;
	}

	struct RectangleInfo
	{
		size_t
			width,
			height;

		ssize_t
			x,
			y;
	}

	char* GetPageGeometry(const(char)*);

	MagickBooleanType IsGeometry(const(char)*);
	MagickBooleanType IsSceneGeometry(const(char)*, const MagickBooleanType);

	MagickStatusType GetGeometry(const(char)*, ssize_t*, ssize_t*, size_t*, size_t*);
	MagickStatusType ParseAbsoluteGeometry(const(char)*, RectangleInfo*);
	MagickStatusType ParseAffineGeometry(const(char)*, AffineMatrix*, ExceptionInfo*);
	MagickStatusType ParseGeometry(const(char)*, GeometryInfo*);
	MagickStatusType ParseGravityGeometry(const(Image)*, const(char)*, RectangleInfo*, ExceptionInfo*);
	MagickStatusType ParseMetaGeometry(const(char)*, ssize_t*, ssize_t*, size_t*, size_t*);
	MagickStatusType ParsePageGeometry(const(Image)*, const(char)*, RectangleInfo*, ExceptionInfo*);
	MagickStatusType ParseRegionGeometry(const(Image)*, const(char)*, RectangleInfo*, ExceptionInfo*);

	void GravityAdjustGeometry(const size_t, const size_t, const GravityType, RectangleInfo*);
	void SetGeometry(const(Image)*, RectangleInfo*);
	void SetGeometryInfo(GeometryInfo*);
}