2 using System.Runtime.Serialization;
3 using System.Runtime.InteropServices;
4 using System.ComponentModel;
6 using TextAttribute = java.awt.font.TextAttribute;
8 namespace System.Drawing {
10 public sealed class Font: IDisposable
13 private GraphicsUnit gUnit = GraphicsUnit.Point;
16 internal awt.Font NativeObject {
27 private Font (SerializationInfo info, StreamingContext context)
33 // FIXME: add this method when/if there will be resources needed to be disposed
39 internal float unitConversion(GraphicsUnit fromUnit, GraphicsUnit toUnit, float nSrc)
45 case GraphicsUnit.Display:
48 case GraphicsUnit.Document:
51 case GraphicsUnit.Inch:
54 case GraphicsUnit.Millimeter:
57 case GraphicsUnit.Pixel:
58 case GraphicsUnit.World:
59 inchs = nSrc / Graphics.DefaultScreenResolution;
61 case GraphicsUnit.Point:
65 throw new ArgumentException("Invalid GraphicsUnit");
69 case GraphicsUnit.Display:
72 case GraphicsUnit.Document:
75 case GraphicsUnit.Inch:
78 case GraphicsUnit.Millimeter:
81 case GraphicsUnit.Pixel:
82 case GraphicsUnit.World:
83 nTrg = inchs * Graphics.DefaultScreenResolution;
85 case GraphicsUnit.Point:
89 throw new ArgumentException("Invalid GraphicsUnit");
95 public IntPtr ToHfont ()
97 throw new NotImplementedException();
101 public Font(Font original, FontStyle style)
103 _jFont = original.NativeObject.deriveFont((int)style);
106 public Font(FontFamily family, float emSize)
107 : this(family, emSize, FontStyle.Regular, GraphicsUnit.Point, (byte)0, false)
111 public Font(FontFamily family, float emSize, FontStyle style)
112 : this(family, emSize, style, GraphicsUnit.Point, (byte)0, false)
115 public Font(FontFamily family, float emSize, GraphicsUnit unit)
116 : this(family, emSize, FontStyle.Regular, unit, (byte)0, false)
120 public Font(FontFamily family, float emSize, FontStyle style, GraphicsUnit unit)
121 : this(family, emSize, style, unit, (byte)0, false)
125 public Font(FontFamily family, float emSize, FontStyle style, GraphicsUnit unit, byte charSet)
126 : this(family, emSize, style, unit, charSet, false)
130 public Font(FontFamily family, float emSize, FontStyle style, GraphicsUnit unit, byte charSet, bool isVertical)
131 :this(family.Name,emSize,style,unit,charSet,isVertical)
135 public Font(string familyName, float emSize)
136 : this(familyName, emSize, FontStyle.Regular, GraphicsUnit.Point, (byte)0, false)
140 public Font(string familyName, float emSize, FontStyle style)
141 : this(familyName, emSize, style, GraphicsUnit.Point, (byte)0, false)
145 public Font(string familyName, float emSize, GraphicsUnit unit)
146 : this(familyName, emSize, FontStyle.Regular, unit, (byte)0, false)
150 public Font(string familyName, float emSize, FontStyle style, GraphicsUnit unit)
151 : this(familyName, emSize, style, unit, (byte)0, false)
155 public Font(string familyName, float emSize, FontStyle style, GraphicsUnit unit, byte charSet)
156 : this(familyName, emSize, style, unit, charSet, false)
160 public Font(string familyName, float emSize, FontStyle style, GraphicsUnit unit, byte charSet, bool isVertical)
162 //TODO: charset management
164 java.util.Hashtable attribs = new java.util.Hashtable();
165 attribs.put(TextAttribute.FAMILY, familyName/*TODO: family doungrade possibility*/);
167 attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR);
169 if((style & FontStyle.Bold) != FontStyle.Regular)
170 attribs.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD);
171 if((style & FontStyle.Italic) != FontStyle.Regular)
172 attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
173 if((style & FontStyle.Underline) != FontStyle.Regular)
174 attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
175 if((style & FontStyle.Strikeout) != FontStyle.Regular)
176 attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
178 float newSize = unitConversion(gUnit,GraphicsUnit.World,emSize);
179 attribs.put(TextAttribute.SIZE,new java.lang.Float(newSize));
181 #region OldStyleSwitch
185 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR);
189 // attribs.put(TextAttribute.WEIGattribs, TextAttribute.WEIGattribs_BOLD);
193 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
197 // attribs.put(TextAttribute.WEIGattribs, TextAttribute.WEIGattribs_BOLD);
198 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
202 // attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
206 // attribs.put(TextAttribute.WEIGattribs, TextAttribute.WEIGattribs_BOLD);
207 // attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
211 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
212 // attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
216 // attribs.put(TextAttribute.WEIGattribs, TextAttribute.WEIGattribs_BOLD);
217 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
218 // attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
222 // attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
226 // attribs.put(TextAttribute.WEIGattribs, TextAttribute.WEIGattribs_BOLD);
227 // attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
231 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
232 // attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
235 // case 11: // '\013'
236 // attribs.put(TextAttribute.WEIGattribs, TextAttribute.WEIGattribs_BOLD);
237 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
238 // attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
242 // attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
243 // attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
247 // attribs.put(TextAttribute.WEIGattribs, TextAttribute.WEIGattribs_BOLD);
248 // attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
249 // attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
252 // case 14: // '\016'
253 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
254 // attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
255 // attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
258 // case 15: // '\017'
259 // attribs.put(TextAttribute.WEIGattribs, TextAttribute.WEIGattribs_BOLD);
260 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE);
261 // attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
262 // attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
266 // attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR);
270 //TODO: units conversion
273 _jFont = new awt.Font(attribs);
278 string mess = e.ToString();
279 Console.WriteLine(mess);
285 public object Clone()
287 return new Font(this, Style);
294 return _jFont.isBold();
299 public FontFamily FontFamily {
301 return new FontFamily(_jFont.getFamily());
305 public byte GdiCharSet {
307 throw new NotSupportedException();
311 public bool GdiVerticalFont {
313 throw new NotSupportedException();
319 awt.Container c = new awt.Container();
320 return c.getFontMetrics(NativeObject).getHeight();
326 return _jFont.isItalic();
332 return _jFont.getName();
338 return unitConversion(GraphicsUnit.World,gUnit,_jFont.getSize2D());
343 public float SizeInPoints {
345 return unitConversion(GraphicsUnit.World,GraphicsUnit.Point,_jFont.getSize2D());
350 public bool Strikeout {
354 if((java.lang.Boolean)_jFont.getAttributes().get(TextAttribute.STRIKETHROUGH)
355 == TextAttribute.STRIKETHROUGH_ON )
365 public FontStyle Style {
367 FontStyle style = FontStyle.Regular;
369 style |= FontStyle.Bold;
371 style |= FontStyle.Italic;
373 style |= FontStyle.Underline;
375 style |= FontStyle.Strikeout;
382 public bool Underline {
386 if((java.lang.Integer)_jFont.getAttributes().get(TextAttribute.UNDERLINE)
387 == TextAttribute.UNDERLINE_ON )
397 [TypeConverter(typeof(FontConverter.FontUnitConverter))]
398 public GraphicsUnit Unit {
404 public override System.String ToString()
406 return ("[Font: Name="+ Name +", Size="+ Size+", Style="+ Style +", Units="+ Unit + "]");