FontCollection.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. //
  2. // System.Drawing.Text.FontCollection.cs
  3. //
  4. // (C) 2002 Ximian, Inc. http://www.ximian.com
  5. // Author: Everaldo Canuto [email protected]
  6. // Sanjay Gupta ([email protected])
  7. //
  8. using System;
  9. using System.Drawing;
  10. using System.Runtime.InteropServices;
  11. namespace System.Drawing.Text {
  12. public abstract class FontCollection : IDisposable {
  13. internal IntPtr nativeFontCollection = IntPtr.Zero;
  14. internal FontCollection ()
  15. {
  16. }
  17. internal FontCollection (IntPtr ptr)
  18. {
  19. nativeFontCollection = ptr;
  20. }
  21. // methods
  22. public void Dispose()
  23. {
  24. }
  25. protected virtual void Dispose (bool disposing)
  26. {
  27. }
  28. // properties
  29. public FontFamily[] Families
  30. {
  31. get {
  32. int found;
  33. int returned;
  34. Status status;
  35. FontFamily[] families;
  36. status = GDIPlus.GdipGetFontCollectionFamilyCount (nativeFontCollection, out found);
  37. int nSize = Marshal.SizeOf (IntPtr.Zero);
  38. IntPtr dest = Marshal.AllocHGlobal (nSize * found);
  39. status = GDIPlus.GdipGetFontCollectionFamilyList(nativeFontCollection, found, dest, out returned);
  40. IntPtr[] ptrAr = new IntPtr [returned];
  41. int pos = dest.ToInt32 ();
  42. for ( int i = 0; i < returned ; i++, pos+=nSize)
  43. ptrAr[i] = (IntPtr)Marshal.PtrToStructure ((IntPtr)pos, typeof(IntPtr));
  44. Marshal.FreeHGlobal (dest);
  45. families = new FontFamily [returned];
  46. for ( int i = 0; i < returned; i++ )
  47. families[i] = new FontFamily (ptrAr[i]);
  48. return families;
  49. }
  50. }
  51. ~FontCollection()
  52. {
  53. Dispose (false);
  54. }
  55. }
  56. }