414078e97ad2b6fdc56fbc94fe5afafe3415944a
[mono.git] / mcs / class / System.Drawing / System.Drawing.Text / FontCollection.cs
1 //
2 // System.Drawing.Text.FontCollection.cs
3 //
4 // (C) 2002 Ximian, Inc.  http://www.ximian.com
5 // Author: Everaldo Canuto everaldo.canuto@bol.com.br
6 //                      Sanjay Gupta (gsanjay@novell.com)
7 //
8 using System;
9 using System.Drawing;
10 using System.Runtime.InteropServices;
11
12 namespace System.Drawing.Text {
13
14         public abstract class FontCollection : IDisposable {
15                 
16                 internal IntPtr nativeFontCollection = IntPtr.Zero;
17                                 
18                 internal FontCollection ()
19                 {
20                 }
21         
22         internal FontCollection ( IntPtr ptr )
23                 {
24                         nativeFontCollection = ptr;
25                 }
26
27                 // methods
28                 public void Dispose()
29                 {
30                 }
31
32                 
33                 protected virtual void Dispose (bool disposing)
34                 {               
35                 }
36
37                 // properties
38                 public FontFamily[] Families
39                 {
40                         get { 
41                                 int found;
42                                 int returned;
43                                 Status status;
44                                 FontFamily[] families;
45                                 
46                                 Console.WriteLine("nativeFontCollection " + nativeFontCollection);
47                                 
48                                 status = GDIPlus.GdipGetFontCollectionFamilyCount (nativeFontCollection, out found);
49                                 
50                                 int nSize =  Marshal.SizeOf (IntPtr.Zero);
51                                 IntPtr dest = Marshal.AllocHGlobal (nSize * found);           
52                
53                                 status = GDIPlus.GdipGetFontCollectionFamilyList(nativeFontCollection, found, dest, out returned);
54                                    
55                                 IntPtr[] ptrAr = new IntPtr [returned];
56                                 int pos = dest.ToInt32 ();
57                                 for ( int i = 0; i < returned ; i++, pos+=nSize)
58                                         ptrAr[i] = (IntPtr)Marshal.PtrToStructure ((IntPtr)pos, typeof(IntPtr));
59            
60                                 Marshal.FreeHGlobal (dest);           
61                    
62                                 families = new FontFamily [returned];
63                                 for ( int i = 0; i < returned; i++ )
64                                         families[i] = new FontFamily (ptrAr[i]);                     
65                            
66                                 return families;               
67                         }
68                 }
69
70                 ~FontCollection()
71                 {
72                         Dispose (false);
73                 }
74
75         }
76
77 }