Index: /Include/Classes/System/Drawing/CharacterRange.ab
===================================================================
--- /Include/Classes/System/Drawing/CharacterRange.ab	(revision 11)
+++ /Include/Classes/System/Drawing/CharacterRange.ab	(revision 11)
@@ -0,0 +1,61 @@
+' Classes/System/Drawing/CharacterRange.ab
+
+#ifndef __SYSTEM_DRAWING_CHARACTERRANGE_AB__
+#define __SYSTEM_DRAWING_CHARACTERRANGE_AB__
+
+Class CharacterRange
+Public
+	Sub CharacterRange(f As Long, l As Long)
+		first = f
+		length = l
+	End Sub
+
+	Sub CharacterRange(ByRef c As CharacterRange)
+		first = c.first
+		length = c.length
+	End Sub
+
+	Sub CharacterRange()
+		First = 0
+		Length = 0
+	End Sub
+
+	Function First() As Long
+		Return first
+	End Function
+
+	Sub First(f As Long)
+		first = f
+	End Sub
+
+	Function Length() As Long
+		Return l
+	End Function
+
+	Sub Length(l As Long)
+		length = l
+	End Sub
+
+	Sub Operator = (ByRef c As CharacterRange)
+		first  = c.first
+		length = c.length
+	End Sub
+
+	Function Operator == (c As CharacterRange)
+		Return Equals(c)
+	End Function
+
+	Function Operator <> (c As CharacterRange)
+		Return Not Equals(c)
+	End Function
+
+	Function Equals(c As CharacterRange)
+		Return first = c.first And length = c.length
+	End Function
+
+Private
+	first As Long
+	length As Long
+End Class
+
+#endif '__SYSTEM_DRAWING_CHARACTERRANGE_AB__
Index: /Include/Classes/System/Drawing/Color.ab
===================================================================
--- /Include/Classes/System/Drawing/Color.ab	(revision 11)
+++ /Include/Classes/System/Drawing/Color.ab	(revision 11)
@@ -0,0 +1,315 @@
+' Classes/System/Drawing/Color.ab
+
+#ifndef __SYSTEM_DRAWING_COLOR_AB__
+#define __SYSTEM_DRAWING_COLOR_AB__
+
+#include <Classes/System/Math.ab>
+#include <Classes/System/Drawing/Imaging/misc.ab>
+
+Const Enum ColorChannelFlags
+	ColorChannelFlagsC = 0
+	ColorChannelFlagsM
+	ColorChannelFlagsY
+	ColorChannelFlagsK
+	ColorChannelFlagsLast
+End Enum
+
+Class Color
+Public
+	Sub Color()
+		Argb = 0 ' Black
+	End Sub
+
+	Sub Color(r As Byte, g As Byte, b As Byte)
+		argb = MakeARGB(255, r, g, b)
+	End Sub
+
+	Sub Color(a As Byte, r As Byte, g As Byte, b As Byte)
+		Argb = MakeARGB(a, r, g, b)
+	End Sub
+
+	Sub Color(argb As ARGB)
+		Argb = argb
+	End Sub
+
+	Sub Operator =(c As Color)
+		SetValue(c)
+	End Sub
+
+	Function Operator ==(c As Color) As BOOL
+		Return Equals(c)
+	End Function
+
+	Function Operator <>(c As Color) As BOOL
+		Return Not Equals(c)
+	End Function
+
+	Function A() As Byte
+		Return (Argb >> Color_AlphaShift) As Byte
+	End Function
+
+	Function R() As Byte
+		Return (Argb >> Color_RedShift) As Byte
+	End Function
+
+	Function G() As Byte
+		Return (Argb >> Color_GreenShift) As Byte
+	End Function
+
+	Function B() As Byte
+		GetBlue = (argb >> Color_BlueShift) As Byte
+	End Function
+
+	Function GetValue() As ARGB
+		GetValue = argb
+	End Function
+
+	Sub SetValue(value As ARGB)
+		argb = value
+	End Sub
+
+	Sub SetFromCOLORREF(rgb As COLORREF)
+		argb = Color_MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb))
+	End Sub
+
+	Function ToCOLORREF() As COLORREF
+		ToCOLORREF = RGB(R, G, B)
+	End Function
+
+	Function ToArgb() As ARGB
+		Return argb
+	End Function
+
+	Static Function FromArgb(argb As ARGB) As Color
+		Dim c As Color(argb)
+		Rteurn c
+	End Function
+
+	Static Function FromArgb(a As Byte, base As Color) As Color
+		Dim c As Color(a, base.R, base.G, base.B)
+		Return c
+	End Function
+
+	Static Function FromArgb(r As Byte, g As Byte, b As Byte)
+		Dim c As Color(r, g, b)
+		Return c
+	End Function
+
+	Static Function FromArgb(a As Byte, r As Byte, g As Byte, b As Byte)
+		Dim c As Color(a, r, g, b)
+		Return c
+	End Function
+
+	Function Equals(c As Color) As BOOL
+		Return argb = c.argb
+	End Function
+
+	' HSBを求める式はhttp://ofo.jp/osakana/cgtips/hsb.phtmlを参考にしました。
+	Function GetHue() As Single
+		Dim max As Long, min As Long, d As Long
+		max = Math.Max(Math.Max(r, g), b)
+		min = Math.Min(Math.Min(r, g), b)
+		d = max - min
+		If g = max Then
+			Return (b - r) As Double / d * 60 + 120
+		ElseIf b = max Then
+			Return (r - g) As Double / d * 60 + 240
+		ElseIf g < b Then
+			Return (g - b) As Double / d * 60 + 360
+		Else
+			Return (g - b) As Double / d * 60
+		EndIf
+	End Function
+
+	Function GetSaturation() As Single
+		Dim max As Long, min As Long
+		max = Math.Max(Math.Max(r, g), b)
+		min = Math.Min(Math.Min(r, g), b)
+		Return (max - min) / max
+	End Function
+
+	Function GetBrightness() As Single
+		Dim max As Long
+		max = Math.Max(Math.Max(r, g), b)
+		Return max * (1 / 255)
+	End Function
+
+/*
+	' Common color constants
+	Const Enum
+		AliceBlue            = &hFFF0F8FF
+		AntiqueWhite         = &hFFFAEBD7
+		Aqua                 = &hFF00FFFF
+		Aquamarine           = &hFF7FFFD4
+		Azure                = &hFFF0FFFF
+		Beige                = &hFFF5F5DC
+		Bisque               = &hFFFFE4C4
+		Black                = &hFF000000
+		BlanchedAlmond       = &hFFFFEBCD
+		Blue                 = &hFF0000FF
+		BlueViolet           = &hFF8A2BE2
+		Brown                = &hFFA52A2A
+		BurlyWood            = &hFFDEB887
+		CadetBlue            = &hFF5F9EA0
+		Chartreuse           = &hFF7FFF00
+		Chocolate            = &hFFD2691E
+		Coral                = &hFFFF7F50
+		CornflowerBlue       = &hFF6495ED
+		Cornsilk             = &hFFFFF8DC
+		Crimson              = &hFFDC143C
+		Cyan                 = &hFF00FFFF
+		DarkBlue             = &hFF00008B
+		DarkCyan             = &hFF008B8B
+		DarkGoldenrod        = &hFFB8860B
+		DarkGray             = &hFFA9A9A9
+		DarkGreen            = &hFF006400
+		DarkKhaki            = &hFFBDB76B
+		DarkMagenta          = &hFF8B008B
+		DarkOliveGreen       = &hFF556B2F
+		DarkOrange           = &hFFFF8C00
+		DarkOrchid           = &hFF9932CC
+		DarkRed              = &hFF8B0000
+		DarkSalmon           = &hFFE9967A
+		DarkSeaGreen         = &hFF8FBC8B
+		DarkSlateBlue        = &hFF483D8B
+		DarkSlateGray        = &hFF2F4F4F
+		DarkTurquoise        = &hFF00CED1
+		DarkViolet           = &hFF9400D3
+		DeepPink             = &hFFFF1493
+		DeepSkyBlue          = &hFF00BFFF
+		DimGray              = &hFF696969
+		DodgerBlue           = &hFF1E90FF
+		Firebrick            = &hFFB22222
+		FloralWhite          = &hFFFFFAF0
+		ForestGreen          = &hFF228B22
+		Fuchsia              = &hFFFF00FF
+		Gainsboro            = &hFFDCDCDC
+		GhostWhite           = &hFFF8F8FF
+		Gold                 = &hFFFFD700
+		Goldenrod            = &hFFDAA520
+		Gray                 = &hFF808080
+		Green                = &hFF008000
+		GreenYellow          = &hFFADFF2F
+		Honeydew             = &hFFF0FFF0
+		HotPink              = &hFFFF69B4
+		IndianRed            = &hFFCD5C5C
+		Indigo               = &hFF4B0082
+		Ivory                = &hFFFFFFF0
+		Khaki                = &hFFF0E68C
+		Lavender             = &hFFE6E6FA
+		LavenderBlush        = &hFFFFF0F5
+		LawnGreen            = &hFF7CFC00
+		LemonChiffon         = &hFFFFFACD
+		LightBlue            = &hFFADD8E6
+		LightCoral           = &hFFF08080
+		LightCyan            = &hFFE0FFFF
+		LightGoldenrodYellow = &hFFFAFAD2
+		LightGray            = &hFFD3D3D3
+		LightGreen           = &hFF90EE90
+		LightPink            = &hFFFFB6C1
+		LightSalmon          = &hFFFFA07A
+		LightSeaGreen        = &hFF20B2AA
+		LightSkyBlue         = &hFF87CEFA
+		LightSlateGray       = &hFF778899
+		LightSteelBlue       = &hFFB0C4DE
+		LightYellow          = &hFFFFFFE0
+		Lime                 = &hFF00FF00
+		LimeGreen            = &hFF32CD32
+		Linen                = &hFFFAF0E6
+		Magenta              = &hFFFF00FF
+		Maroon               = &hFF800000
+		MediumAquamarine     = &hFF66CDAA
+		MediumBlue           = &hFF0000CD
+		MediumOrchid         = &hFFBA55D3
+		MediumPurple         = &hFF9370DB
+		MediumSeaGreen       = &hFF3CB371
+		MediumSlateBlue      = &hFF7B68EE
+		MediumSpringGreen    = &hFF00FA9A
+		MediumTurquoise      = &hFF48D1CC
+		MediumVioletRed      = &hFFC71585
+		MidnightBlue         = &hFF191970
+		MintCream            = &hFFF5FFFA
+		MistyRose            = &hFFFFE4E1
+		Moccasin             = &hFFFFE4B5
+		NavajoWhite          = &hFFFFDEAD
+		Navy                 = &hFF000080
+		OldLace              = &hFFFDF5E6
+		Olive                = &hFF808000
+		OliveDrab            = &hFF6B8E23
+		Orange               = &hFFFFA500
+		OrangeRed            = &hFFFF4500
+		Orchid               = &hFFDA70D6
+		PaleGoldenrod        = &hFFEEE8AA
+		PaleGreen            = &hFF98FB98
+		PaleTurquoise        = &hFFAFEEEE
+		PaleVioletRed        = &hFFDB7093
+		PapayaWhip           = &hFFFFEFD5
+		PeachPuff            = &hFFFFDAB9
+		Peru                 = &hFFCD853F
+		Pink                 = &hFFFFC0CB
+		Plum                 = &hFFDDA0DD
+		PowderBlue           = &hFFB0E0E6
+		Purple               = &hFF800080
+		Red                  = &hFFFF0000
+		RosyBrown            = &hFFBC8F8F
+		RoyalBlue            = &hFF4169E1
+		SaddleBrown          = &hFF8B4513
+		Salmon               = &hFFFA8072
+		SandyBrown           = &hFFF4A460
+		SeaGreen             = &hFF2E8B57
+		SeaShell             = &hFFFFF5EE
+		Sienna               = &hFFA0522D
+		Silver               = &hFFC0C0C0
+		SkyBlue              = &hFF87CEEB
+		SlateBlue            = &hFF6A5ACD
+		SlateGray            = &hFF708090
+		Snow                 = &hFFFFFAFA
+		SpringGreen          = &hFF00FF7F
+		SteelBlue            = &hFF4682B4
+		Tan                  = &hFFD2B48C
+		Teal                 = &hFF008080
+		Thistle              = &hFFD8BFD8
+		Tomato               = &hFFFF6347
+		Transparent          = &h00FFFFFF
+		Turquoise            = &hFF40E0D0
+		Violet               = &hFFEE82EE
+		Wheat                = &hFFF5DEB3
+		White                = &hFFFFFFFF
+		WhiteSmoke           = &hFFF5F5F5
+		Yellow               = &hFFFFFF00
+		YellowGreen          = &hFF9ACD32
+	End Enum
+
+	' Shift count and bit mask for A, R, G, B components
+
+	Const Enum
+		AlphaShift  = 24
+		RedShift    = 16
+		GreenShift  = 8
+		BlueShift   = 0
+	End Enum
+
+	Const Enum
+		AlphaMask   = &hff000000
+		RedMask     = &h00ff0000
+		GreenMask   = &h0000ff00
+		BlueMask    = &h000000ff
+	End Enum
+*/
+	' Assemble A, R, G, B values into a 32-bit integer
+Private
+	Static Function MakeARGB(/*IN*/ a As Byte,
+	                         /*IN*/ r As Byte,
+	                         /*IN*/ g As Byte,
+	                         /*IN*/ b As Byte) As ARGB
+		MakeARGB = (((b As ARGB) <<  Color_BlueShift) Or _
+		            ((g As ARGB) << Color_GreenShift) Or _
+		            ((r As ARGB) <<   Color_RedShift) Or _
+		            ((a As ARGB) << Color_AlphaShift))
+	End Function
+
+Protected
+	argb As ARGB
+End Class
+
+#endif '__SYSTEM_DRAWING_COLOR_AB__
Index: /Include/Classes/System/Drawing/Point.ab
===================================================================
--- /Include/Classes/System/Drawing/Point.ab	(revision 10)
+++ /Include/Classes/System/Drawing/Point.ab	(revision 11)
@@ -7,5 +7,5 @@
 #include <Classes/System/Drawing/SizeF.ab>
 
-Class PointF
+Class Point
 Public
 	Sub Point()
Index: /Include/Classes/System/Drawing/Rectangle.ab
===================================================================
--- /Include/Classes/System/Drawing/Rectangle.ab	(revision 11)
+++ /Include/Classes/System/Drawing/Rectangle.ab	(revision 11)
@@ -0,0 +1,267 @@
+' Classes/System/Drawing/Rectangle.ab
+
+#ifndef __SYSTEM_DRAWING_RECTANGLE_AB__
+#define __SYSTEM_DRAWING_RECTANGLE_AB__
+
+#include <Classes/System/Math.ab>
+#include <Classes/System/Drawing/RectangleF.ab>
+#include <Classes/System/Drawing/Point.ab>
+#include <Classes/System/Drawing/Size.ab>
+
+Class Rectangle
+Public
+	Sub Rectangle()
+		x = 0
+		y = 0
+		width = 0
+		height = 0
+	End Sub
+
+	Sub Rectangle(x As Single, y As Single, width As Single, height As Single)
+		x = x
+		y = y
+		width = width
+		height = height
+	End Sub
+
+	Sub Rectangle(location As Point, size As Size)
+		x = location.X
+		y = lccation.Y
+		width = size.Height
+		hegiht = size.Height
+	End Sub
+
+	Sub Rectangle(ByRef rc As Rectangle)
+		x = rc.x
+		y = rc.y
+		widht = rc.width
+		height = rc.height
+	End Sub
+
+	Function Location() As Point
+		Dim pt As Point(x, y)
+		Return pt
+	End Function
+
+	Sub Location(ByRef point As Point)
+		x = point.X
+		y = point.Y
+	End Sub
+
+	Function Size() As Size
+		Dim size As Size(width, height)
+	End Function
+
+	Sub Size(ByRef size As Size)
+		width = size.Width
+		height = size.Height
+	End Sub
+
+	Function X() As Single
+		Return x
+	End Function
+
+	Sub X(value As Single)
+		x = value
+	End Sub
+
+	Function Y() As Single
+		Return y
+	End Function
+
+	Sub Y(value As Single)
+		y = value
+	End Sub
+
+	Function Width() As Single
+		Return width
+	End Function
+
+	Sub Width(value As Single)
+		width = value
+	End Sub
+
+	Function Height() As Single
+		Return height
+	End Function
+
+	Sub Height(value As Single)
+		height = value
+	End Sub
+
+	Function Left() As Single
+		Return X
+	End Function
+
+	Function Top() As Single
+		Return Y
+	End Function
+
+	Function Right() As Single
+		Return X + Width
+	End Function
+
+	Function Bottom() As Single
+		Return Y + Height
+	End Function
+
+	Function IsEmpty() As BOOL
+		If Width <= Single_EPSILON Or Height <= Single_EPSILON Then
+			IsEmptyArea = _System_TRUE
+		Else
+			IsEmptyArea = _System_FALSE
+		End If
+	End Function
+
+	Function Operator = (ByRef rc As Rectangle)
+		With rc
+			x = .x
+			y = .y
+			width = .width
+			height = .height
+		End With
+	End Function
+
+	Function Operator == (ByRef rc As Rectangle)
+		Return Equals(rc)
+	End Function
+
+	Function Operator <> (ByRef rc As Rectangle)
+		Return Not Equals(rc)
+	End Function
+
+	Function Operator () As RectangleF
+		Dim r As RectangleF(x, y, width, height)
+		Return r
+	End Function
+
+	Function Equals(ByRef rc As Rectangle) As BOOL
+		If X = rc.X And Y = rc.Y And Width = rc.Width And Height = rc.Height Then
+			Equals = _System_TRUE
+		Else
+			Equals = _System_FALSE
+		End If
+	End Function
+
+	Static Function FromLTRB(l As Single, t As Single, r As Single, b As Single) As Rectangle
+		Dim r As Rectangle(left, top, right - left, bottom - top)
+		return r
+	End Function
+
+	Function Contains(x As Single, y As Single) As BOOL
+		If x >= X And x < X + Width And y >= Y And y < Y + Height Then
+			Contains = _System_TRUE
+		Else
+			Contains = _System_FALSE
+		End If
+	End Function
+
+	Function Contains(ByRef pt As Point) As BOOL
+		ContainsPTF = Contains(pt.X, pt.Y)
+	End Function
+
+	Function Contains(ByRef rc As Rectangle) As BOOL
+		If X <= rc.X && rc.Right <= Right && Y <= rc.Y && rc.Bottom <= Bottom Then
+			ContainsRCF = _System_TRUE
+		Else
+			ContainsRCF = _System_FALSE
+		End If
+	End Function
+
+	Sub Inflate(dx As Single, dy As Single)
+		X -= dx
+		Y -= dy
+		Width = dx + dx
+		Height = dy + dy
+	End Sub
+
+	Sub Inflate(sz As Size)
+		Inflate(sz.Width, sz.Height)
+	End Sub
+
+	Sub Inflate(pt As Point)
+		Inflate(pt.X, pt.Y)
+	End Sub
+
+	Static Function Inflate(ByRef rc As Rectangle, x As Single, y As Single) As Rectangle
+		Inflate = rc
+		Inflate.Inflate(x, y)
+	End Function
+
+	Function Intersect(ByRef rect As Rectangle) As BOOL
+		Intersect = Intersect(This, This, rect)
+	End Function
+
+	Static Function Intersect(ByRef a As Rectangle, ByRef b As Rectangle) As Rectangle
+		Dim right As Single, bottom As Single, left As Single, top As Single
+		right = Math.Min(a.Right, b.Right)
+		bottom = Math.Min(a.Bottom, b.Bottom)
+		left = Math.Min(a.Left, b.Left)
+		top = Math.Min(a.Top, b.Top)
+		Return FromLTRB(left, top, right, bottom)
+	End Function
+
+	Function IntersectsWith(ByRef rc As Rectangle) As BOOL
+		If Left < rc.Right And _
+			Top < rc.Bottom And _
+			Right > rc.Left And _
+			Bottom > rc.Top Then
+			IntersectsWith = _System_TRUE
+		Else
+			IntersectsWith = _System_FALSE
+		End If
+	End Function
+
+	Static Function Union(ByRef a As Rectangle, ByRef b As Rectangle) As Rectangle
+		Dim right As Single, bottom As Single, left As Single, top As Single
+		right = Math.Max(a.GetRight(), b.GetRight())
+		bottom = Math.Max(a.GetBottom(), b.GetBottom())
+		left = Math.Max(a.GetLeft(), b.GetLeft())
+		top = Math.Max(a.GetTop(), b.GetTop())
+		Return FromLTRB(left, top, right, bottom)
+	End Function
+
+	Sub Offset(pt As Point)
+		Offset(pt.X, pt.Y)
+	End Sub
+
+	Sub Offset(dx As Single, dy As Single)
+		X += dx
+		Y += dy
+	End Sub
+
+	Static Function Ceiling(rcf As RectangleF) As Rectangle
+		Dim r As Rectangle(
+			Math.Ceiling(rcf.X),
+			Math.Ceiling(rcf.Y),
+			Math.Ceiling(rcf.Width),
+			Math.Ceiling(rcf.Height))
+		Return r
+	End Function
+
+	Static Function Round(rcf As RectangleF) As Rectangle
+		Dim r As Rectangle(
+			Math.Round(rcf.X),
+			Math.Round(rcf.Y),
+			Math.Round(rcf.Width),
+			Math.Round(rcf.Height))
+		Return r
+	End Function
+
+	Static Function Truncate(rcf As RectangleF) As Rectangle
+		Dim r As Rectangle(
+			Math.Truncate(rcf.X),
+			Math.Truncate(rcf.Y),
+			Math.Truncate(rcf.Width),
+			Math.Truncate(rcf.Height))
+		Return r
+	End Function
+
+Public
+	x As Single
+	y As Single
+	width As Single
+	height As Single
+End Class
+
+#endif '__SYSTEM_DRAWING_RECTFANGLE_AB__
Index: /Include/Classes/System/Drawing/RectangleF.ab
===================================================================
--- /Include/Classes/System/Drawing/RectangleF.ab	(revision 11)
+++ /Include/Classes/System/Drawing/RectangleF.ab	(revision 11)
@@ -0,0 +1,234 @@
+' Classes/System/Drawing/RectangleF.ab
+
+#ifndef __SYSTEM_DRAWING_RECTANGLEF_AB__
+#define __SYSTEM_DRAWING_RECTANGLEF_AB__
+
+#include <Classes/System/Math.ab>
+#include <Classes/System/Drawing/PointF.ab>
+#include <Classes/System/Drawing/SizeF.ab>
+
+Class RectangleF
+Public
+	Sub RectangleF()
+		x = 0
+		y = 0
+		width = 0
+		height = 0
+	End Sub
+
+	Sub RectangleF(x As Single, y As Single, width As Single, height As Single)
+		x = x
+		y = y
+		width = width
+		height = height
+	End Sub
+
+	Sub RectangleF(location As PointF, size As SizeF)
+		x = location.X
+		y = lccation.Y
+		width = size.Height
+		hegiht = size.Height
+	End Sub
+
+	Sub RectangleF(ByRef rc As RectangleF)
+		x = rc.x
+		y = rc.y
+		widht = rc.width
+		height = rc.height
+	End Sub
+
+	Function Location() As PointF
+		Dim pt As PointF(x, y)
+		Return pt
+	End Function
+
+	Sub Location(ByRef point As PointF)
+		x = point.X
+		y = point.Y
+	End Sub
+
+	Function Size() As SizeF
+		Dim size As SizeF(width, height)
+	End Function
+
+	Sub Size(ByRef size As SizeF)
+		width = size.Width
+		height = size.Height
+	End Sub
+
+	Function X() As Single
+		Return x
+	End Function
+
+	Sub X(value As Single)
+		x = value
+	End Sub
+
+	Function Y() As Single
+		Return y
+	End Function
+
+	Sub Y(value As Single)
+		y = value
+	End Sub
+
+	Function Width() As Single
+		Return width
+	End Function
+
+	Sub Width(value As Single)
+		width = value
+	End Sub
+
+	Function Height() As Single
+		Return height
+	End Function
+
+	Sub Height(value As Single)
+		height = value
+	End Sub
+
+	Function Left() As Single
+		Return X
+	End Function
+
+	Function Top() As Single
+		Return Y
+	End Function
+
+	Function Right() As Single
+		Return X + Width
+	End Function
+
+	Function Bottom() As Single
+		Return Y + Height
+	End Function
+
+	Function IsEmpty() As BOOL
+		If Width <= Single_EPSILON Or Height <= Single_EPSILON Then
+			IsEmptyArea = _System_TRUE
+		Else
+			IsEmptyArea = _System_FALSE
+		End If
+	End Function
+
+	Function Operator = (ByRef rc As RectangleF)
+		With rc
+			x = .x
+			y = .y
+			width = .width
+			height = .height
+		End With
+	End Function
+
+	Function Operator == (ByRef rc As RectangleF)
+		Return Equals(rc)
+	End Function
+
+	Function Operator <> (ByRef rc As RectangleF)
+		Return Not Equals(rc)
+	End Function
+
+	Function Equals(ByRef rc As RectangleF) As BOOL
+		If X = rc.X And Y = rc.Y And Width = rc.Width And Height = rc.Height Then
+			Equals = _System_TRUE
+		Else
+			Equals = _System_FALSE
+		End If
+	End Function
+
+	Static Function FromLTRB(l As Single, t As Single, r As Single, b As Single) As RectangleF
+		Dim r As RectangleF(left, top, right - left, bottom - top)
+		return r
+	End Function
+
+	Function Contains(x As Single, y As Single) As BOOL
+		If x >= X And x < X + Width And y >= Y And y < Y + Height Then
+			Contains = _System_TRUE
+		Else
+			Contains = _System_FALSE
+		End If
+	End Function
+
+	Function Contains(ByRef pt As PointF) As BOOL
+		ContainsPTF = Contains(pt.X, pt.Y)
+	End Function
+
+	Function Contains(ByRef rc As RectangleF) As BOOL
+		If X <= rc.X && rc.Right <= Right && Y <= rc.Y && rc.Bottom <= Bottom Then
+			ContainsRCF = _System_TRUE
+		Else
+			ContainsRCF = _System_FALSE
+		End If
+	End Function
+
+	Sub Inflate(dx As Single, dy As Single)
+		X -= dx
+		Y -= dy
+		Width = dx + dx
+		Height = dy + dy
+	End Sub
+
+	Sub Inflate(sz As SizeF)
+		Inflate(sz.Width, sz.Height)
+	End Sub
+
+	Sub Inflate(pt As PointF)
+		Inflate(pt.X, pt.Y)
+	End Sub
+
+	Static Function Inflate(ByRef rc As RectangleF, x As Single, y As Single) As RectangleF
+		Inflate = rc
+		Inflate.Inflate(x, y)
+	End Function
+
+	Function Intersect(ByRef rect As RectangleF) As BOOL
+		Intersect = Intersect(This, This, rect)
+	End Function
+
+	Static Function Intersect(ByRef a As RectangleF, ByRef b As RectangleF) As RectangleF
+		Dim right As Single, bottom As Single, left As Single, top As Single
+		right = Math.Min(a.Right, b.Right)
+		bottom = Math.Min(a.Bottom, b.Bottom)
+		left = Math.Min(a.Left, b.Left)
+		top = Math.Min(a.Top, b.Top)
+		Return FromLTRB(left, top, right, bottom)
+	End Function
+
+	Function IntersectsWith(ByRef rc As RectangleF) As BOOL
+		If Left < rc.Right And _
+			Top < rc.Bottom And _
+			Right > rc.Left And _
+			Bottom > rc.Top Then
+			IntersectsWith = _System_TRUE
+		Else
+			IntersectsWith = _System_FALSE
+		End If
+	End Function
+
+	Static Function Union(ByRef a As RectangleF, ByRef b As RectangleF) As RectangleF
+		Dim right As Single, bottom As Single, left As Single, top As Single
+		right = Math.Max(a.GetRight(), b.GetRight())
+		bottom = Math.Max(a.GetBottom(), b.GetBottom())
+		left = Math.Max(a.GetLeft(), b.GetLeft())
+		top = Math.Max(a.GetTop(), b.GetTop())
+		Return FromLTRB(left, top, right, bottom)
+	End Function
+
+	Sub Offset(pt As PointF)
+		Offset(pt.X, pt.Y)
+	End Sub
+
+	Sub Offset(dx As Single, dy As Single)
+		X += dx
+		Y += dy
+	End Sub
+
+Public
+	x As Single
+	y As Single
+	width As Single
+	height As Single
+End Class
+
+#endif '__SYSTEM_DRAWING_RECTFANGLE_AB__
Index: /Include/Classes/System/Drawing/misc.ab
===================================================================
--- /Include/Classes/System/Drawing/misc.ab	(revision 11)
+++ /Include/Classes/System/Drawing/misc.ab	(revision 11)
@@ -0,0 +1,28 @@
+' Classes/System/Drawing/misc.ab
+
+#ifndef __SYSTEM_DRAWING_MISC_AB__
+#define __SYSTEM_DRAWING_MISC_AB__
+
+Enum RotateFlipType
+	RotateNoneFlipNone = 0
+	Rotate90FlipNone   = 1
+	Rotate180FlipNone  = 2
+	Rotate270FlipNone  = 3
+
+	RotateNoneFlipX    = 4
+	Rotate90FlipX      = 5
+	Rotate180FlipX     = 6
+	Rotate270FlipX     = 7
+
+	RotateNoneFlipY    = 6
+	Rotate90FlipY      = 7
+	Rotate180FlipY     = 4
+	Rotate270FlipY     = 5
+
+	RotateNoneFlipXY   = 2
+	Rotate90FlipXY     = 3
+	Rotate180FlipXY    = 0
+	Rotate270FlipXY    = 1
+End Enum
+
+#endif '__SYSTEM_DRAWING_MISC_AB__
