source: Include/Classes/System/Drawing/RectangleF.ab@ 166

Last change on this file since 166 was 166, checked in by イグトランス (egtra), 17 years ago

GetHashCodeを実装

File size: 5.0 KB
Line 
1' Classes/System/Drawing/RectangleF.ab
2
3#ifndef __SYSTEM_DRAWING_RECTANGLEF_AB__
4#define __SYSTEM_DRAWING_RECTANGLEF_AB__
5
6#include <Classes/System/Math.ab>
7#include <Classes/System/Drawing/PointF.ab>
8#include <Classes/System/Drawing/SizeF.ab>
9
10Class RectangleF
11Public
12 Sub RectangleF()
13 x = 0
14 y = 0
15 width = 0
16 height = 0
17 End Sub
18
19 Sub RectangleF(x As Single, y As Single, width As Single, height As Single)
20 x = x
21 y = y
22 width = width
23 height = height
24 End Sub
25
26 Sub RectangleF(location As PointF, size As SizeF)
27 x = location.X
28 y = location.Y
29 width = size.Height
30 height = size.Height
31 End Sub
32
33 Sub RectangleF(ByRef rc As RectangleF)
34 x = rc.x
35 y = rc.y
36 width = rc.width
37 height = rc.height
38 End Sub
39
40 Function Location() As PointF
41 Dim pt As PointF(x, y)
42 Return pt
43 End Function
44
45 Sub Location(ByRef point As PointF)
46 x = point.X
47 y = point.Y
48 End Sub
49
50 Function Size() As SizeF
51 Dim size As SizeF(width, height)
52 End Function
53
54 Sub Size(ByRef size As SizeF)
55 width = size.Width
56 height = size.Height
57 End Sub
58
59 Function X() As Single
60 Return x
61 End Function
62
63 Sub X(value As Single)
64 x = value
65 End Sub
66
67 Function Y() As Single
68 Return y
69 End Function
70
71 Sub Y(value As Single)
72 y = value
73 End Sub
74
75 Function Width() As Single
76 Return width
77 End Function
78
79 Sub Width(value As Single)
80 width = value
81 End Sub
82
83 Function Height() As Single
84 Return height
85 End Function
86
87 Sub Height(value As Single)
88 height = value
89 End Sub
90
91 Function Left() As Single
92 Return X
93 End Function
94
95 Function Top() As Single
96 Return Y
97 End Function
98
99 Function Right() As Single
100 Return X + Width
101 End Function
102
103 Function Bottom() As Single
104 Return Y + Height
105 End Function
106
107 Function IsEmpty() As Boolean
108 If Width <= 0 Or Height <= 0 Then
109 IsEmpty = _System_TRUE
110 Else
111 IsEmpty = _System_FALSE
112 End If
113 End Function
114
115 Function Operator =(ByRef rc As RectangleF)
116 With rc
117 x = .x
118 y = .y
119 width = .width
120 height = .height
121 End With
122 End Function
123
124 Function Operator ==(ByRef rc As RectangleF)
125 Return Equals(rc)
126 End Function
127
128 Function Operator <>(ByRef rc As RectangleF)
129 Return Not Equals(rc)
130 End Function
131
132 Function Equals(ByRef rc As RectangleF) As Boolean
133 If X = rc.X And Y = rc.Y And Width = rc.Width And Height = rc.Height Then
134 Equals = _System_TRUE
135 Else
136 Equals = _System_FALSE
137 End If
138 End Function
139
140 Override Function GetHashCode() As Long
141 Return GetDWord(VarPtr(x)) Xor _System_BSwap(GetDWord(VarPtr(y))) Xor GetDWord(VarPtr(width)) Xor _System_BSwap(GetDWord(VarPtr(height)))
142 End Function
143
144 Static Function FromLTRB(l As Single, t As Single, r As Single, b As Single) As RectangleF
145 Dim rect As RectangleF(l, t, r - l, b - t)
146 return rect
147 End Function
148
149 Function Contains(x As Single, y As Single) As Boolean
150 If x >= X And x < X + Width And y >= Y And y < Y + Height Then
151 Contains = _System_TRUE
152 Else
153 Contains = _System_FALSE
154 End If
155 End Function
156
157 Function Contains(ByRef pt As PointF) As Boolean
158 ContainsPTF = Contains(pt.X, pt.Y)
159 End Function
160
161 Function Contains(ByRef rc As RectangleF) As Boolean
162 If X <= rc.X And rc.Right <= Right And Y <= rc.Y And rc.Bottom <= Bottom Then
163 ContainsRCF = _System_TRUE
164 Else
165 ContainsRCF = _System_FALSE
166 End If
167 End Function
168
169 Sub Inflate(dx As Single, dy As Single)
170 X -= dx
171 Y -= dy
172 Width += dx + dx
173 Height += dy + dy
174 End Sub
175
176 Sub Inflate(sz As SizeF)
177 Inflate(sz.Width, sz.Height)
178 End Sub
179
180 Static Function Inflate(ByRef rc As RectangleF, x As Single, y As Single) As RectangleF
181 Inflate = rc
182 Inflate.Inflate(x, y)
183 End Function
184
185 Sub Intersect(ByRef rect As RectangleF)
186 This = RectangleF.Intersect(This, rect)
187 End Sub
188
189 Static Function Intersect(ByRef a As RectangleF, ByRef b As RectangleF) As RectangleF
190 Dim right As Single, bottom As Single, left As Single, top As Single
191 right = Math.Min(a.Right, b.Right)
192 bottom = Math.Min(a.Bottom, b.Bottom)
193 left = Math.Min(a.Left, b.Left)
194 top = Math.Min(a.Top, b.Top)
195 Return FromLTRB(left, top, right, bottom)
196 End Function
197
198 Function IntersectsWith(ByRef rc As RectangleF) As Boolean
199 If Left < rc.Right And _
200 Top < rc.Bottom And _
201 Right > rc.Left And _
202 Bottom > rc.Top Then
203 IntersectsWith = _System_TRUE
204 Else
205 IntersectsWith = _System_FALSE
206 End If
207 End Function
208
209 Static Function Union(ByRef a As RectangleF, ByRef b As RectangleF) As RectangleF
210 Dim right As Single, bottom As Single, left As Single, top As Single
211 right = Math.Max(a.Right(), b.Right())
212 bottom = Math.Max(a.Bottom(), b.Bottom())
213 left = Math.Max(a.Left(), b.Left())
214 top = Math.Max(a.Top(), b.Top())
215 Return FromLTRB(left, top, right, bottom)
216 End Function
217
218 Sub Offset(pt As PointF)
219 Offset(pt.X, pt.Y)
220 End Sub
221
222 Sub Offset(dx As Single, dy As Single)
223 X += dx
224 Y += dy
225 End Sub
226
227Public
228 x As Single
229 y As Single
230 width As Single
231 height As Single
232End Class
233
234#endif '__SYSTEM_DRAWING_RECTFANGLE_AB__
Note: See TracBrowser for help on using the repository browser.