Index: Include/Classes/System/Drawing/Font.ab
===================================================================
--- Include/Classes/System/Drawing/Font.ab	(revision 104)
+++ Include/Classes/System/Drawing/Font.ab	(revision 137)
@@ -3,4 +3,5 @@
 
 #require <GdiPlus.ab>
+#require <Classes/System/Drawing/misc.ab>
 #require <Classes/System/Drawing/Graphics.ab>
 
@@ -64,19 +65,33 @@
 	End Sub
 
-	Sub Font(/*IN const*/ familyName As *WCHAR, /*IN*/ emSize As Single)
-		Font(familyName, emSize, FontStyleRegular, UnitPoint, ByVal 0)
-	End Sub
-
-	Sub Font(/*IN const*/ familyName As *WCHAR, /*IN*/ emSize As Single,
+	Sub Font(/*IN const*/ familyName As PCWSTR, /*IN*/ emSize As Single)
+		Font(familyName, emSize, FontStyleRegular, Unit.Point, ByVal 0)
+	End Sub
+
+	Sub Font(/*IN const*/ familyName As String, /*IN*/ emSize As Single)
+		Font(familyName, emSize, FontStyleRegular, Unit.Point, ByVal 0)
+	End Sub
+
+	Sub Font(/*IN const*/ familyName As PCWSTR, /*IN*/ emSize As Single,
 		 /*IN*/ style As Long)
-		Font(familyName, emSize, style, UnitPoint, ByVal 0)
-	End Sub
-
-	Sub Font(/*IN const*/ familyName As *WCHAR, /*IN*/ emSize As Single,
+		Font(familyName, emSize, style, Unit.Point, ByVal 0)
+	End Sub
+
+	Sub Font(/*IN const*/ familyName As String, /*IN*/ emSize As Single,
+		 /*IN*/ style As Long)
+		Font(familyName, emSize, style, Unit.Point, ByVal 0)
+	End Sub
+
+	Sub Font(/*IN const*/ familyName As PCWSTR, /*IN*/ emSize As Single,
 		 /*IN*/ style As Long, /*IN*/ unit As GraphicsUnit)
 		Font(familyName, emSize, style, unit, ByVal 0)
 	End Sub
 
-	Sub Font(/*IN const*/ familyName As *WCHAR, /*IN*/ emSize As Single,
+	Sub Font(/*IN const*/ familyName As String, /*IN*/ emSize As Single,
+		 /*IN*/ style As Long, /*IN*/ unit As GraphicsUnit)
+		Font(familyName, emSize, style, unit, ByVal 0)
+	End Sub
+
+	Sub Font(/*IN const*/ familyName As PCWSTR, /*IN*/ emSize As Single,
 		/*IN*/ style As Long, /*IN*/ unit As GraphicsUnit,
 		/*IN const*/ ByRef fontCollection As FontCollection)
@@ -112,4 +127,16 @@
 	End Sub
 
+	Sub Font(/*IN const*/ familyName As String, /*IN*/ emSize As Single,
+		/*IN*/ style As Long, /*IN*/ unit As GraphicsUnit,
+		/*IN const*/ ByRef fontCollection As FontCollection)
+#ifdef __STRING_IS_NOT_UNICODE
+		Dim name = _System_MultiByteToWideChar(familyName)
+		Font(name, emSize, style, unit, fontCollection)
+		_System_free(name)
+#else
+		Font(familyName.Chars, emSize, style, unit, fontCollection)
+#endif
+	End Sub
+
 	Const Function GetLogFontA(/*IN const*/ ByRef g As Graphics, /*OUT*/ ByRef lf As LOGFONTA) As Status
 		Dim nativeGraphics As *GpGraphics
@@ -128,4 +155,16 @@
 	End Function
 
+	Const Function GetLogFont(/*IN const*/ ByRef g As Graphics, /*OUT*/ ByRef lf As LOGFONTA) As Status
+		Dim nativeGraphics As *GpGraphics
+		If VarPtr(g) <> 0 Then
+			nativeGraphics = g.nativeGraphics
+		End If
+#ifdef UNICODE
+		Return SetStatus(GdipGetLogFontW(nativeFont, nativeGraphics, lf))
+#else
+		Return SetStatus(GdipGetLogFontA(nativeFont, nativeGraphics, lf))
+#endif
+	End Function
+
 	Const Function Clone() As *Font
 		Dim cloneFont = 0 As *GpFont
@@ -138,5 +177,5 @@
 	End Sub
 
-	Const Function IsAvailable() As BOOL
+	Const Function IsAvailable() As Boolean
 		Return nativeFont <> 0
 	End Function
@@ -150,4 +189,6 @@
 	End Function
 
+	Const Function SizeInPoints() As Single
+
 	Const Function Unit() As GraphicsUnit
 		SetStatus(GdipGetFontUnit(nativeFont, Unit))
@@ -158,6 +199,6 @@
 	End Function
 
-	Const Function Height() As Single
-		Return GetHeight()
+	Const Function Height() As Long
+		Return GetHeight() As Long
 	End Function
 
@@ -187,7 +228,88 @@
 '	End Function
 
+	Const Function Bold() As Boolean
+		Dim lf As LOGFONT
+		GetLogFont(0, lf)
+		Return lf.lfWeight > FW_BOLD
+	End Function
+
+	Const Function GdiCharSet() As Byte
+		Dim lf As LOGFONT
+		GetLogFont(0, lf)
+		Return lf.lfCharSet
+	End Function
+
+	'Const Function GdiVerticalFont() As Boolean
+
 	Const Function NativeFont() As *GpFont
 		Return nativeFont
 	End Function
+
+	'Const Function IsSystemFont() As Boolean
+
+	Const Function Italic() As Boolean
+		Dim lf As LOGFONT
+		GetLogFont(0, lf)
+		Return lf.lfItalic <> FALSE
+	End Function
+
+	Const Function Name() As String
+#ifdef __STRING_IS_NOT_UNICODE
+		Dim lf As LOGFONTA
+		GetLogFontA(0, lf)
+#else
+		Dim lf As LOGFONTW
+		GetLogFontW(0, lf)
+#endif
+		Return lf.lfFaceName
+	End Function
+
+	'Const Function SizeInPoint() As Boolean
+
+	Const Function NativeFont() As *GpFont
+		Return nativeFont
+	End Function
+
+	Const Function StrikeOut() As Boolean
+		Dim lf As LOGFONT
+		GetLogFont(0, lf)
+		Return lf.fdwStrikeOut <> FALSE
+	End Function
+
+	Const Function Style() As FontStyle
+		Dim lf As LOGFONT
+		GetLogFont(0, lf)
+		Return (((lf.lfWeight > FW_BOLD) And FontStyle.Bold) Or _
+			((lf.lfItatlic <> FALSE) And FontStyle.Italic) Or _
+			((lf.fdwStrikeOut <> FALSE) And FontStyle.Strickeout) Or _
+			((lf.fdwUnderline <> FALSE) And FontStyle.Underline)) As FontStyle
+	End Function
+		
+	'Const Function SystemFontName() As String
+
+	Const Function Underline() As Boolean
+		Dim lf As LOGFONT
+		GetLogFont(0, lf)
+		Return lf.fdwUnderline <> FALSE
+	End Function
+
+	Override Function ToString() As String
+		Return Name
+	End Function
+
+	Const Function ToHfont() As HFONT
+		Dim lf As LOGFONT
+		GetLogFont(ByVal 0, lf)
+		Return CreateFontIndirect(lf)
+	End Function
+
+	Const Sub ToLogFont(ByRef lf As LOGFONT)
+		GetLogFont(ByVal 0, lf)
+	End Sub
+
+	Const Sub ToLogFont(ByRef lf As LOGFONT, ByRef g As Graphics)
+		GetLogFont(g, lf)
+	End Sub
+
 
 Private
