/binding/win32/wingdi.d

http://github.com/wilkie/djehuty · D · 5612 lines · 4450 code · 885 blank · 277 comment · 72 complexity · f3a6255c8f1fbd462b2ff68ba5d6885c MD5 · raw file

Large files are truncated click here to view the full file

  1. /*
  2. * wingdi.d
  3. *
  4. * This module binds wingdi.h to D. The original copyright notice is
  5. * preserved below.
  6. *
  7. * Author: Dave Wilkinson
  8. * Originated: November 24th, 2009
  9. *
  10. */
  11. module binding.win32.wingdi;
  12. import binding.win32.windef;
  13. import binding.win32.winnt;
  14. import binding.win32.winuser;
  15. import binding.c;
  16. extern(System):
  17. // The original copyright from WinGDI.h:
  18. /**************************************************************************
  19. * *
  20. * wingdi.h -- GDI procedure declarations, constant definitions and macros *
  21. * *
  22. * Copyright (c) Microsoft Corp. All rights reserved. *
  23. * *
  24. **************************************************************************/
  25. /* Binary raster ops */
  26. const auto R2_BLACK = 1; /* 0 */
  27. const auto R2_NOTMERGEPEN = 2; /* DPon */
  28. const auto R2_MASKNOTPEN = 3; /* DPna */
  29. const auto R2_NOTCOPYPEN = 4; /* PN */
  30. const auto R2_MASKPENNOT = 5; /* PDna */
  31. const auto R2_NOT = 6; /* Dn */
  32. const auto R2_XORPEN = 7; /* DPx */
  33. const auto R2_NOTMASKPEN = 8; /* DPan */
  34. const auto R2_MASKPEN = 9; /* DPa */
  35. const auto R2_NOTXORPEN = 10; /* DPxn */
  36. const auto R2_NOP = 11; /* D */
  37. const auto R2_MERGENOTPEN = 12; /* DPno */
  38. const auto R2_COPYPEN = 13; /* P */
  39. const auto R2_MERGEPENNOT = 14; /* PDno */
  40. const auto R2_MERGEPEN = 15; /* DPo */
  41. const auto R2_WHITE = 16; /* 1 */
  42. const auto R2_LAST = 16;
  43. /* Ternary raster operations */
  44. const auto SRCCOPY = cast(DWORD)0x00CC0020; /* dest = source */
  45. const auto SRCPAINT = cast(DWORD)0x00EE0086; /* dest = source OR dest */
  46. const auto SRCAND = cast(DWORD)0x008800C6; /* dest = source AND dest */
  47. const auto SRCINVERT = cast(DWORD)0x00660046; /* dest = source XOR dest */
  48. const auto SRCERASE = cast(DWORD)0x00440328; /* dest = source AND (NOT dest ) */
  49. const auto NOTSRCCOPY = cast(DWORD)0x00330008; /* dest = (NOT source) */
  50. const auto NOTSRCERASE = cast(DWORD)0x001100A6; /* dest = (NOT src) AND (NOT dest) */
  51. const auto MERGECOPY = cast(DWORD)0x00C000CA; /* dest = (source AND pattern) */
  52. const auto MERGEPAINT = cast(DWORD)0x00BB0226; /* dest = (NOT source) OR dest */
  53. const auto PATCOPY = cast(DWORD)0x00F00021; /* dest = pattern */
  54. const auto PATPAINT = cast(DWORD)0x00FB0A09; /* dest = DPSnoo */
  55. const auto PATINVERT = cast(DWORD)0x005A0049; /* dest = pattern XOR dest */
  56. const auto DSTINVERT = cast(DWORD)0x00550009; /* dest = (NOT dest) */
  57. const auto BLACKNESS = cast(DWORD)0x00000042; /* dest = BLACK */
  58. const auto WHITENESS = cast(DWORD)0x00FF0062; /* dest = WHITE */
  59. const auto NOMIRRORBITMAP = cast(DWORD)0x80000000; /* Do not Mirror the bitmap in this call */
  60. const auto CAPTUREBLT = cast(DWORD)0x40000000; /* Include layered windows */
  61. /* Quaternary raster codes */
  62. template MAKEROP4(uint fore, uint back) {
  63. const uint MAKEROP4 = cast(uint)((((back) << 8) & 0xFF000000) | (fore));
  64. }
  65. const auto GDI_ERROR = (0xFFFFFFFFL);
  66. const auto HGDI_ERROR = cast(HANDLE)(-1);
  67. /* Region Flags */
  68. const auto ERROR = 0;
  69. const auto NULLREGION = 1;
  70. const auto SIMPLEREGION = 2;
  71. const auto COMPLEXREGION = 3;
  72. const auto RGN_ERROR = ERROR;
  73. /* CombineRgn() Styles */
  74. const auto RGN_AND = 1;
  75. const auto RGN_OR = 2;
  76. const auto RGN_XOR = 3;
  77. const auto RGN_DIFF = 4;
  78. const auto RGN_COPY = 5;
  79. const auto RGN_MIN = RGN_AND;
  80. const auto RGN_MAX = RGN_COPY;
  81. /* StretchBlt() Modes */
  82. const auto BLACKONWHITE = 1;
  83. const auto WHITEONBLACK = 2;
  84. const auto COLORONCOLOR = 3;
  85. const auto HALFTONE = 4;
  86. const auto MAXSTRETCHBLTMODE = 4;
  87. /* New StretchBlt() Modes */
  88. const auto STRETCH_ANDSCANS = BLACKONWHITE;
  89. const auto STRETCH_ORSCANS = WHITEONBLACK;
  90. const auto STRETCH_DELETESCANS = COLORONCOLOR;
  91. const auto STRETCH_HALFTONE = HALFTONE;
  92. /* PolyFill() Modes */
  93. const auto ALTERNATE = 1;
  94. const auto WINDING = 2;
  95. const auto POLYFILL_LAST = 2;
  96. /* Layout Orientation Options */
  97. const auto LAYOUT_RTL = 0x00000001; // Right to left
  98. const auto LAYOUT_BTT = 0x00000002; // Bottom to top
  99. const auto LAYOUT_VBH = 0x00000004; // Vertical before horizontal
  100. const auto LAYOUT_ORIENTATIONMASK = (LAYOUT_RTL | LAYOUT_BTT | LAYOUT_VBH);
  101. const auto LAYOUT_BITMAPORIENTATIONPRESERVED = 0x00000008;
  102. /* Text Alignment Options */
  103. const auto TA_NOUPDATECP = 0;
  104. const auto TA_UPDATECP = 1;
  105. const auto TA_LEFT = 0;
  106. const auto TA_RIGHT = 2;
  107. const auto TA_CENTER = 6;
  108. const auto TA_TOP = 0;
  109. const auto TA_BOTTOM = 8;
  110. const auto TA_BASELINE = 24;
  111. const auto TA_RTLREADING = 256;
  112. const auto TA_MASK = (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING);
  113. const auto VTA_BASELINE = TA_BASELINE;
  114. const auto VTA_LEFT = TA_BOTTOM;
  115. const auto VTA_RIGHT = TA_TOP;
  116. const auto VTA_CENTER = TA_CENTER;
  117. const auto VTA_BOTTOM = TA_RIGHT;
  118. const auto VTA_TOP = TA_LEFT;
  119. const auto ETO_OPAQUE = 0x0002;
  120. const auto ETO_CLIPPED = 0x0004;
  121. const auto ETO_GLYPH_INDEX = 0x0010;
  122. const auto ETO_RTLREADING = 0x0080;
  123. const auto ETO_NUMERICSLOCAL = 0x0400;
  124. const auto ETO_NUMERICSLATIN = 0x0800;
  125. const auto ETO_IGNORELANGUAGE = 0x1000;
  126. const auto ETO_PDY = 0x2000;
  127. const auto ETO_REVERSE_INDEX_MAP = 0x10000;
  128. const auto ASPECT_FILTERING = 0x0001;
  129. /* Bounds Accumulation APIs */
  130. const auto DCB_RESET = 0x0001;
  131. const auto DCB_ACCUMULATE = 0x0002;
  132. const auto DCB_DIRTY = DCB_ACCUMULATE;
  133. const auto DCB_SET = (DCB_RESET | DCB_ACCUMULATE);
  134. const auto DCB_ENABLE = 0x0004;
  135. const auto DCB_DISABLE = 0x0008;
  136. /* Metafile Functions */
  137. const auto META_SETBKCOLOR = 0x0201;
  138. const auto META_SETBKMODE = 0x0102;
  139. const auto META_SETMAPMODE = 0x0103;
  140. const auto META_SETROP2 = 0x0104;
  141. const auto META_SETRELABS = 0x0105;
  142. const auto META_SETPOLYFILLMODE = 0x0106;
  143. const auto META_SETSTRETCHBLTMODE = 0x0107;
  144. const auto META_SETTEXTCHAREXTRA = 0x0108;
  145. const auto META_SETTEXTCOLOR = 0x0209;
  146. const auto META_SETTEXTJUSTIFICATION = 0x020A;
  147. const auto META_SETWINDOWORG = 0x020B;
  148. const auto META_SETWINDOWEXT = 0x020C;
  149. const auto META_SETVIEWPORTORG = 0x020D;
  150. const auto META_SETVIEWPORTEXT = 0x020E;
  151. const auto META_OFFSETWINDOWORG = 0x020F;
  152. const auto META_SCALEWINDOWEXT = 0x0410;
  153. const auto META_OFFSETVIEWPORTORG = 0x0211;
  154. const auto META_SCALEVIEWPORTEXT = 0x0412;
  155. const auto META_LINETO = 0x0213;
  156. const auto META_MOVETO = 0x0214;
  157. const auto META_EXCLUDECLIPRECT = 0x0415;
  158. const auto META_INTERSECTCLIPRECT = 0x0416;
  159. const auto META_ARC = 0x0817;
  160. const auto META_ELLIPSE = 0x0418;
  161. const auto META_FLOODFILL = 0x0419;
  162. const auto META_PIE = 0x081A;
  163. const auto META_RECTANGLE = 0x041B;
  164. const auto META_ROUNDRECT = 0x061C;
  165. const auto META_PATBLT = 0x061D;
  166. const auto META_SAVEDC = 0x001E;
  167. const auto META_SETPIXEL = 0x041F;
  168. const auto META_OFFSETCLIPRGN = 0x0220;
  169. const auto META_TEXTOUT = 0x0521;
  170. const auto META_BITBLT = 0x0922;
  171. const auto META_STRETCHBLT = 0x0B23;
  172. const auto META_POLYGON = 0x0324;
  173. const auto META_POLYLINE = 0x0325;
  174. const auto META_ESCAPE = 0x0626;
  175. const auto META_RESTOREDC = 0x0127;
  176. const auto META_FILLREGION = 0x0228;
  177. const auto META_FRAMEREGION = 0x0429;
  178. const auto META_INVERTREGION = 0x012A;
  179. const auto META_PAINTREGION = 0x012B;
  180. const auto META_SELECTCLIPREGION = 0x012C;
  181. const auto META_SELECTOBJECT = 0x012D;
  182. const auto META_SETTEXTALIGN = 0x012E;
  183. const auto META_CHORD = 0x0830;
  184. const auto META_SETMAPPERFLAGS = 0x0231;
  185. const auto META_EXTTEXTOUT = 0x0a32;
  186. const auto META_SETDIBTODEV = 0x0d33;
  187. const auto META_SELECTPALETTE = 0x0234;
  188. const auto META_REALIZEPALETTE = 0x0035;
  189. const auto META_ANIMATEPALETTE = 0x0436;
  190. const auto META_SETPALENTRIES = 0x0037;
  191. const auto META_POLYPOLYGON = 0x0538;
  192. const auto META_RESIZEPALETTE = 0x0139;
  193. const auto META_DIBBITBLT = 0x0940;
  194. const auto META_DIBSTRETCHBLT = 0x0b41;
  195. const auto META_DIBCREATEPATTERNBRUSH = 0x0142;
  196. const auto META_STRETCHDIB = 0x0f43;
  197. const auto META_EXTFLOODFILL = 0x0548;
  198. const auto META_SETLAYOUT = 0x0149;
  199. const auto META_DELETEOBJECT = 0x01f0;
  200. const auto META_CREATEPALETTE = 0x00f7;
  201. const auto META_CREATEPATTERNBRUSH = 0x01F9;
  202. const auto META_CREATEPENINDIRECT = 0x02FA;
  203. const auto META_CREATEFONTINDIRECT = 0x02FB;
  204. const auto META_CREATEBRUSHINDIRECT = 0x02FC;
  205. const auto META_CREATEREGION = 0x06FF;
  206. struct DRAWPATRECT {
  207. POINT ptPosition;
  208. POINT ptSize;
  209. WORD wStyle;
  210. WORD wPattern;
  211. }
  212. typedef DRAWPATRECT* PDRAWPATRECT;
  213. /* GDI Escapes */
  214. const auto NEWFRAME = 1;
  215. const auto ABORTDOC = 2;
  216. const auto NEXTBAND = 3;
  217. const auto SETCOLORTABLE = 4;
  218. const auto GETCOLORTABLE = 5;
  219. const auto FLUSHOUTPUT = 6;
  220. const auto DRAFTMODE = 7;
  221. const auto QUERYESCSUPPORT = 8;
  222. const auto SETABORTPROC = 9;
  223. const auto STARTDOC = 10;
  224. const auto ENDDOC = 11;
  225. const auto GETPHYSPAGESIZE = 12;
  226. const auto GETPRINTINGOFFSET = 13;
  227. const auto GETSCALINGFACTOR = 14;
  228. const auto MFCOMMENT = 15;
  229. const auto GETPENWIDTH = 16;
  230. const auto SETCOPYCOUNT = 17;
  231. const auto SELECTPAPERSOURCE = 18;
  232. const auto DEVICEDATA = 19;
  233. const auto PASSTHROUGH = 19;
  234. const auto GETTECHNOLGY = 20;
  235. const auto GETTECHNOLOGY = 20;
  236. const auto SETLINECAP = 21;
  237. const auto SETLINEJOIN = 22;
  238. const auto SETMITERLIMIT = 23;
  239. const auto BANDINFO = 24;
  240. const auto DRAWPATTERNRECT = 25;
  241. const auto GETVECTORPENSIZE = 26;
  242. const auto GETVECTORBRUSHSIZE = 27;
  243. const auto ENABLEDUPLEX = 28;
  244. const auto GETSETPAPERBINS = 29;
  245. const auto GETSETPRINTORIENT = 30;
  246. const auto ENUMPAPERBINS = 31;
  247. const auto SETDIBSCALING = 32;
  248. const auto EPSPRINTING = 33;
  249. const auto ENUMPAPERMETRICS = 34;
  250. const auto GETSETPAPERMETRICS = 35;
  251. const auto POSTSCRIPT_DATA = 37;
  252. const auto POSTSCRIPT_IGNORE = 38;
  253. const auto MOUSETRAILS = 39;
  254. const auto GETDEVICEUNITS = 42;
  255. const auto GETEXTENDEDTEXTMETRICS = 256;
  256. const auto GETEXTENTTABLE = 257;
  257. const auto GETPAIRKERNTABLE = 258;
  258. const auto GETTRACKKERNTABLE = 259;
  259. const auto EXTTEXTOUT = 512;
  260. const auto GETFACENAME = 513;
  261. const auto DOWNLOADFACE = 514;
  262. const auto ENABLERELATIVEWIDTHS = 768;
  263. const auto ENABLEPAIRKERNING = 769;
  264. const auto SETKERNTRACK = 770;
  265. const auto SETALLJUSTVALUES = 771;
  266. const auto SETCHARSET = 772;
  267. const auto STRETCHBLT = 2048;
  268. const auto METAFILE_DRIVER = 2049;
  269. const auto GETSETSCREENPARAMS = 3072;
  270. const auto QUERYDIBSUPPORT = 3073;
  271. const auto BEGIN_PATH = 4096;
  272. const auto CLIP_TO_PATH = 4097;
  273. const auto END_PATH = 4098;
  274. const auto EXT_DEVICE_CAPS = 4099;
  275. const auto RESTORE_CTM = 4100;
  276. const auto SAVE_CTM = 4101;
  277. const auto SET_ARC_DIRECTION = 4102;
  278. const auto SET_BACKGROUND_COLOR = 4103;
  279. const auto SET_POLY_MODE = 4104;
  280. const auto SET_SCREEN_ANGLE = 4105;
  281. const auto SET_SPREAD = 4106;
  282. const auto TRANSFORM_CTM = 4107;
  283. const auto SET_CLIP_BOX = 4108;
  284. const auto SET_BOUNDS = 4109;
  285. const auto SET_MIRROR_MODE = 4110;
  286. const auto OPENCHANNEL = 4110;
  287. const auto DOWNLOADHEADER = 4111;
  288. const auto CLOSECHANNEL = 4112;
  289. const auto POSTSCRIPT_PASSTHROUGH = 4115;
  290. const auto ENCAPSULATED_POSTSCRIPT = 4116;
  291. const auto POSTSCRIPT_IDENTIFY = 4117; /* new escape for NT5 pscript driver */
  292. const auto POSTSCRIPT_INJECTION = 4118; /* new escape for NT5 pscript driver */
  293. const auto CHECKJPEGFORMAT = 4119;
  294. const auto CHECKPNGFORMAT = 4120;
  295. const auto GET_PS_FEATURESETTING = 4121; /* new escape for NT5 pscript driver */
  296. const auto GDIPLUS_TS_QUERYVER = 4122; /* private escape */
  297. const auto GDIPLUS_TS_RECORD = 4123; /* private escape */
  298. /*
  299. * Return Values for MILCORE_TS_QUERYVER
  300. */
  301. const auto MILCORE_TS_QUERYVER_RESULT_FALSE = 0x0;
  302. const auto MILCORE_TS_QUERYVER_RESULT_TRUE = 0x7FFFFFFF;
  303. const auto SPCLPASSTHROUGH2 = 4568; /* new escape for NT5 pscript driver */
  304. /*
  305. * Parameters for POSTSCRIPT_IDENTIFY escape
  306. */
  307. const auto PSIDENT_GDICENTRIC = 0;
  308. const auto PSIDENT_PSCENTRIC = 1;
  309. /*
  310. * Header structure for the input buffer to POSTSCRIPT_INJECTION escape
  311. */
  312. struct PSINJECTDATA {
  313. DWORD DataBytes; /* number of raw data bytes (NOT including this header) */
  314. WORD InjectionPoint; /* injection point */
  315. WORD PageNumber; /* page number to apply the injection */
  316. /* Followed by raw data to be injected */
  317. }
  318. typedef PSINJECTDATA* PPSINJECTDATA;
  319. /*
  320. * Constants for PSINJECTDATA.InjectionPoint field
  321. */
  322. const auto PSINJECT_BEGINSTREAM = 1;
  323. const auto PSINJECT_PSADOBE = 2;
  324. const auto PSINJECT_PAGESATEND = 3;
  325. const auto PSINJECT_PAGES = 4;
  326. const auto PSINJECT_DOCNEEDEDRES = 5;
  327. const auto PSINJECT_DOCSUPPLIEDRES = 6;
  328. const auto PSINJECT_PAGEORDER = 7;
  329. const auto PSINJECT_ORIENTATION = 8;
  330. const auto PSINJECT_BOUNDINGBOX = 9;
  331. const auto PSINJECT_DOCUMENTPROCESSCOLORS = 10;
  332. const auto PSINJECT_COMMENTS = 11;
  333. const auto PSINJECT_BEGINDEFAULTS = 12;
  334. const auto PSINJECT_ENDDEFAULTS = 13;
  335. const auto PSINJECT_BEGINPROLOG = 14;
  336. const auto PSINJECT_ENDPROLOG = 15;
  337. const auto PSINJECT_BEGINSETUP = 16;
  338. const auto PSINJECT_ENDSETUP = 17;
  339. const auto PSINJECT_TRAILER = 18;
  340. const auto PSINJECT_EOF = 19;
  341. const auto PSINJECT_ENDSTREAM = 20;
  342. const auto PSINJECT_DOCUMENTPROCESSCOLORSATEND = 21;
  343. const auto PSINJECT_PAGENUMBER = 100;
  344. const auto PSINJECT_BEGINPAGESETUP = 101;
  345. const auto PSINJECT_ENDPAGESETUP = 102;
  346. const auto PSINJECT_PAGETRAILER = 103;
  347. const auto PSINJECT_PLATECOLOR = 104;
  348. const auto PSINJECT_SHOWPAGE = 105;
  349. const auto PSINJECT_PAGEBBOX = 106;
  350. const auto PSINJECT_ENDPAGECOMMENTS = 107;
  351. const auto PSINJECT_VMSAVE = 200;
  352. const auto PSINJECT_VMRESTORE = 201;
  353. /*
  354. * Parameter for GET_PS_FEATURESETTING escape
  355. */
  356. const auto FEATURESETTING_NUP = 0;
  357. const auto FEATURESETTING_OUTPUT = 1;
  358. const auto FEATURESETTING_PSLEVEL = 2;
  359. const auto FEATURESETTING_CUSTPAPER = 3;
  360. const auto FEATURESETTING_MIRROR = 4;
  361. const auto FEATURESETTING_NEGATIVE = 5;
  362. const auto FEATURESETTING_PROTOCOL = 6;
  363. //
  364. // The range of selectors between FEATURESETTING_PRIVATE_BEGIN and
  365. // FEATURESETTING_PRIVATE_END is reserved by Microsoft for private use
  366. //
  367. const auto FEATURESETTING_PRIVATE_BEGIN = 0x1000;
  368. const auto FEATURESETTING_PRIVATE_END = 0x1FFF;
  369. /*
  370. * Information about output options
  371. */
  372. struct PSFEATURE_OUTPUT {
  373. BOOL bPageIndependent;
  374. BOOL bSetPageDevice;
  375. }
  376. typedef PSFEATURE_OUTPUT* PPSFEATURE_OUTPUT;
  377. /*
  378. * Information about custom paper size
  379. */
  380. struct PSFEATURE_CUSTPAPER {
  381. LONG lOrientation;
  382. LONG lWidth;
  383. LONG lHeight;
  384. LONG lWidthOffset;
  385. LONG lHeightOffset;
  386. }
  387. typedef PSFEATURE_CUSTPAPER* PPSFEATURE_CUSTPAPER;
  388. /* Value returned for FEATURESETTING_PROTOCOL */
  389. const auto PSPROTOCOL_ASCII = 0;
  390. const auto PSPROTOCOL_BCP = 1;
  391. const auto PSPROTOCOL_TBCP = 2;
  392. const auto PSPROTOCOL_BINARY = 3;
  393. /* Flag returned from QUERYDIBSUPPORT */
  394. const auto QDI_SETDIBITS = 1;
  395. const auto QDI_GETDIBITS = 2;
  396. const auto QDI_DIBTOSCREEN = 4;
  397. const auto QDI_STRETCHDIB = 8;
  398. /* Spooler Error Codes */
  399. const auto SP_NOTREPORTED = 0x4000;
  400. const auto SP_ERROR = (-1);
  401. const auto SP_APPABORT = (-2);
  402. const auto SP_USERABORT = (-3);
  403. const auto SP_OUTOFDISK = (-4);
  404. const auto SP_OUTOFMEMORY = (-5);
  405. const auto PR_JOBSTATUS = 0x0000;
  406. /* Object Definitions for EnumObjects() */
  407. const auto OBJ_PEN = 1;
  408. const auto OBJ_BRUSH = 2;
  409. const auto OBJ_DC = 3;
  410. const auto OBJ_METADC = 4;
  411. const auto OBJ_PAL = 5;
  412. const auto OBJ_FONT = 6;
  413. const auto OBJ_BITMAP = 7;
  414. const auto OBJ_REGION = 8;
  415. const auto OBJ_METAFILE = 9;
  416. const auto OBJ_MEMDC = 10;
  417. const auto OBJ_EXTPEN = 11;
  418. const auto OBJ_ENHMETADC = 12;
  419. const auto OBJ_ENHMETAFILE = 13;
  420. const auto OBJ_COLORSPACE = 14;
  421. const auto GDI_OBJ_LAST = OBJ_COLORSPACE;
  422. /* xform stuff */
  423. const auto MWT_IDENTITY = 1;
  424. const auto MWT_LEFTMULTIPLY = 2;
  425. const auto MWT_RIGHTMULTIPLY = 3;
  426. const auto MWT_MIN = MWT_IDENTITY;
  427. const auto MWT_MAX = MWT_RIGHTMULTIPLY;
  428. const auto _XFORM_ = 0;
  429. struct XFORM {
  430. FLOAT eM11;
  431. FLOAT eM12;
  432. FLOAT eM21;
  433. FLOAT eM22;
  434. FLOAT eDx;
  435. FLOAT eDy;
  436. }
  437. typedef XFORM* PXFORM;
  438. typedef XFORM* LPXFORM;
  439. /* Bitmap Header Definition */
  440. struct BITMAP {
  441. LONG bmType;
  442. LONG bmWidth;
  443. LONG bmHeight;
  444. LONG bmWidthBytes;
  445. WORD bmPlanes;
  446. WORD bmBitsPixel;
  447. LPVOID bmBits;
  448. }
  449. typedef BITMAP* PBITMAP;
  450. typedef BITMAP* NPBITMAP;
  451. typedef BITMAP* LPBITMAP;
  452. align(1) struct RGBTRIPLE {
  453. BYTE rgbtBlue;
  454. BYTE rgbtGreen;
  455. BYTE rgbtRed;
  456. }
  457. typedef RGBTRIPLE* PRGBTRIPLE;
  458. typedef RGBTRIPLE* NPRGBTRIPLE;
  459. typedef RGBTRIPLE* LPRGBTRIPLE;
  460. struct RGBQUAD {
  461. BYTE rgbBlue;
  462. BYTE rgbGreen;
  463. BYTE rgbRed;
  464. BYTE rgbReserved;
  465. }
  466. typedef RGBQUAD* LPRGBQUAD;
  467. /* Image Color Matching color definitions */
  468. const auto CS_ENABLE = 0x00000001;
  469. const auto CS_DISABLE = 0x00000002;
  470. const auto CS_DELETE_TRANSFORM = 0x00000003;
  471. /* Logcolorspace signature */
  472. const auto LCS_SIGNATURE = "PSOC"c;
  473. /* Logcolorspace lcsType values */
  474. const auto LCS_sRGB = "sRGB"c;
  475. const auto LCS_WINDOWS_COLOR_SPACE = "Win "c; // Windows default color space
  476. typedef LONG LCSCSTYPE;
  477. const auto LCS_CALIBRATED_RGB = 0x00000000;
  478. typedef LONG LCSGAMUTMATCH;
  479. const auto LCS_GM_BUSINESS = 0x00000001;
  480. const auto LCS_GM_GRAPHICS = 0x00000002;
  481. const auto LCS_GM_IMAGES = 0x00000004;
  482. const auto LCS_GM_ABS_COLORIMETRIC = 0x00000008;
  483. /* ICM Defines for results from CheckColorInGamut() */
  484. const auto CM_OUT_OF_GAMUT = 255;
  485. const auto CM_IN_GAMUT = 0;
  486. /* UpdateICMRegKey Constants */
  487. const auto ICM_ADDPROFILE = 1;
  488. const auto ICM_DELETEPROFILE = 2;
  489. const auto ICM_QUERYPROFILE = 3;
  490. const auto ICM_SETDEFAULTPROFILE = 4;
  491. const auto ICM_REGISTERICMATCHER = 5;
  492. const auto ICM_UNREGISTERICMATCHER = 6;
  493. const auto ICM_QUERYMATCH = 7;
  494. /* Macros to retrieve CMYK values from a COLORREF */
  495. template GetKValue(COLORREF cmyk) {
  496. const BYTE GetKValue = cast(BYTE)(cmyk);
  497. }
  498. template GetYValue(COLORREF cmyk) {
  499. const BYTE GetYValue = cast(BYTE)(cmyk >> 8);
  500. }
  501. template GetYValue(COLORREF cmyk) {
  502. const BYTE GetMValue = cast(BYTE)(cmyk >> 16);
  503. }
  504. template GetYValue(COLORREF cmyk) {
  505. const BYTE GetCValue = cast(BYTE)(cmyk >> 24);
  506. }
  507. template CMYK(BYTE c, BYTE m, BYTE y, BYTE k) {
  508. const COLORREF CMYK = cast(COLORREF)(cast(uint)k | (cast(uint)y) << 8 | (cast(uint)m) << 16 | (cast(uint)c) << 24);
  509. }
  510. typedef Clong_t FXPT16DOT16;
  511. typedef Clong_t* LPFXPT16DOT16;
  512. typedef Clong_t FXPT2DOT30;
  513. typedef Clong_t* LPFXPT2DOT30;
  514. /* ICM Color Definitions */
  515. // The following two structures are used for defining RGB's in terms of CIEXYZ.
  516. struct CIEXYZ {
  517. FXPT2DOT30 ciexyzX;
  518. FXPT2DOT30 ciexyzY;
  519. FXPT2DOT30 ciexyzZ;
  520. }
  521. typedef CIEXYZ* LPCIEXYZ;
  522. struct CIEXYZTRIPLE {
  523. CIEXYZ ciexyzRed;
  524. CIEXYZ ciexyzGreen;
  525. CIEXYZ ciexyzBlue;
  526. }
  527. typedef CIEXYZTRIPLE* LPCIEXYZTRIPLE;
  528. // The next structures the logical color space. Unlike pens and brushes,
  529. // but like palettes, there is only one way to create a LogColorSpace.
  530. // A pointer to it must be passed, its elements can't be pushed as
  531. // arguments.
  532. struct LOGCOLORSPACEA {
  533. DWORD lcsSignature;
  534. DWORD lcsVersion;
  535. DWORD lcsSize;
  536. LCSCSTYPE lcsCSType;
  537. LCSGAMUTMATCH lcsIntent;
  538. CIEXYZTRIPLE lcsEndpoints;
  539. DWORD lcsGammaRed;
  540. DWORD lcsGammaGreen;
  541. DWORD lcsGammaBlue;
  542. CHAR lcsFilename[MAX_PATH];
  543. }
  544. typedef LOGCOLORSPACEA* LPLOGCOLORSPACEA;
  545. struct LOGCOLORSPACEW {
  546. DWORD lcsSignature;
  547. DWORD lcsVersion;
  548. DWORD lcsSize;
  549. LCSCSTYPE lcsCSType;
  550. LCSGAMUTMATCH lcsIntent;
  551. CIEXYZTRIPLE lcsEndpoints;
  552. DWORD lcsGammaRed;
  553. DWORD lcsGammaGreen;
  554. DWORD lcsGammaBlue;
  555. WCHAR lcsFilename[MAX_PATH];
  556. }
  557. typedef LOGCOLORSPACEW* LPLOGCOLORSPACEW;
  558. version(UNICODE) {
  559. typedef LOGCOLORSPACEW LOGCOLORSPACE;
  560. typedef LPLOGCOLORSPACEW LPLOGCOLORSPACE;
  561. }
  562. else {
  563. typedef LOGCOLORSPACEA LOGCOLORSPACE;
  564. typedef LPLOGCOLORSPACEA LPLOGCOLORSPACE;
  565. }
  566. /* structures for defining DIBs */
  567. struct BITMAPCOREHEADER {
  568. DWORD bcSize; /* used to get to color table */
  569. WORD bcWidth;
  570. WORD bcHeight;
  571. WORD bcPlanes;
  572. WORD bcBitCount;
  573. }
  574. typedef BITMAPCOREHEADER* LPBITMAPCOREHEADER;
  575. typedef BITMAPCOREHEADER* PBITMAPCOREHEADER;
  576. struct BITMAPINFOHEADER{
  577. DWORD biSize;
  578. LONG biWidth;
  579. LONG biHeight;
  580. WORD biPlanes;
  581. WORD biBitCount;
  582. DWORD biCompression;
  583. DWORD biSizeImage;
  584. LONG biXPelsPerMeter;
  585. LONG biYPelsPerMeter;
  586. DWORD biClrUsed;
  587. DWORD biClrImportant;
  588. }
  589. typedef BITMAPINFOHEADER* LPBITMAPINFOHEADER;
  590. typedef BITMAPINFOHEADER* PBITMAPINFOHEADER;
  591. struct BITMAPV4HEADER {
  592. DWORD bV4Size;
  593. LONG bV4Width;
  594. LONG bV4Height;
  595. WORD bV4Planes;
  596. WORD bV4BitCount;
  597. DWORD bV4V4Compression;
  598. DWORD bV4SizeImage;
  599. LONG bV4XPelsPerMeter;
  600. LONG bV4YPelsPerMeter;
  601. DWORD bV4ClrUsed;
  602. DWORD bV4ClrImportant;
  603. DWORD bV4RedMask;
  604. DWORD bV4GreenMask;
  605. DWORD bV4BlueMask;
  606. DWORD bV4AlphaMask;
  607. DWORD bV4CSType;
  608. CIEXYZTRIPLE bV4Endpoints;
  609. DWORD bV4GammaRed;
  610. DWORD bV4GammaGreen;
  611. DWORD bV4GammaBlue;
  612. }
  613. typedef BITMAPV4HEADER* LPBITMAPV4HEADER;
  614. typedef BITMAPV4HEADER* PBITMAPV4HEADER;
  615. struct BITMAPV5HEADER {
  616. DWORD bV5Size;
  617. LONG bV5Width;
  618. LONG bV5Height;
  619. WORD bV5Planes;
  620. WORD bV5BitCount;
  621. DWORD bV5Compression;
  622. DWORD bV5SizeImage;
  623. LONG bV5XPelsPerMeter;
  624. LONG bV5YPelsPerMeter;
  625. DWORD bV5ClrUsed;
  626. DWORD bV5ClrImportant;
  627. DWORD bV5RedMask;
  628. DWORD bV5GreenMask;
  629. DWORD bV5BlueMask;
  630. DWORD bV5AlphaMask;
  631. DWORD bV5CSType;
  632. CIEXYZTRIPLE bV5Endpoints;
  633. DWORD bV5GammaRed;
  634. DWORD bV5GammaGreen;
  635. DWORD bV5GammaBlue;
  636. DWORD bV5Intent;
  637. DWORD bV5ProfileData;
  638. DWORD bV5ProfileSize;
  639. DWORD bV5Reserved;
  640. }
  641. typedef BITMAPV5HEADER* LPBITMAPV5HEADER;
  642. typedef BITMAPV5HEADER* PBITMAPV5HEADER;
  643. // Values for bV5CSType
  644. const auto PROFILE_LINKED = "LINK"c;
  645. const auto PROFILE_EMBEDDED = "MBED"c;
  646. /* constants for the biCompression field */
  647. const auto BI_RGB = 0;
  648. const auto BI_RLE8 = 1;
  649. const auto BI_RLE4 = 2;
  650. const auto BI_BITFIELDS = 3;
  651. const auto BI_JPEG = 4;
  652. const auto BI_PNG = 5;
  653. struct BITMAPINFO {
  654. BITMAPINFOHEADER bmiHeader;
  655. RGBQUAD bmiColors[1];
  656. }
  657. typedef BITMAPINFO* LPBITMAPINFO;
  658. typedef BITMAPINFO* PBITMAPINFO;
  659. struct BITMAPCOREINFO {
  660. BITMAPCOREHEADER bmciHeader;
  661. RGBTRIPLE bmciColors[1];
  662. }
  663. typedef BITMAPCOREINFO* LPBITMAPCOREINFO;
  664. typedef BITMAPCOREINFO* PBITMAPCOREINFO;
  665. align(2) struct BITMAPFILEHEADER {
  666. WORD bfType;
  667. DWORD bfSize;
  668. WORD bfReserved1;
  669. WORD bfReserved2;
  670. DWORD bfOffBits;
  671. }
  672. typedef BITMAPFILEHEADER* LPBITMAPFILEHEADER;
  673. typedef BITMAPFILEHEADER* PBITMAPFILEHEADER;
  674. POINTS* MAKEPOINTS(ref DWORD val) {
  675. return cast(POINTS*)(&val);
  676. }
  677. struct FONTSIGNATURE {
  678. DWORD fsUsb[4];
  679. DWORD fsCsb[2];
  680. }
  681. typedef FONTSIGNATURE* LPFONTSIGNATURE;
  682. typedef FONTSIGNATURE* PFONTSIGNATURE;
  683. struct CHARSETINFO {
  684. UINT ciCharset;
  685. UINT ciACP;
  686. FONTSIGNATURE fs;
  687. }
  688. typedef CHARSETINFO* NPCHARSETINFO;
  689. typedef CHARSETINFO* LPCHARSETINFO;
  690. typedef CHARSETINFO* PCHARSETINFO;
  691. const auto TCI_SRCCHARSET = 1;
  692. const auto TCI_SRCCODEPAGE = 2;
  693. const auto TCI_SRCFONTSIG = 3;
  694. const auto TCI_SRCLOCALE = 0x1000;
  695. struct LOCALESIGNATURE {
  696. DWORD lsUsb[4];
  697. DWORD lsCsbDefault[2];
  698. DWORD lsCsbSupported[2];
  699. }
  700. typedef LOCALESIGNATURE* LPLOCALESIGNATURE;
  701. typedef LOCALESIGNATURE* PLOCALESIGNATURE;
  702. /* Clipboard Metafile Picture Structure */
  703. struct HANDLETABLE {
  704. HGDIOBJ objectHandle[1];
  705. }
  706. typedef HANDLETABLE* PHANDLETABLE;
  707. typedef HANDLETABLE* LPHANDLETABLE;
  708. struct METARECORD {
  709. DWORD rdSize;
  710. WORD rdFunction;
  711. WORD rdParm[1];
  712. }
  713. typedef METARECORD* PMETARECORD;
  714. typedef METARECORD* LPMETARECORD;
  715. struct METAFILEPICT {
  716. LONG mm;
  717. LONG xExt;
  718. LONG yExt;
  719. HMETAFILE hMF;
  720. }
  721. typedef METAFILEPICT* LPMETAFILEPICT;
  722. align(2) struct METAHEADER {
  723. WORD mtType;
  724. WORD mtHeaderSize;
  725. WORD mtVersion;
  726. DWORD mtSize;
  727. WORD mtNoObjects;
  728. DWORD mtMaxRecord;
  729. WORD mtNoParameters;
  730. }
  731. typedef METAHEADER* PMETAHEADER;
  732. typedef METAHEADER* LPMETAHEADER;
  733. /* Enhanced Metafile structures */
  734. struct ENHMETARECORD {
  735. DWORD iType; // Record type EMR_XXX
  736. DWORD nSize; // Record size in bytes
  737. DWORD dParm[1]; // Parameters
  738. }
  739. typedef ENHMETARECORD* PENHMETARECORD;
  740. typedef ENHMETARECORD* LPENHMETARECORD;
  741. struct ENHMETAHEADER {
  742. DWORD iType; // Record typeEMR_HEADER
  743. DWORD nSize; // Record size in bytes. This may be greater
  744. // than the sizeof(ENHMETAHEADER).
  745. RECTL rclBounds; // Inclusive-inclusive bounds in device units
  746. RECTL rclFrame; // Inclusive-inclusive Picture Frame of metafile in .01 mm units
  747. DWORD dSignature; // Signature. Must be ENHMETA_SIGNATURE.
  748. DWORD nVersion; // Version number
  749. DWORD nBytes; // Size of the metafile in bytes
  750. DWORD nRecords; // Number of records in the metafile
  751. WORD nHandles; // Number of handles in the handle table
  752. // Handle index zero is reserved.
  753. WORD sReserved; // Reserved. Must be zero.
  754. DWORD nDescription; // Number of chars in the unicode description string
  755. // This is 0 if there is no description string
  756. DWORD offDescription; // Offset to the metafile description record.
  757. // This is 0 if there is no description string
  758. DWORD nPalEntries; // Number of entries in the metafile palette.
  759. SIZEL szlDevice; // Size of the reference device in pels
  760. SIZEL szlMillimeters; // Size of the reference device in millimeters
  761. DWORD cbPixelFormat; // Size of PIXELFORMATDESCRIPTOR information
  762. // This is 0 if no pixel format is set
  763. DWORD offPixelFormat; // Offset to PIXELFORMATDESCRIPTOR
  764. // This is 0 if no pixel format is set
  765. DWORD bOpenGL; // TRUE if OpenGL commands are present in
  766. // the metafile, otherwise FALSE
  767. SIZEL szlMicrometers; // Size of the reference device in micrometers
  768. }
  769. typedef ENHMETAHEADER* PENHMETAHEADER;
  770. typedef ENHMETAHEADER* LPENHMETAHEADER;
  771. /* tmPitchAndFamily flags */
  772. const auto TMPF_FIXED_PITCH = 0x01;
  773. const auto TMPF_VECTOR = 0x02;
  774. const auto TMPF_DEVICE = 0x08;
  775. const auto TMPF_TRUETYPE = 0x04;
  776. //
  777. // BCHAR definition for APPs
  778. //
  779. version(UNICODE) {
  780. typedef WCHAR BCHAR;
  781. }
  782. else {
  783. typedef BYTE BCHAR;
  784. }
  785. align(4) struct TEXTMETRICA {
  786. LONG tmHeight;
  787. LONG tmAscent;
  788. LONG tmDescent;
  789. LONG tmInternalLeading;
  790. LONG tmExternalLeading;
  791. LONG tmAveCharWidth;
  792. LONG tmMaxCharWidth;
  793. LONG tmWeight;
  794. LONG tmOverhang;
  795. LONG tmDigitizedAspectX;
  796. LONG tmDigitizedAspectY;
  797. BYTE tmFirstChar;
  798. BYTE tmLastChar;
  799. BYTE tmDefaultChar;
  800. BYTE tmBreakChar;
  801. BYTE tmItalic;
  802. BYTE tmUnderlined;
  803. BYTE tmStruckOut;
  804. BYTE tmPitchAndFamily;
  805. BYTE tmCharSet;
  806. }
  807. typedef TEXTMETRICA* PTEXTMETRICA;
  808. typedef TEXTMETRICA* NPTEXTMETRICA;
  809. typedef TEXTMETRICA* LPTEXTMETRICA;
  810. align(4) struct TEXTMETRICW {
  811. LONG tmHeight;
  812. LONG tmAscent;
  813. LONG tmDescent;
  814. LONG tmInternalLeading;
  815. LONG tmExternalLeading;
  816. LONG tmAveCharWidth;
  817. LONG tmMaxCharWidth;
  818. LONG tmWeight;
  819. LONG tmOverhang;
  820. LONG tmDigitizedAspectX;
  821. LONG tmDigitizedAspectY;
  822. WCHAR tmFirstChar;
  823. WCHAR tmLastChar;
  824. WCHAR tmDefaultChar;
  825. WCHAR tmBreakChar;
  826. BYTE tmItalic;
  827. BYTE tmUnderlined;
  828. BYTE tmStruckOut;
  829. BYTE tmPitchAndFamily;
  830. BYTE tmCharSet;
  831. }
  832. typedef TEXTMETRICW* PTEXTMETRICW;
  833. typedef TEXTMETRICW* NPTEXTMETRICW;
  834. typedef TEXTMETRICW* LPTEXTMETRICW;
  835. version(UNICODE) {
  836. typedef TEXTMETRICW TEXTMETRIC;
  837. typedef PTEXTMETRICW PTEXTMETRIC;
  838. typedef NPTEXTMETRICW NPTEXTMETRIC;
  839. typedef LPTEXTMETRICW LPTEXTMETRIC;
  840. }
  841. else {
  842. typedef TEXTMETRICA TEXTMETRIC;
  843. typedef PTEXTMETRICA PTEXTMETRIC;
  844. typedef NPTEXTMETRICA NPTEXTMETRIC;
  845. typedef LPTEXTMETRICA LPTEXTMETRIC;
  846. }
  847. /* ntmFlags field flags */
  848. const auto NTM_REGULAR = 0x00000040;
  849. const auto NTM_BOLD = 0x00000020;
  850. const auto NTM_ITALIC = 0x00000001;
  851. /* new in NT 5.0 */
  852. const auto NTM_NONNEGATIVE_AC = 0x00010000;
  853. const auto NTM_PS_OPENTYPE = 0x00020000;
  854. const auto NTM_TT_OPENTYPE = 0x00040000;
  855. const auto NTM_MULTIPLEMASTER = 0x00080000;
  856. const auto NTM_TYPE1 = 0x00100000;
  857. const auto NTM_DSIG = 0x00200000;
  858. align(4) struct NEWTEXTMETRICA {
  859. LONG tmHeight;
  860. LONG tmAscent;
  861. LONG tmDescent;
  862. LONG tmInternalLeading;
  863. LONG tmExternalLeading;
  864. LONG tmAveCharWidth;
  865. LONG tmMaxCharWidth;
  866. LONG tmWeight;
  867. LONG tmOverhang;
  868. LONG tmDigitizedAspectX;
  869. LONG tmDigitizedAspectY;
  870. BYTE tmFirstChar;
  871. BYTE tmLastChar;
  872. BYTE tmDefaultChar;
  873. BYTE tmBreakChar;
  874. BYTE tmItalic;
  875. BYTE tmUnderlined;
  876. BYTE tmStruckOut;
  877. BYTE tmPitchAndFamily;
  878. BYTE tmCharSet;
  879. DWORD ntmFlags;
  880. UINT ntmSizeEM;
  881. UINT ntmCellHeight;
  882. UINT ntmAvgWidth;
  883. }
  884. typedef NEWTEXTMETRICA* PNEWTEXTMETRICA;
  885. typedef NEWTEXTMETRICA* NPNEWTEXTMETRICA;
  886. typedef NEWTEXTMETRICA* LPNEWTEXTMETRICA;
  887. struct NEWTEXTMETRICW {
  888. LONG tmHeight;
  889. LONG tmAscent;
  890. LONG tmDescent;
  891. LONG tmInternalLeading;
  892. LONG tmExternalLeading;
  893. LONG tmAveCharWidth;
  894. LONG tmMaxCharWidth;
  895. LONG tmWeight;
  896. LONG tmOverhang;
  897. LONG tmDigitizedAspectX;
  898. LONG tmDigitizedAspectY;
  899. WCHAR tmFirstChar;
  900. WCHAR tmLastChar;
  901. WCHAR tmDefaultChar;
  902. WCHAR tmBreakChar;
  903. BYTE tmItalic;
  904. BYTE tmUnderlined;
  905. BYTE tmStruckOut;
  906. BYTE tmPitchAndFamily;
  907. BYTE tmCharSet;
  908. DWORD ntmFlags;
  909. UINT ntmSizeEM;
  910. UINT ntmCellHeight;
  911. UINT ntmAvgWidth;
  912. }
  913. typedef NEWTEXTMETRICW* PNEWTEXTMETRICW;
  914. typedef NEWTEXTMETRICW* NPNEWTEXTMETRICW;
  915. typedef NEWTEXTMETRICW* LPNEWTEXTMETRICW;
  916. version(UNICODE) {
  917. typedef NEWTEXTMETRICW NEWTEXTMETRIC;
  918. typedef PNEWTEXTMETRICW PNEWTEXTMETRIC;
  919. typedef NPNEWTEXTMETRICW NPNEWTEXTMETRIC;
  920. typedef LPNEWTEXTMETRICW LPNEWTEXTMETRIC;
  921. }
  922. else {
  923. typedef NEWTEXTMETRICA NEWTEXTMETRIC;
  924. typedef PNEWTEXTMETRICA PNEWTEXTMETRIC;
  925. typedef NPNEWTEXTMETRICA NPNEWTEXTMETRIC;
  926. typedef LPNEWTEXTMETRICA LPNEWTEXTMETRIC;
  927. }
  928. struct NEWTEXTMETRICEXA {
  929. NEWTEXTMETRICA ntmTm;
  930. FONTSIGNATURE ntmFontSig;
  931. }
  932. struct NEWTEXTMETRICEXW {
  933. NEWTEXTMETRICW ntmTm;
  934. FONTSIGNATURE ntmFontSig;
  935. }
  936. version(UNICODE) {
  937. typedef NEWTEXTMETRICEXW NEWTEXTMETRICEX;
  938. }
  939. else {
  940. typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX;
  941. }
  942. /* GDI Logical Objects: */
  943. /* Pel Array */
  944. struct PELARRAY {
  945. LONG paXCount;
  946. LONG paYCount;
  947. LONG paXExt;
  948. LONG paYExt;
  949. BYTE paRGBs;
  950. }
  951. typedef PELARRAY* PPELARRAY;
  952. typedef PELARRAY* NPPELARRAY;
  953. typedef PELARRAY* LPPELARRAY;
  954. /* Logical Brush (or Pattern) */
  955. struct LOGBRUSH {
  956. UINT lbStyle;
  957. COLORREF lbColor;
  958. ULONG_PTR lbHatch; // Sundown: lbHatch could hold a HANDLE
  959. }
  960. typedef LOGBRUSH* PLOGBRUSH;
  961. typedef LOGBRUSH* NPLOGBRUSH;
  962. typedef LOGBRUSH* LPLOGBRUSH;
  963. struct LOGBRUSH32 {
  964. UINT lbStyle;
  965. COLORREF lbColor;
  966. ULONG lbHatch;
  967. }
  968. typedef LOGBRUSH32* PLOGBRUSH32;
  969. typedef LOGBRUSH32* NPLOGBRUSH32;
  970. typedef LOGBRUSH32* LPLOGBRUSH32;
  971. typedef LOGBRUSH PATTERN;
  972. typedef PATTERN *PPATTERN;
  973. typedef PATTERN *NPPATTERN;
  974. typedef PATTERN *LPPATTERN;
  975. /* Logical Pen */
  976. struct LOGPEN {
  977. UINT lopnStyle;
  978. POINT lopnWidth;
  979. COLORREF lopnColor;
  980. }
  981. typedef LOGPEN* PLOGPEN;
  982. typedef LOGPEN* NPLOGPEN;
  983. typedef LOGPEN* LPLOGPEN;
  984. struct EXTLOGPEN {
  985. DWORD elpPenStyle;
  986. DWORD elpWidth;
  987. UINT elpBrushStyle;
  988. COLORREF elpColor;
  989. ULONG_PTR elpHatch; //Sundown: elpHatch could take a HANDLE
  990. DWORD elpNumEntries;
  991. DWORD[1] elpStyleEntry;
  992. }
  993. typedef EXTLOGPEN* PEXTLOGPEN;
  994. typedef EXTLOGPEN* NPEXTLOGPEN;
  995. typedef EXTLOGPEN* LPEXTLOGPEN;
  996. struct PALETTEENTRY {
  997. BYTE peRed;
  998. BYTE peGreen;
  999. BYTE peBlue;
  1000. BYTE peFlags;
  1001. }
  1002. typedef PALETTEENTRY* PPALETTEENTRY;
  1003. typedef PALETTEENTRY* LPPALETTEENTRY;
  1004. /* Logical Palette */
  1005. struct LOGPALETTE {
  1006. WORD palVersion;
  1007. WORD palNumEntries;
  1008. PALETTEENTRY[1] palPalEntry;
  1009. }
  1010. typedef LOGPALETTE* PLOGPALETTE;
  1011. typedef LOGPALETTE* NPLOGPALETTE;
  1012. typedef LOGPALETTE* LPLOGPALETTE;
  1013. /* Logical Font */
  1014. const auto LF_FACESIZE = 32;
  1015. struct LOGFONTA {
  1016. LONG lfHeight;
  1017. LONG lfWidth;
  1018. LONG lfEscapement;
  1019. LONG lfOrientation;
  1020. LONG lfWeight;
  1021. BYTE lfItalic;
  1022. BYTE lfUnderline;
  1023. BYTE lfStrikeOut;
  1024. BYTE lfCharSet;
  1025. BYTE lfOutPrecision;
  1026. BYTE lfClipPrecision;
  1027. BYTE lfQuality;
  1028. BYTE lfPitchAndFamily;
  1029. CHAR lfFaceName[LF_FACESIZE];
  1030. }
  1031. typedef LOGFONTA* PLOGFONTA;
  1032. typedef LOGFONTA* NPLOGFONTA;
  1033. typedef LOGFONTA* LPLOGFONTA;
  1034. struct LOGFONTW {
  1035. LONG lfHeight;
  1036. LONG lfWidth;
  1037. LONG lfEscapement;
  1038. LONG lfOrientation;
  1039. LONG lfWeight;
  1040. BYTE lfItalic;
  1041. BYTE lfUnderline;
  1042. BYTE lfStrikeOut;
  1043. BYTE lfCharSet;
  1044. BYTE lfOutPrecision;
  1045. BYTE lfClipPrecision;
  1046. BYTE lfQuality;
  1047. BYTE lfPitchAndFamily;
  1048. WCHAR lfFaceName[LF_FACESIZE];
  1049. }
  1050. typedef LOGFONTW* PLOGFONTW;
  1051. typedef LOGFONTW* NPLOGFONTW;
  1052. typedef LOGFONTW* LPLOGFONTW;
  1053. version(UNICODE) {
  1054. typedef LOGFONTW LOGFONT;
  1055. typedef PLOGFONTW PLOGFONT;
  1056. typedef NPLOGFONTW NPLOGFONT;
  1057. typedef LPLOGFONTW LPLOGFONT;
  1058. }
  1059. else {
  1060. typedef LOGFONTA LOGFONT;
  1061. typedef PLOGFONTA PLOGFONT;
  1062. typedef NPLOGFONTA NPLOGFONT;
  1063. typedef LPLOGFONTA LPLOGFONT;
  1064. }
  1065. const auto LF_FULLFACESIZE = 64;
  1066. /* Structure passed to FONTENUMPROC */
  1067. struct ENUMLOGFONTA {
  1068. LOGFONTA elfLogFont;
  1069. BYTE elfFullName[LF_FULLFACESIZE];
  1070. BYTE elfStyle[LF_FACESIZE];
  1071. }
  1072. typedef ENUMLOGFONTA* LPENUMLOGFONTA;
  1073. /* Structure passed to FONTENUMPROC */
  1074. struct ENUMLOGFONTW {
  1075. LOGFONTW elfLogFont;
  1076. WCHAR[LF_FULLFACESIZE] elfFullName;
  1077. WCHAR[LF_FACESIZE] elfStyle;
  1078. }
  1079. typedef ENUMLOGFONTW* LPENUMLOGFONTW;
  1080. version(UNICODE) {
  1081. typedef ENUMLOGFONTW ENUMLOGFONT;
  1082. typedef LPENUMLOGFONTW LPENUMLOGFONT;
  1083. }
  1084. else {
  1085. typedef ENUMLOGFONTA ENUMLOGFONT;
  1086. typedef LPENUMLOGFONTA LPENUMLOGFONT;
  1087. }
  1088. struct ENUMLOGFONTEXA {
  1089. LOGFONTA elfLogFont;
  1090. BYTE elfFullName[LF_FULLFACESIZE];
  1091. BYTE elfStyle[LF_FACESIZE];
  1092. BYTE elfScript[LF_FACESIZE];
  1093. }
  1094. typedef ENUMLOGFONTEXA* LPENUMLOGFONTEXA;
  1095. struct ENUMLOGFONTEXW {
  1096. LOGFONTW elfLogFont;
  1097. WCHAR[LF_FULLFACESIZE] elfFullName;
  1098. WCHAR[LF_FACESIZE] elfStyle;
  1099. WCHAR[LF_FACESIZE] elfScript;
  1100. }
  1101. typedef ENUMLOGFONTEXW* LPENUMLOGFONTEXW;
  1102. version(UNICODE) {
  1103. typedef ENUMLOGFONTEXW ENUMLOGFONTEX;
  1104. typedef LPENUMLOGFONTEXW LPENUMLOGFONTEX;
  1105. }
  1106. else {
  1107. typedef ENUMLOGFONTEXA ENUMLOGFONTEX;
  1108. typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX;
  1109. }
  1110. const auto OUT_DEFAULT_PRECIS = 0;
  1111. const auto OUT_STRING_PRECIS = 1;
  1112. const auto OUT_CHARACTER_PRECIS = 2;
  1113. const auto OUT_STROKE_PRECIS = 3;
  1114. const auto OUT_TT_PRECIS = 4;
  1115. const auto OUT_DEVICE_PRECIS = 5;
  1116. const auto OUT_RASTER_PRECIS = 6;
  1117. const auto OUT_TT_ONLY_PRECIS = 7;
  1118. const auto OUT_OUTLINE_PRECIS = 8;
  1119. const auto OUT_SCREEN_OUTLINE_PRECIS = 9;
  1120. const auto OUT_PS_ONLY_PRECIS = 10;
  1121. const auto CLIP_DEFAULT_PRECIS = 0;
  1122. const auto CLIP_CHARACTER_PRECIS = 1;
  1123. const auto CLIP_STROKE_PRECIS = 2;
  1124. const auto CLIP_MASK = 0xf;
  1125. const auto CLIP_LH_ANGLES = (1<<4);
  1126. const auto CLIP_TT_ALWAYS = (2<<4);
  1127. const auto CLIP_DFA_DISABLE = (4<<4);
  1128. const auto CLIP_EMBEDDED = (8<<4);
  1129. const auto DEFAULT_QUALITY = 0;
  1130. const auto DRAFT_QUALITY = 1;
  1131. const auto PROOF_QUALITY = 2;
  1132. const auto NONANTIALIASED_QUALITY = 3;
  1133. const auto ANTIALIASED_QUALITY = 4;
  1134. const auto CLEARTYPE_QUALITY = 5;
  1135. const auto CLEARTYPE_NATURAL_QUALITY = 6;
  1136. const auto DEFAULT_PITCH = 0;
  1137. const auto FIXED_PITCH = 1;
  1138. const auto VARIABLE_PITCH = 2;
  1139. const auto MONO_FONT = 8;
  1140. const auto ANSI_CHARSET = 0;
  1141. const auto DEFAULT_CHARSET = 1;
  1142. const auto SYMBOL_CHARSET = 2;
  1143. const auto SHIFTJIS_CHARSET = 128;
  1144. const auto HANGEUL_CHARSET = 129;
  1145. const auto HANGUL_CHARSET = 129;
  1146. const auto GB2312_CHARSET = 134;
  1147. const auto CHINESEBIG5_CHARSET = 136;
  1148. const auto OEM_CHARSET = 255;
  1149. const auto JOHAB_CHARSET = 130;
  1150. const auto HEBREW_CHARSET = 177;
  1151. const auto ARABIC_CHARSET = 178;
  1152. const auto GREEK_CHARSET = 161;
  1153. const auto TURKISH_CHARSET = 162;
  1154. const auto VIETNAMESE_CHARSET = 163;
  1155. const auto THAI_CHARSET = 222;
  1156. const auto EASTEUROPE_CHARSET = 238;
  1157. const auto RUSSIAN_CHARSET = 204;
  1158. const auto MAC_CHARSET = 77;
  1159. const auto BALTIC_CHARSET = 186;
  1160. const auto FS_LATIN1 = 0x00000001;
  1161. const auto FS_LATIN2 = 0x00000002;
  1162. const auto FS_CYRILLIC = 0x00000004;
  1163. const auto FS_GREEK = 0x00000008;
  1164. const auto FS_TURKISH = 0x00000010;
  1165. const auto FS_HEBREW = 0x00000020;
  1166. const auto FS_ARABIC = 0x00000040;
  1167. const auto FS_BALTIC = 0x00000080;
  1168. const auto FS_VIETNAMESE = 0x00000100;
  1169. const auto FS_THAI = 0x00010000;
  1170. const auto FS_JISJAPAN = 0x00020000;
  1171. const auto FS_CHINESESIMP = 0x00040000;
  1172. const auto FS_WANSUNG = 0x00080000;
  1173. const auto FS_CHINESETRAD = 0x00100000;
  1174. const auto FS_JOHAB = 0x00200000;
  1175. const auto FS_SYMBOL = 0x80000000;
  1176. /* Font Families */
  1177. const auto FF_DONTCARE = (0<<4); /* Don't care or don't know. */
  1178. const auto FF_ROMAN = (1<<4); /* Variable stroke width, serifed. */
  1179. /* Times Roman, Century Schoolbook, etc. */
  1180. const auto FF_SWISS = (2<<4); /* Variable stroke width, sans-serifed. */
  1181. /* Helvetica, Swiss, etc. */
  1182. const auto FF_MODERN = (3<<4); /* Constant stroke width, serifed or sans-serifed. */
  1183. /* Pica, Elite, Courier, etc. */
  1184. const auto FF_SCRIPT = (4<<4); /* Cursive, etc. */
  1185. const auto FF_DECORATIVE = (5<<4); /* Old English, etc. */
  1186. /* Font Weights */
  1187. const auto FW_DONTCARE = 0;
  1188. const auto FW_THIN = 100;
  1189. const auto FW_EXTRALIGHT = 200;
  1190. const auto FW_LIGHT = 300;
  1191. const auto FW_NORMAL = 400;
  1192. const auto FW_MEDIUM = 500;
  1193. const auto FW_SEMIBOLD = 600;
  1194. const auto FW_BOLD = 700;
  1195. const auto FW_EXTRABOLD = 800;
  1196. const auto FW_HEAVY = 900;
  1197. const auto FW_ULTRALIGHT = FW_EXTRALIGHT;
  1198. const auto FW_REGULAR = FW_NORMAL;
  1199. const auto FW_DEMIBOLD = FW_SEMIBOLD;
  1200. const auto FW_ULTRABOLD = FW_EXTRABOLD;
  1201. const auto FW_BLACK = FW_HEAVY;
  1202. const auto PANOSE_COUNT = 10;
  1203. const auto PAN_FAMILYTYPE_INDEX = 0;
  1204. const auto PAN_SERIFSTYLE_INDEX = 1;
  1205. const auto PAN_WEIGHT_INDEX = 2;
  1206. const auto PAN_PROPORTION_INDEX = 3;
  1207. const auto PAN_CONTRAST_INDEX = 4;
  1208. const auto PAN_STROKEVARIATION_INDEX = 5;
  1209. const auto PAN_ARMSTYLE_INDEX = 6;
  1210. const auto PAN_LETTERFORM_INDEX = 7;
  1211. const auto PAN_MIDLINE_INDEX = 8;
  1212. const auto PAN_XHEIGHT_INDEX = 9;
  1213. const auto PAN_CULTURE_LATIN = 0;
  1214. struct PANOSE {
  1215. BYTE bFamilyType;
  1216. BYTE bSerifStyle;
  1217. BYTE bWeight;
  1218. BYTE bProportion;
  1219. BYTE bContrast;
  1220. BYTE bStrokeVariation;
  1221. BYTE bArmStyle;
  1222. BYTE bLetterform;
  1223. BYTE bMidline;
  1224. BYTE bXHeight;
  1225. }
  1226. typedef PANOSE* LPPANOSE;
  1227. const auto PAN_ANY = 0; /* Any */
  1228. const auto PAN_NO_FIT = 1; /* No Fit */
  1229. const auto PAN_FAMILY_TEXT_DISPLAY = 2; /* Text and Display */
  1230. const auto PAN_FAMILY_SCRIPT = 3; /* Script */
  1231. const auto PAN_FAMILY_DECORATIVE = 4; /* Decorative */
  1232. const auto PAN_FAMILY_PICTORIAL = 5; /* Pictorial */
  1233. const auto PAN_SERIF_COVE = 2; /* Cove */
  1234. const auto PAN_SERIF_OBTUSE_COVE = 3; /* Obtuse Cove */
  1235. const auto PAN_SERIF_SQUARE_COVE = 4; /* Square Cove */
  1236. const auto PAN_SERIF_OBTUSE_SQUARE_COVE = 5; /* Obtuse Square Cove */
  1237. const auto PAN_SERIF_SQUARE = 6; /* Square */
  1238. const auto PAN_SERIF_THIN = 7; /* Thin */
  1239. const auto PAN_SERIF_BONE = 8; /* Bone */
  1240. const auto PAN_SERIF_EXAGGERATED = 9; /* Exaggerated */
  1241. const auto PAN_SERIF_TRIANGLE = 10; /* Triangle */
  1242. const auto PAN_SERIF_NORMAL_SANS = 11; /* Normal Sans */
  1243. const auto PAN_SERIF_OBTUSE_SANS = 12; /* Obtuse Sans */
  1244. const auto PAN_SERIF_PERP_SANS = 13; /* Prep Sans */
  1245. const auto PAN_SERIF_FLARED = 14; /* Flared */
  1246. const auto PAN_SERIF_ROUNDED = 15; /* Rounded */
  1247. const auto PAN_WEIGHT_VERY_LIGHT = 2; /* Very Light */
  1248. const auto PAN_WEIGHT_LIGHT = 3; /* Light */
  1249. const auto PAN_WEIGHT_THIN = 4; /* Thin */
  1250. const auto PAN_WEIGHT_BOOK = 5; /* Book */
  1251. const auto PAN_WEIGHT_MEDIUM = 6; /* Medium */
  1252. const auto PAN_WEIGHT_DEMI = 7; /* Demi */
  1253. const auto PAN_WEIGHT_BOLD = 8; /* Bold */
  1254. const auto PAN_WEIGHT_HEAVY = 9; /* Heavy */
  1255. const auto PAN_WEIGHT_BLACK = 10; /* Black */
  1256. const auto PAN_WEIGHT_NORD = 11; /* Nord */
  1257. const auto PAN_PROP_OLD_STYLE = 2; /* Old Style */
  1258. const auto PAN_PROP_MODERN = 3; /* Modern */
  1259. const auto PAN_PROP_EVEN_WIDTH = 4; /* Even Width */
  1260. const auto PAN_PROP_EXPANDED = 5; /* Expanded */
  1261. const auto PAN_PROP_CONDENSED = 6; /* Condensed */
  1262. const auto PAN_PROP_VERY_EXPANDED = 7; /* Very Expanded */
  1263. const auto PAN_PROP_VERY_CONDENSED = 8; /* Very Condensed */
  1264. const auto PAN_PROP_MONOSPACED = 9; /* Monospaced */
  1265. const auto PAN_CONTRAST_NONE = 2; /* None */
  1266. const auto PAN_CONTRAST_VERY_LOW = 3; /* Very Low */
  1267. const auto PAN_CONTRAST_LOW = 4; /* Low */
  1268. const auto PAN_CONTRAST_MEDIUM_LOW = 5; /* Medium Low */
  1269. const auto PAN_CONTRAST_MEDIUM = 6; /* Medium */
  1270. const auto PAN_CONTRAST_MEDIUM_HIGH = 7; /* Mediim High */
  1271. const auto PAN_CONTRAST_HIGH = 8; /* High */
  1272. const auto PAN_CONTRAST_VERY_HIGH = 9; /* Very High */
  1273. const auto PAN_STROKE_GRADUAL_DIAG = 2; /* Gradual/Diagonal */
  1274. const auto PAN_STROKE_GRADUAL_TRAN = 3; /* Gradual/Transitional */
  1275. const auto PAN_STROKE_GRADUAL_VERT = 4; /* Gradual/Vertical */
  1276. const auto PAN_STROKE_GRADUAL_HORZ = 5; /* Gradual/Horizontal */
  1277. const auto PAN_STROKE_RAPID_VERT = 6; /* Rapid/Vertical */
  1278. const auto PAN_STROKE_RAPID_HORZ = 7; /* Rapid/Horizontal */
  1279. const auto PAN_STROKE_INSTANT_VERT = 8; /* Instant/Vertical */
  1280. const auto PAN_STRAIGHT_ARMS_HORZ = 2; /* Straight Arms/Horizontal */
  1281. const auto PAN_STRAIGHT_ARMS_WEDGE = 3; /* Straight Arms/Wedge */
  1282. const auto PAN_STRAIGHT_ARMS_VERT = 4; /* Straight Arms/Vertical */
  1283. const auto PAN_STRAIGHT_ARMS_SINGLE_SERIF = 5; /* Straight Arms/Single-Serif */
  1284. const auto PAN_STRAIGHT_ARMS_DOUBLE_SERIF = 6; /* Straight Arms/Double-Serif */
  1285. const auto PAN_BENT_ARMS_HORZ = 7; /* Non-Straight Arms/Horizontal */
  1286. const auto PAN_BENT_ARMS_WEDGE = 8; /* Non-Straight Arms/Wedge */
  1287. const auto PAN_BENT_ARMS_VERT = 9; /* Non-Straight Arms/Vertical */
  1288. const auto PAN_BENT_ARMS_SINGLE_SERIF = 10; /* Non-Straight Arms/Single-Serif */
  1289. const auto PAN_BENT_ARMS_DOUBLE_SERIF = 11; /* Non-Straight Arms/Double-Serif */
  1290. const auto PA