/binding/win32/gdiplusfontcollection.d

http://github.com/wilkie/djehuty · D · 139 lines · 92 code · 24 blank · 23 comment · 7 complexity · ddefca0728e0a505e661463d7e1900af MD5 · raw file

  1. /*
  2. * gdiplusfontcollection.d
  3. *
  4. * This module implements GdiPlusFontCollection.h for D. The original
  5. * copyright info is given below.
  6. *
  7. * Author: Dave Wilkinson
  8. * Originated: November 25th, 2009
  9. *
  10. */
  11. module binding.win32.gdiplusfontcollection;
  12. import binding.win32.windef;
  13. import binding.win32.winbase;
  14. import binding.win32.winnt;
  15. import binding.win32.wingdi;
  16. import binding.win32.guiddef;
  17. import binding.win32.gdiplusbase;
  18. import binding.win32.gdiplustypes;
  19. import binding.win32.gdiplusenums;
  20. import binding.win32.gdipluspixelformats;
  21. import binding.win32.gdiplusgpstubs;
  22. import binding.win32.gdiplusmetaheader;
  23. import binding.win32.gdipluspixelformats;
  24. import binding.win32.gdipluscolor;
  25. import binding.win32.gdipluscolormatrix;
  26. import binding.win32.gdiplusflat;
  27. import binding.win32.gdiplusimaging;
  28. import binding.win32.gdiplusbitmap;
  29. import binding.win32.gdiplusimageattributes;
  30. import binding.win32.gdiplusmatrix;
  31. import binding.win32.gdiplusfontfamily;
  32. /**************************************************************************\
  33. *
  34. * Copyright (c) 2000, Microsoft Corp. All Rights Reserved.
  35. *
  36. * Module Name:
  37. *
  38. * GdiplusFontCollection.h
  39. *
  40. * Abstract:
  41. *
  42. * Font collections (Installed and Private)
  43. *
  44. \**************************************************************************/
  45. class FontCollection : GdiplusBase {
  46. this() {
  47. }
  48. ~this() {
  49. }
  50. INT GetFamilyCount() {
  51. INT numFound = 0;
  52. lastResult = GdipGetFontCollectionFamilyCount(
  53. nativeFontCollection, &numFound);
  54. return numFound;
  55. }
  56. Status GetFamilies(in INT numSought, FontFamily[] gpfamilies, INT* numFound) {
  57. if (numSought <= 0 || gpfamilies is null || numFound is null) {
  58. return SetStatus(Status.InvalidParameter);
  59. }
  60. *numFound = 0;
  61. GpFontFamily*[] nativeFamilyList = new GpFontFamily*[numSought];
  62. if (nativeFamilyList is null) {
  63. return SetStatus(Status.OutOfMemory);
  64. }
  65. Status status = SetStatus(GdipGetFontCollectionFamilyList(
  66. nativeFontCollection,
  67. numSought,
  68. nativeFamilyList,
  69. numFound
  70. ));
  71. if (status == Status.Ok){
  72. for (INT i = 0; i < *numFound; i++) {
  73. GdipCloneFontFamily(nativeFamilyList[i],
  74. &gpfamilies[i].nativeFamily);
  75. }
  76. }
  77. return status;
  78. }
  79. Status GetLastStatus() {
  80. return lastResult;
  81. }
  82. protected:
  83. package Status SetStatus(Status status) {
  84. lastResult = status;
  85. return lastResult;
  86. }
  87. package GpFontCollection *nativeFontCollection = null;
  88. package Status lastResult;
  89. }
  90. class InstalledFontCollection : FontCollection {
  91. this() {
  92. nativeFontCollection = null;
  93. lastResult = GdipNewInstalledFontCollection(&nativeFontCollection);
  94. }
  95. ~this() {
  96. }
  97. }
  98. class PrivateFontCollection : FontCollection {
  99. this() {
  100. nativeFontCollection = null;
  101. lastResult = GdipNewPrivateFontCollection(&nativeFontCollection);
  102. }
  103. ~this() {
  104. GdipDeletePrivateFontCollection(&nativeFontCollection);
  105. }
  106. Status AddFontFile(in WCHAR* filename) {
  107. return SetStatus(GdipPrivateAddFontFile(nativeFontCollection, filename));
  108. }
  109. Status AddMemoryFont(in VOID* memory, in INT length) {
  110. return SetStatus(GdipPrivateAddMemoryFont(
  111. nativeFontCollection,
  112. memory,
  113. length));
  114. }
  115. }