2 // System.Drawing.Fonts.cs
4 // (C) 2004 Ximian, Inc. http://www.ximian.com
9 using System.Runtime.Serialization;
10 using System.Runtime.InteropServices;
11 using System.ComponentModel;
13 namespace System.Drawing {
17 [Editor ("System.Drawing.Design.FontEditor, " + Consts.AssemblySystem_Drawing_Design, typeof (System.Drawing.Design.UITypeEditor))]
18 [TypeConverter(typeof(FontConverter))]
19 public sealed class Font : MarshalByRefObject, ISerializable, ICloneable, IDisposable
21 IntPtr fontObject = IntPtr.Zero;
23 private Font (SerializationInfo info, StreamingContext context)
27 void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
31 public void Dispose ()
33 if (fontObject!=IntPtr.Zero)
35 GDIPlus.GdipDeleteFont(fontObject);
36 GC.SuppressFinalize(this);
40 internal void setProperties(FontFamily family, float emSize, FontStyle style, GraphicsUnit unit, byte charSet, bool isVertical)
42 //Todo: Handle unit conversions
48 _gdiCharSet = charSet;
49 _gdiVerticalFont = isVertical;
50 _sizeInPoints = emSize;
52 _bold = _italic = _strikeout = _underline = false;
58 case FontStyle.Italic:
61 case FontStyle.Regular:
63 case FontStyle.Strikeout:
66 case FontStyle.Underline:
74 public static Font FromHfont(IntPtr font)
77 Font result = new Font("Arial", (float)12.0, FontStyle.Regular);
81 public IntPtr ToHfont () { /*throw new NotImplementedException ();*/ return (IntPtr)100; }
83 public Font(Font original, FontStyle style)
85 _bold = original.Bold;
86 _fontFamily = original.FontFamily;
87 _gdiCharSet = original.GdiCharSet;
88 _gdiVerticalFont = original.GdiVerticalFont;
89 _height = original.Height;
90 _italic = original.Italic;
91 _name = original.Name;
92 _size = original.Size;
93 _sizeInPoints = original.SizeInPoints;
94 _strikeout = original.Strikeout;
95 _underline = original.Underline;
96 _unit = original.Unit;
100 public Font(FontFamily family, float emSize)
101 : this(family, emSize, FontStyle.Regular, GraphicsUnit.Point, (byte)0, false)
105 public Font(FontFamily family, float emSize, FontStyle style)
106 : this(family, emSize, style, GraphicsUnit.Point, (byte)0, false)
110 public Font(FontFamily family, float emSize, FontStyle style, GraphicsUnit unit)
111 : this(family, emSize, style, unit, (byte)0, false)
115 public Font(FontFamily family, float emSize, FontStyle style, GraphicsUnit unit, byte charSet)
116 : this(family, emSize, style, unit, charSet, false)
120 public Font(FontFamily family, float emSize, FontStyle style, GraphicsUnit unit, byte charSet, bool isVertical)
122 GDIPlus.GdipCreateFont(family.NativeObject, emSize, style, unit, out fontObject);
123 setProperties(family, emSize, style, unit, charSet, isVertical);
126 public Font(string familyName, float emSize)
127 : this(familyName, emSize, FontStyle.Regular, GraphicsUnit.Point, (byte)0, false)
131 public Font(string familyName, float emSize, FontStyle style)
132 : this(familyName, emSize, style, GraphicsUnit.Point, (byte)0, false)
136 public Font(string familyName, float emSize, FontStyle style, GraphicsUnit unit)
137 : this(familyName, emSize, style, unit, (byte)0, false)
141 public Font(string familyName, float emSize, FontStyle style, GraphicsUnit unit, byte charSet)
142 : this(familyName, emSize, style, unit, charSet, false)
146 public Font(string familyName, float emSize, FontStyle style, GraphicsUnit unit, byte charSet, bool isVertical)
148 FontFamily family = new FontFamily(familyName);
149 GDIPlus.GdipCreateFont(family.NativeObject, emSize, style, unit, out fontObject);
151 setProperties(family, emSize, style, unit, charSet, isVertical);
155 object ICloneable.Clone()
157 throw new NotImplementedException ();
160 internal IntPtr NativeObject{
176 private FontFamily _fontFamily;
177 public FontFamily FontFamily {
183 private byte _gdiCharSet;
184 public byte GdiCharSet {
190 private bool _gdiVerticalFont;
191 public bool GdiVerticalFont {
193 return _gdiVerticalFont;
204 private bool _italic;
211 private string _name;
225 private float _sizeInPoints;
226 public float SizeInPoints {
228 return _sizeInPoints;
232 private bool _strikeout;
233 public bool Strikeout {
239 private FontStyle _style;
240 public FontStyle Style {
246 private bool _underline;
247 public bool Underline {
253 private GraphicsUnit _unit;
254 public GraphicsUnit Unit {