Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2539 lines
56 KiB

4 years ago
  1. /*++
  2. Copyright (c) 1985-1995, Microsoft Corporation
  3. Module Name:
  4. winddi.h
  5. Abstract:
  6. Private entry points, defines and types for Windows NT GDI device
  7. driver interface.
  8. --*/
  9. #ifndef _WINDDI_
  10. #define _WINDDI_
  11. #include <ddrawint.h>
  12. //
  13. // drivers and other components that include this should NOT include
  14. // windows.h They should be system conponents that only use GDI internals
  15. // and therefore only include wingdi.h
  16. //
  17. typedef ptrdiff_t PTRDIFF;
  18. typedef PTRDIFF *PPTRDIFF;
  19. typedef LONG FIX;
  20. typedef FIX *PFIX;
  21. typedef ULONG ROP4;
  22. typedef ULONG MIX;
  23. typedef ULONG HGLYPH;
  24. typedef HGLYPH *PHGLYPH;
  25. #define HGLYPH_INVALID ((HGLYPH)-1)
  26. typedef ULONG IDENT;
  27. //
  28. // handles for font file and font context objects
  29. //
  30. typedef ULONG HFF;
  31. typedef ULONG HFC;
  32. #define HFF_INVALID ((HFF) 0)
  33. #define HFC_INVALID ((HFC) 0)
  34. #define FD_ERROR 0xFFFFFFFF
  35. #define DDI_ERROR 0xFFFFFFFF
  36. typedef struct _POINTE /* pte */
  37. {
  38. FLOAT x;
  39. FLOAT y;
  40. } POINTE, *PPOINTE;
  41. typedef union _FLOAT_LONG
  42. {
  43. FLOAT e;
  44. LONG l;
  45. } FLOAT_LONG, *PFLOAT_LONG;
  46. typedef struct _POINTFIX
  47. {
  48. FIX x;
  49. FIX y;
  50. } POINTFIX, *PPOINTFIX;
  51. typedef struct _RECTFX
  52. {
  53. FIX xLeft;
  54. FIX yTop;
  55. FIX xRight;
  56. FIX yBottom;
  57. } RECTFX, *PRECTFX;
  58. DECLARE_HANDLE(HBM);
  59. DECLARE_HANDLE(HDEV);
  60. DECLARE_HANDLE(HSURF);
  61. DECLARE_HANDLE(DHSURF);
  62. DECLARE_HANDLE(DHPDEV);
  63. DECLARE_HANDLE(HDRVOBJ);
  64. #define LTOFX(x) ((x)<<4)
  65. #define FXTOL(x) ((x)>>4)
  66. #define FXTOLFLOOR(x) ((x)>>4)
  67. #define FXTOLCEILING(x) ((x + 0x0F)>>4)
  68. #define FXTOLROUND(x) ((((x) >> 3) + 1) >> 1)
  69. // context information
  70. typedef struct _FD_XFORM {
  71. FLOAT eXX;
  72. FLOAT eXY;
  73. FLOAT eYX;
  74. FLOAT eYY;
  75. } FD_XFORM, *PFD_XFORM;
  76. typedef struct _FD_DEVICEMETRICS { // devm
  77. FLONG flRealizedType;
  78. POINTE pteBase;
  79. POINTE pteSide;
  80. LONG lD;
  81. FIX fxMaxAscender;
  82. FIX fxMaxDescender;
  83. POINTL ptlUnderline1;
  84. POINTL ptlStrikeOut;
  85. POINTL ptlULThickness;
  86. POINTL ptlSOThickness;
  87. ULONG cxMax; // max pel width of bitmaps
  88. // the fields formerly in REALIZE_EXTRA as well as some new fields:
  89. ULONG cyMax; // did not use to be here
  90. ULONG cjGlyphMax; // (cxMax + 7)/8 * cyMax, or at least it should be
  91. FD_XFORM fdxQuantized;
  92. LONG lNonLinearExtLeading;
  93. LONG lNonLinearIntLeading;
  94. LONG lNonLinearMaxCharWidth;
  95. LONG lNonLinearAvgCharWidth;
  96. // some new fields
  97. LONG lMinA;
  98. LONG lMinC;
  99. LONG lMinD;
  100. LONG alReserved[1]; // just in case we need it.
  101. } FD_DEVICEMETRICS, *PFD_DEVICEMETRICS;
  102. typedef struct _LIGATURE { /* lig */
  103. ULONG culSize;
  104. LPWSTR pwsz;
  105. ULONG chglyph;
  106. HGLYPH ahglyph[1];
  107. } LIGATURE, *PLIGATURE;
  108. typedef struct _FD_LIGATURE {
  109. ULONG culThis;
  110. ULONG ulType;
  111. ULONG cLigatures;
  112. LIGATURE alig[1];
  113. } FD_LIGATURE;
  114. // glyph handle must be 32 bit
  115. // signed 16 bit integer type denoting number of FUnit's
  116. typedef SHORT FWORD;
  117. // point in the 32.32 bit precission
  118. typedef struct _POINTQF // ptq
  119. {
  120. LARGE_INTEGER x;
  121. LARGE_INTEGER y;
  122. } POINTQF, *PPOINTQF;
  123. //. Structures
  124. // devm.flRealizedType flags
  125. // FDM_TYPE_ZERO_BEARINGS // all glyphs have zero a and c spaces
  126. // the following two features refer to all glyphs in this font realization
  127. // FDM_TYPE_CHAR_INC_EQUAL_BM_BASE // base width == cx for horiz, == cy for vert.
  128. // FDM_TYPE_MAXEXT_EQUAL_BM_SIDE // side width == cy for horiz, == cx for vert.
  129. #define FDM_TYPE_BM_SIDE_CONST 0x00000001
  130. #define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE 0x00000002
  131. #define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE 0x00000004
  132. #define FDM_TYPE_ZERO_BEARINGS 0x00000008
  133. #define FDM_TYPE_CONST_BEARINGS 0x00000010
  134. // structures for describing a supported set of glyphs in a font
  135. typedef struct _WCRUN {
  136. WCHAR wcLow; // lowest character in run inclusive
  137. USHORT cGlyphs; // wcHighInclusive = wcLow + cGlyphs - 1;
  138. HGLYPH *phg; // pointer to an array of cGlyphs HGLYPH's
  139. } WCRUN, *PWCRUN;
  140. // If phg is set to (HGLYPH *)NULL, for all wc's in this particular run
  141. // the handle can be computed as simple zero extension:
  142. // HGLYPH hg = (HGLYPH) wc;
  143. //
  144. // If phg is not NULL, memory pointed to by phg, allocated by the driver,
  145. // WILL NOT MOVE.
  146. typedef struct _FD_GLYPHSET {
  147. ULONG cjThis; // size of this structure in butes
  148. FLONG flAccel; // accel flags, bits to be explained below
  149. ULONG cGlyphsSupported; // sum over all wcrun's of wcrun.cGlyphs
  150. ULONG cRuns;
  151. WCRUN awcrun[1]; // an array of cRun WCRUN structures
  152. } FD_GLYPHSET, *PFD_GLYPHSET;
  153. // If GS_UNICODE_HANDLES bit is set,
  154. // for ALL WCRUNS in this FD_GLYPHSET the handles are
  155. // obtained by zero extending unicode code points of
  156. // the corresponding supported glyphs, i.e. all gs.phg's are NULL
  157. #define GS_UNICODE_HANDLES 0x00000001
  158. // If GS_8BIT_HANDLES bit is set, all handles are in 0-255 range.
  159. // This is just an ansi font then and we are really making up all
  160. // the unicode stuff about this font.
  161. #define GS_8BIT_HANDLES 0x00000002
  162. // all handles fit in 16 bits.
  163. // to 8 bit handles as it should.
  164. #define GS_16BIT_HANDLES 0x00000004
  165. // ligatures
  166. typedef struct _FD_KERNINGPAIR {
  167. WCHAR wcFirst;
  168. WCHAR wcSecond;
  169. FWORD fwdKern;
  170. } FD_KERNINGPAIR;
  171. // IFIMETRICS constants
  172. #define FM_VERSION_NUMBER 0x0
  173. //
  174. // IFIMETRICS::fsType flags
  175. //
  176. #define FM_TYPE_LICENSED 0x2
  177. #define FM_READONLY_EMBED 0x4
  178. #define FM_EDITABLE_EMBED 0x8
  179. #define FM_NO_EMBEDDING FM_TYPE_LICENSED
  180. //
  181. // IFIMETRICS::flInfo flags
  182. //
  183. #define FM_INFO_TECH_TRUETYPE 0x00000001
  184. #define FM_INFO_TECH_BITMAP 0x00000002
  185. #define FM_INFO_TECH_STROKE 0x00000004
  186. #define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008
  187. #define FM_INFO_ARB_XFORMS 0x00000010
  188. #define FM_INFO_1BPP 0x00000020
  189. #define FM_INFO_4BPP 0x00000040
  190. #define FM_INFO_8BPP 0x00000080
  191. #define FM_INFO_16BPP 0x00000100
  192. #define FM_INFO_24BPP 0x00000200
  193. #define FM_INFO_32BPP 0x00000400
  194. #define FM_INFO_INTEGER_WIDTH 0x00000800
  195. #define FM_INFO_CONSTANT_WIDTH 0x00001000
  196. #define FM_INFO_NOT_CONTIGUOUS 0x00002000
  197. #define FM_INFO_PID_EMBEDDED 0x00004000
  198. #define FM_INFO_RETURNS_OUTLINES 0x00008000
  199. #define FM_INFO_RETURNS_STROKES 0x00010000
  200. #define FM_INFO_RETURNS_BITMAPS 0x00020000
  201. #define FM_INFO_UNICODE_COMPLIANT 0x00040000
  202. #define FM_INFO_RIGHT_HANDED 0x00080000
  203. #define FM_INFO_INTEGRAL_SCALING 0x00100000
  204. #define FM_INFO_90DEGREE_ROTATIONS 0x00200000
  205. #define FM_INFO_OPTICALLY_FIXED_PITCH 0x00400000
  206. #define FM_INFO_DO_NOT_ENUMERATE 0x00800000
  207. #define FM_INFO_ISOTROPIC_SCALING_ONLY 0x01000000
  208. #define FM_INFO_ANISOTROPIC_SCALING_ONLY 0x02000000
  209. #define FM_INFO_TID_EMBEDDED 0x04000000
  210. #define FM_INFO_FAMILY_EQUIV 0x08000000
  211. #define FM_INFO_DBCS_FIXED_PITCH 0x10000000
  212. #define FM_INFO_NONNEGATIVE_AC 0x20000000
  213. #define FM_INFO_IGNORE_TC_RA_ABLE 0x40000000
  214. #define FM_INFO_TECH_TYPE1 0x80000000
  215. // max number of charsets supported in a tt font, 16 according to win95 guys
  216. #define MAXCHARSETS 16
  217. //
  218. // IFIMETRICS::ulPanoseCulture
  219. //
  220. #define FM_PANOSE_CULTURE_LATIN 0x0
  221. //
  222. // IFMETRICS::fsSelection flags
  223. //
  224. #define FM_SEL_ITALIC 0x0001
  225. #define FM_SEL_UNDERSCORE 0x0002
  226. #define FM_SEL_NEGATIVE 0x0004
  227. #define FM_SEL_OUTLINED 0x0008
  228. #define FM_SEL_STRIKEOUT 0x0010
  229. #define FM_SEL_BOLD 0x0020
  230. #define FM_SEL_REGULAR 0x0040
  231. //
  232. // The FONTDIFF structure contains all of the fields that could
  233. // possibly change under simulation
  234. //
  235. typedef struct _FONTDIFF {
  236. BYTE jReserved1; // 0x0
  237. BYTE jReserved2; // 0x1
  238. BYTE jReserved3; // 0x2
  239. BYTE bWeight; // 0x3 Panose Weight
  240. USHORT usWinWeight; // 0x4
  241. FSHORT fsSelection; // 0x6
  242. FWORD fwdAveCharWidth; // 0x8
  243. FWORD fwdMaxCharInc; // 0xA
  244. POINTL ptlCaret; // 0xC
  245. } FONTDIFF;
  246. typedef struct _FONTSIM {
  247. PTRDIFF dpBold; // offset from beginning of FONTSIM to FONTDIFF
  248. PTRDIFF dpItalic; // offset from beginning of FONTSIM to FONTDIFF
  249. PTRDIFF dpBoldItalic; // offset from beginning of FONTSIM to FONTDIFF
  250. } FONTSIM;
  251. typedef struct _IFIMETRICS {
  252. ULONG cjThis; // includes attached information
  253. ULONG cjIfiExtra; // sizeof IFIEXTRA if any, formerly ulVersion
  254. PTRDIFF dpwszFamilyName;
  255. PTRDIFF dpwszStyleName;
  256. PTRDIFF dpwszFaceName;
  257. PTRDIFF dpwszUniqueName;
  258. PTRDIFF dpFontSim;
  259. LONG lEmbedId;
  260. LONG lItalicAngle;
  261. LONG lCharBias;
  262. // dpCharSet field replaced alReserved[0].
  263. // If the 3.51 pcl minidrivers are still to work on NT 4.0 this field must not
  264. // move because they will have 0 at this position.
  265. PTRDIFF dpCharSets;
  266. BYTE jWinCharSet; // as in LOGFONT::lfCharSet
  267. BYTE jWinPitchAndFamily; // as in LOGFONT::lfPitchAndFamily
  268. USHORT usWinWeight; // as in LOGFONT::lfWeight
  269. ULONG flInfo; // see above
  270. USHORT fsSelection; // see above
  271. USHORT fsType; // see above
  272. FWORD fwdUnitsPerEm; // em height
  273. FWORD fwdLowestPPEm; // readable limit
  274. FWORD fwdWinAscender;
  275. FWORD fwdWinDescender;
  276. FWORD fwdMacAscender;
  277. FWORD fwdMacDescender;
  278. FWORD fwdMacLineGap;
  279. FWORD fwdTypoAscender;
  280. FWORD fwdTypoDescender;
  281. FWORD fwdTypoLineGap;
  282. FWORD fwdAveCharWidth;
  283. FWORD fwdMaxCharInc;
  284. FWORD fwdCapHeight;
  285. FWORD fwdXHeight;
  286. FWORD fwdSubscriptXSize;
  287. FWORD fwdSubscriptYSize;
  288. FWORD fwdSubscriptXOffset;
  289. FWORD fwdSubscriptYOffset;
  290. FWORD fwdSuperscriptXSize;
  291. FWORD fwdSuperscriptYSize;
  292. FWORD fwdSuperscriptXOffset;
  293. FWORD fwdSuperscriptYOffset;
  294. FWORD fwdUnderscoreSize;
  295. FWORD fwdUnderscorePosition;
  296. FWORD fwdStrikeoutSize;
  297. FWORD fwdStrikeoutPosition;
  298. BYTE chFirstChar; // for win 3.1 compatibility
  299. BYTE chLastChar; // for win 3.1 compatibility
  300. BYTE chDefaultChar; // for win 3.1 compatibility
  301. BYTE chBreakChar; // for win 3.1 compatibility
  302. WCHAR wcFirstChar; // lowest supported code in Unicode set
  303. WCHAR wcLastChar; // highest supported code in Unicode set
  304. WCHAR wcDefaultChar;
  305. WCHAR wcBreakChar;
  306. POINTL ptlBaseline; //
  307. POINTL ptlAspect; // designed aspect ratio (bitmaps)
  308. POINTL ptlCaret; // points along caret
  309. RECTL rclFontBox; // bounding box for all glyphs (font space)
  310. BYTE achVendId[4]; // as per TrueType
  311. ULONG cKerningPairs;
  312. ULONG ulPanoseCulture;
  313. PANOSE panose;
  314. } IFIMETRICS, *PIFIMETRICS;
  315. // rather than adding the fields of IFIEXTRA to IFIMETRICS itself
  316. // we add them as a separate structure. This structure, if present at all,
  317. // lies below IFIMETRICS in memory.
  318. // If IFIEXTRA is present at all, ifi.cjIfiExtra (formerly ulVersion)
  319. // will contain size of IFIEXTRA including any reserved fields.
  320. // That way ulVersion = 0 (NT 3.51 or less) printer minidrivers
  321. // will work with NT 4.0.
  322. typedef struct _IFIEXTRA
  323. {
  324. ULONG ulIdentifier; // used for Type 1 fonts only
  325. PTRDIFF dpFontSig; // nontrivial for tt only, at least for now.
  326. ULONG cig; // maxp->numGlyphs, # of distinct glyph indicies
  327. ULONG aulReserved[1]; // in case we need even more stuff in the future
  328. } IFIEXTRA, *PIFIEXTRA;
  329. /**************************************************************************\
  330. *
  331. \**************************************************************************/
  332. /* OpenGL DDI ExtEscape escape numbers (4352 - 4607) */
  333. #define OPENGL_CMD 4352 /* for OpenGL ExtEscape */
  334. #define OPENGL_GETINFO 4353 /* for OpenGL ExtEscape */
  335. #define WNDOBJ_SETUP 4354 /* for live video ExtEscape */
  336. #define DDI_DRIVER_VERSION 0x00020000
  337. #define GDI_DRIVER_VERSION 0x4000 /* for NT version 4.0.00 */
  338. typedef int (*PFN)();
  339. typedef struct _DRVFN /* drvfn */
  340. {
  341. ULONG iFunc;
  342. PFN pfn;
  343. } DRVFN, *PDRVFN;
  344. /* Required functions */
  345. #define INDEX_DrvEnablePDEV 0L
  346. #define INDEX_DrvCompletePDEV 1L
  347. #define INDEX_DrvDisablePDEV 2L
  348. #define INDEX_DrvEnableSurface 3L
  349. #define INDEX_DrvDisableSurface 4L
  350. /* Other functions */
  351. #define INDEX_DrvAssertMode 5L
  352. #define INDEX_DrvResetPDEV 7L
  353. #define INDEX_DrvCreateDeviceBitmap 10L
  354. #define INDEX_DrvDeleteDeviceBitmap 11L
  355. #define INDEX_DrvRealizeBrush 12L
  356. #define INDEX_DrvDitherColor 13L
  357. #define INDEX_DrvStrokePath 14L
  358. #define INDEX_DrvFillPath 15L
  359. #define INDEX_DrvStrokeAndFillPath 16L
  360. #define INDEX_DrvPaint 17L
  361. #define INDEX_DrvBitBlt 18L
  362. #define INDEX_DrvCopyBits 19L
  363. #define INDEX_DrvStretchBlt 20L
  364. #define INDEX_DrvSetPalette 22L
  365. #define INDEX_DrvTextOut 23L
  366. #define INDEX_DrvEscape 24L
  367. #define INDEX_DrvDrawEscape 25L
  368. #define INDEX_DrvQueryFont 26L
  369. #define INDEX_DrvQueryFontTree 27L
  370. #define INDEX_DrvQueryFontData 28L
  371. #define INDEX_DrvSetPointerShape 29L
  372. #define INDEX_DrvMovePointer 30L
  373. #define INDEX_DrvLineTo 31L
  374. #define INDEX_DrvSendPage 32L
  375. #define INDEX_DrvStartPage 33L
  376. #define INDEX_DrvEndDoc 34L
  377. #define INDEX_DrvStartDoc 35L
  378. #define INDEX_DrvGetGlyphMode 37L
  379. #define INDEX_DrvSynchronize 38L
  380. #define INDEX_DrvSaveScreenBits 40L
  381. #define INDEX_DrvGetModes 41L
  382. #define INDEX_DrvFree 42L
  383. #define INDEX_DrvDestroyFont 43L
  384. #define INDEX_DrvQueryFontCaps 44L
  385. #define INDEX_DrvLoadFontFile 45L
  386. #define INDEX_DrvUnloadFontFile 46L
  387. #define INDEX_DrvFontManagement 47L
  388. #define INDEX_DrvQueryTrueTypeTable 48L
  389. #define INDEX_DrvQueryTrueTypeOutline 49L
  390. #define INDEX_DrvGetTrueTypeFile 50L
  391. #define INDEX_DrvQueryFontFile 51L
  392. #define INDEX_UNUSED5 52L
  393. #define INDEX_DrvQueryAdvanceWidths 53L
  394. #define INDEX_DrvSetPixelFormat 54L
  395. #define INDEX_DrvDescribePixelFormat 55L
  396. #define INDEX_DrvSwapBuffers 56L
  397. #define INDEX_DrvStartBanding 57L
  398. #define INDEX_DrvNextBand 58L
  399. #define INDEX_DrvGetDirectDrawInfo 59L
  400. #define INDEX_DrvEnableDirectDraw 60L
  401. #define INDEX_DrvDisableDirectDraw 61L
  402. #define INDEX_DrvQuerySpoolType 62L
  403. /* The total number of dispatched functions */
  404. #define INDEX_LAST 63L
  405. typedef struct tagDRVENABLEDATA
  406. {
  407. ULONG iDriverVersion;
  408. ULONG c;
  409. DRVFN *pdrvfn;
  410. } DRVENABLEDATA, *PDRVENABLEDATA;
  411. typedef struct tagDEVINFO
  412. {
  413. FLONG flGraphicsCaps;
  414. LOGFONTW lfDefaultFont;
  415. LOGFONTW lfAnsiVarFont;
  416. LOGFONTW lfAnsiFixFont;
  417. ULONG cFonts;
  418. ULONG iDitherFormat;
  419. USHORT cxDither;
  420. USHORT cyDither;
  421. HPALETTE hpalDefault;
  422. } DEVINFO, *PDEVINFO;
  423. #define GCAPS_BEZIERS 0x00000001
  424. #define GCAPS_GEOMETRICWIDE 0x00000002
  425. #define GCAPS_ALTERNATEFILL 0x00000004
  426. #define GCAPS_WINDINGFILL 0x00000008
  427. #define GCAPS_HALFTONE 0x00000010
  428. #define GCAPS_COLOR_DITHER 0x00000020
  429. #define GCAPS_HORIZSTRIKE 0x00000040
  430. #define GCAPS_VERTSTRIKE 0x00000080
  431. #define GCAPS_OPAQUERECT 0x00000100
  432. #define GCAPS_VECTORFONT 0x00000200
  433. #define GCAPS_MONO_DITHER 0x00000400
  434. #define GCAPS_ASYNCCHANGE 0x00000800
  435. #define GCAPS_ASYNCMOVE 0x00001000
  436. #define GCAPS_DONTJOURNAL 0x00002000
  437. #define GCAPS_DIRECTDRAW 0x00004000
  438. #define GCAPS_ARBRUSHOPAQUE 0x00008000
  439. #define GCAPS_PANNING 0x00010000
  440. #define GCAPS_HIGHRESTEXT 0x00040000
  441. #define GCAPS_PALMANAGED 0x00080000
  442. #define GCAPS_DITHERONREALIZE 0x00200000
  443. #define GCAPS_NO64BITMEMACCESS 0x00400000
  444. #define GCAPS_FORCEDITHER 0x00800000
  445. #define GCAPS_GRAY16 0x01000000
  446. typedef struct _LINEATTRS
  447. {
  448. FLONG fl;
  449. ULONG iJoin;
  450. ULONG iEndCap;
  451. FLOAT_LONG elWidth;
  452. FLOAT eMiterLimit;
  453. ULONG cstyle;
  454. PFLOAT_LONG pstyle;
  455. FLOAT_LONG elStyleState;
  456. } LINEATTRS, *PLINEATTRS;
  457. #define LA_GEOMETRIC 0x00000001
  458. #define LA_ALTERNATE 0x00000002
  459. #define LA_STARTGAP 0x00000004
  460. #define LA_STYLED 0x00000008
  461. #define JOIN_ROUND 0L
  462. #define JOIN_BEVEL 1L
  463. #define JOIN_MITER 2L
  464. #define ENDCAP_ROUND 0L
  465. #define ENDCAP_SQUARE 1L
  466. #define ENDCAP_BUTT 2L
  467. typedef LONG LDECI4;
  468. typedef struct _CIECHROMA
  469. {
  470. LDECI4 x;
  471. LDECI4 y;
  472. LDECI4 Y;
  473. }CIECHROMA;
  474. typedef struct _COLORINFO
  475. {
  476. CIECHROMA Red;
  477. CIECHROMA Green;
  478. CIECHROMA Blue;
  479. CIECHROMA Cyan;
  480. CIECHROMA Magenta;
  481. CIECHROMA Yellow;
  482. CIECHROMA AlignmentWhite;
  483. LDECI4 RedGamma;
  484. LDECI4 GreenGamma;
  485. LDECI4 BlueGamma;
  486. LDECI4 MagentaInCyanDye;
  487. LDECI4 YellowInCyanDye;
  488. LDECI4 CyanInMagentaDye;
  489. LDECI4 YellowInMagentaDye;
  490. LDECI4 CyanInYellowDye;
  491. LDECI4 MagentaInYellowDye;
  492. }COLORINFO, *PCOLORINFO;
  493. // Allowed values for GDIINFO.ulPrimaryOrder.
  494. #define PRIMARY_ORDER_ABC 0
  495. #define PRIMARY_ORDER_ACB 1
  496. #define PRIMARY_ORDER_BAC 2
  497. #define PRIMARY_ORDER_BCA 3
  498. #define PRIMARY_ORDER_CBA 4
  499. #define PRIMARY_ORDER_CAB 5
  500. // Allowed values for GDIINFO.ulHTPatternSize.
  501. #define HT_PATSIZE_2x2 0
  502. #define HT_PATSIZE_2x2_M 1
  503. #define HT_PATSIZE_4x4 2
  504. #define HT_PATSIZE_4x4_M 3
  505. #define HT_PATSIZE_6x6 4
  506. #define HT_PATSIZE_6x6_M 5
  507. #define HT_PATSIZE_8x8 6
  508. #define HT_PATSIZE_8x8_M 7
  509. #define HT_PATSIZE_10x10 8
  510. #define HT_PATSIZE_10x10_M 9
  511. #define HT_PATSIZE_12x12 10
  512. #define HT_PATSIZE_12x12_M 11
  513. #define HT_PATSIZE_14x14 12
  514. #define HT_PATSIZE_14x14_M 13
  515. #define HT_PATSIZE_16x16 14
  516. #define HT_PATSIZE_16x16_M 15
  517. #define HT_PATSIZE_MAX_INDEX HT_PATSIZE_16x16_M
  518. #define HT_PATSIZE_DEFAULT HT_PATSIZE_4x4_M
  519. // Allowed values for GDIINFO.ulHTOutputFormat.
  520. #define HT_FORMAT_1BPP 0
  521. #define HT_FORMAT_4BPP 2
  522. #define HT_FORMAT_4BPP_IRGB 3
  523. #define HT_FORMAT_8BPP 4
  524. #define HT_FORMAT_16BPP 5
  525. #define HT_FORMAT_24BPP 6
  526. #define HT_FORMAT_32BPP 7
  527. // Allowed values for GDIINFO.flHTFlags.
  528. #define HT_FLAG_SQUARE_DEVICE_PEL 0x00000001
  529. #define HT_FLAG_HAS_BLACK_DYE 0x00000002
  530. #define HT_FLAG_ADDITIVE_PRIMS 0x00000004
  531. #define HT_FLAG_OUTPUT_CMY 0x00000100
  532. typedef struct _GDIINFO
  533. {
  534. ULONG ulVersion;
  535. ULONG ulTechnology;
  536. ULONG ulHorzSize;
  537. ULONG ulVertSize;
  538. ULONG ulHorzRes;
  539. ULONG ulVertRes;
  540. ULONG cBitsPixel;
  541. ULONG cPlanes;
  542. ULONG ulNumColors;
  543. ULONG flRaster;
  544. ULONG ulLogPixelsX;
  545. ULONG ulLogPixelsY;
  546. ULONG flTextCaps;
  547. ULONG ulDACRed;
  548. ULONG ulDACGreen;
  549. ULONG ulDACBlue;
  550. ULONG ulAspectX;
  551. ULONG ulAspectY;
  552. ULONG ulAspectXY;
  553. LONG xStyleStep;
  554. LONG yStyleStep;
  555. LONG denStyleStep;
  556. POINTL ptlPhysOffset;
  557. SIZEL szlPhysSize;
  558. ULONG ulNumPalReg;
  559. // These fields are for halftone initialization.
  560. COLORINFO ciDevice;
  561. ULONG ulDevicePelsDPI;
  562. ULONG ulPrimaryOrder;
  563. ULONG ulHTPatternSize;
  564. ULONG ulHTOutputFormat;
  565. ULONG flHTFlags;
  566. ULONG ulVRefresh;
  567. ULONG ulBltAlignment;
  568. ULONG ulPanningHorzRes;
  569. ULONG ulPanningVertRes;
  570. } GDIINFO, *PGDIINFO;
  571. /*
  572. * User objects
  573. */
  574. typedef struct _BRUSHOBJ
  575. {
  576. ULONG iSolidColor;
  577. PVOID pvRbrush;
  578. } BRUSHOBJ;
  579. typedef struct _CLIPOBJ
  580. {
  581. ULONG iUniq;
  582. RECTL rclBounds;
  583. BYTE iDComplexity;
  584. BYTE iFComplexity;
  585. BYTE iMode;
  586. BYTE fjOptions;
  587. } CLIPOBJ;
  588. typedef struct _DRIVEROBJ DRIVEROBJ;
  589. typedef BOOL (CALLBACK * FREEOBJPROC)(DRIVEROBJ *pDriverObj);
  590. typedef struct _DRIVEROBJ
  591. {
  592. PVOID pvObj;
  593. FREEOBJPROC pFreeProc;
  594. HDEV hdev;
  595. DHPDEV dhpdev;
  596. } DRIVEROBJ;
  597. typedef struct _FONTOBJ
  598. {
  599. ULONG iUniq;
  600. ULONG iFace;
  601. ULONG cxMax;
  602. FLONG flFontType;
  603. ULONG iTTUniq;
  604. ULONG iFile;
  605. SIZE sizLogResPpi;
  606. ULONG ulStyleSize;
  607. PVOID pvConsumer;
  608. PVOID pvProducer;
  609. } FONTOBJ;
  610. typedef BYTE GAMMA_TABLES[2][256];
  611. //
  612. // FONTOBJ::flFontType
  613. //
  614. #define FO_TYPE_RASTER RASTER_FONTTYPE /* 0x1 */
  615. #define FO_TYPE_DEVICE DEVICE_FONTTYPE /* 0x2 */
  616. #define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE /* 0x4 */
  617. #define FO_SIM_BOLD 0x00002000
  618. #define FO_SIM_ITALIC 0x00004000
  619. #define FO_EM_HEIGHT 0x00008000
  620. #define FO_GRAY16 0x00010000 /* [1] */
  621. #define FO_NOGRAY16 0x00020000 /* [1] */
  622. #define FO_NOHINTS 0x00040000 /* [3] */
  623. #define FO_NO_CHOICE 0x00080000 /* [3] */
  624. /**************************************************************************\
  625. *
  626. * [1]
  627. *
  628. * If the FO_GRAY16 flag is set then the bitmaps of the font
  629. * are 4-bit per pixel blending (alpha) values. A value of zero
  630. * means that the the resulting pixel should be equal to the
  631. * background color. If the value of the alpha value is k != 0
  632. * then the resulting pixel must be:
  633. *
  634. * c0 = background color
  635. * c1 = foreground color
  636. * b = blending value = (k+1)/16 // {k = 1,2,..,15}
  637. * b = 0 (k = 0)
  638. * d0 = gamma[c0], d1 = gamma[c1] // luminance components
  639. * d = (1 - b)*d0 + b*d1 // blended luminance
  640. * c = lambda[d] // blended device voltage
  641. *
  642. * where gamma[] takes a color component from application space
  643. * to CIE space and labmda[] takes a color from CIE space to
  644. * device color space
  645. *
  646. * GDI will set this bit if it request a font be gray scaled
  647. * to 16 values then GDI will set FO_GRAY16 upon entry to
  648. * DrvQueryFontData(). If the font driver cannot (or will
  649. * not) grayscale a particular realization of a font then the
  650. * font provider will zero out FO_GRAY16 and set FO_NOGRAY16
  651. * to inform GDI that
  652. * the gray scaling request cannot (or should not) be
  653. * satisfied.
  654. *
  655. * [2]
  656. *
  657. * The FO_NOHINTS indicates that hints were not used in the formation
  658. * of the glyph images. GDI will set this bit to request that hinting
  659. * be supressed. The font provider will set this bit accroding to the
  660. * rendering scheme that it used in generating the glyph image.
  661. *
  662. * [3]
  663. *
  664. * The FO_NO_CHOICE flag indicates that the flags FO_GRAY16 and
  665. * FO_NOHINTS must be obeyed if at all possible.
  666. *
  667. \**************************************************************************/
  668. typedef struct _PALOBJ
  669. {
  670. ULONG ulReserved;
  671. } PALOBJ;
  672. typedef struct _PATHOBJ
  673. {
  674. FLONG fl;
  675. ULONG cCurves;
  676. } PATHOBJ;
  677. typedef struct _SURFOBJ
  678. {
  679. DHSURF dhsurf;
  680. HSURF hsurf;
  681. DHPDEV dhpdev;
  682. HDEV hdev;
  683. SIZEL sizlBitmap;
  684. ULONG cjBits;
  685. PVOID pvBits;
  686. PVOID pvScan0;
  687. LONG lDelta;
  688. ULONG iUniq;
  689. ULONG iBitmapFormat;
  690. USHORT iType;
  691. USHORT fjBitmap;
  692. } SURFOBJ;
  693. typedef struct _WNDOBJ
  694. {
  695. CLIPOBJ coClient;
  696. PVOID pvConsumer;
  697. RECTL rclClient;
  698. SURFOBJ *psoOwner;
  699. } WNDOBJ, *PWNDOBJ;
  700. typedef struct _XFORMOBJ
  701. {
  702. ULONG ulReserved;
  703. } XFORMOBJ;
  704. typedef struct _XLATEOBJ
  705. {
  706. ULONG iUniq;
  707. FLONG flXlate;
  708. USHORT iSrcType;
  709. USHORT iDstType;
  710. ULONG cEntries;
  711. ULONG *pulXlate;
  712. } XLATEOBJ;
  713. /*
  714. * BRUSHOBJ callbacks
  715. */
  716. PVOID APIENTRY BRUSHOBJ_pvAllocRbrush(
  717. BRUSHOBJ *pbo,
  718. ULONG cj);
  719. PVOID APIENTRY BRUSHOBJ_pvGetRbrush(BRUSHOBJ *pbo);
  720. /*
  721. * CLIPOBJ callbacks
  722. */
  723. #define DC_TRIVIAL 0
  724. #define DC_RECT 1
  725. #define DC_COMPLEX 3
  726. #define FC_RECT 1
  727. #define FC_RECT4 2
  728. #define FC_COMPLEX 3
  729. #define TC_RECTANGLES 0
  730. #define TC_PATHOBJ 2
  731. #define OC_BANK_CLIP 1
  732. #define CT_RECTANGLES 0L
  733. #define CD_RIGHTDOWN 0L
  734. #define CD_LEFTDOWN 1L
  735. #define CD_RIGHTUP 2L
  736. #define CD_LEFTUP 3L
  737. #define CD_ANY 4L
  738. #define CD_LEFTWARDS 1L
  739. #define CD_UPWARDS 2L
  740. typedef struct _ENUMRECTS
  741. {
  742. ULONG c;
  743. RECTL arcl[1];
  744. } ENUMRECTS;
  745. ULONG APIENTRY CLIPOBJ_cEnumStart(
  746. CLIPOBJ *pco,
  747. BOOL bAll,
  748. ULONG iType,
  749. ULONG iDirection,
  750. ULONG cLimit);
  751. BOOL APIENTRY CLIPOBJ_bEnum(
  752. CLIPOBJ *pco,
  753. ULONG cj,
  754. ULONG *pul);
  755. PATHOBJ * APIENTRY CLIPOBJ_ppoGetPath(CLIPOBJ* pco);
  756. /*
  757. * FONTOBJ callbacks
  758. */
  759. typedef struct _GLYPHBITS
  760. {
  761. POINTL ptlOrigin;
  762. SIZEL sizlBitmap;
  763. BYTE aj[1];
  764. } GLYPHBITS;
  765. #define FO_HGLYPHS 0L
  766. #define FO_GLYPHBITS 1L
  767. #define FO_PATHOBJ 2L
  768. #define FD_NEGATIVE_FONT 1L
  769. #define FO_DEVICE_FONT 1L
  770. #define FO_OUTLINE_CAPABLE 2L
  771. typedef union _GLYPHDEF
  772. {
  773. GLYPHBITS *pgb;
  774. PATHOBJ *ppo;
  775. } GLYPHDEF;
  776. typedef struct _GLYPHPOS /* gp */
  777. {
  778. HGLYPH hg;
  779. GLYPHDEF *pgdf;
  780. POINTL ptl;
  781. } GLYPHPOS,*PGLYPHPOS;
  782. // individual glyph data
  783. // r is a unit vector along the baseline in device coordinates.
  784. // s is a unit vector in the ascent direction in device coordinates.
  785. // A, B, and C, are simple tranforms of the notional space versions into
  786. // (28.4) device coordinates. The dot products of those vectors with r
  787. // are recorded here. Note that the high words of ptqD are also 28.4
  788. // device coordinates. The low words provide extra accuracy.
  789. // THE STRUCTURE DIFFERS IN ORDERING FROM NT 3.51 VERSION OF THE STRUCTURE.
  790. // ptqD has been moved to the bottom.
  791. // This requires only recompile of all the drivers.
  792. typedef struct _GLYPHDATA {
  793. GLYPHDEF gdf; // pointer to GLYPHBITS or to PATHOBJ
  794. HGLYPH hg; // glyhp handle
  795. FIX fxD; // Character increment amount: D*r.
  796. FIX fxA; // Prebearing amount: A*r.
  797. FIX fxAB; // Advancing edge of character: (A+B)*r.
  798. FIX fxInkTop; // Baseline to inkbox top along s.
  799. FIX fxInkBottom; // Baseline to inkbox bottom along s.
  800. RECTL rclInk; // Ink box with sides parallel to x,y axes
  801. POINTQF ptqD; // Character increment vector: D=A+B+C.
  802. } GLYPHDATA;
  803. // flAccel flags for STROBJ
  804. // SO_FLAG_DEFAULT_PLACEMENT // defult inc vectors used to position chars
  805. // SO_HORIZONTAL // "left to right" or "right to left"
  806. // SO_VERTICAL // "top to bottom" or "bottom to top"
  807. // SO_REVERSED // set if horiz & "right to left" or if vert & "bottom to top"
  808. // SO_ZERO_BEARINGS // all glyphs have zero a and c spaces
  809. // SO_CHAR_INC_EQUAL_BM_BASE // base == cx for horiz, == cy for vert.
  810. // SO_MAXEXT_EQUAL_BM_SIDE // side == cy for horiz, == cx for vert.
  811. // do not substitute device font for tt font even if device font sub table
  812. // tells the driver this should be done
  813. // SO_DO_NOT_SUBSTITUTE_DEVICE_FONT
  814. #define SO_FLAG_DEFAULT_PLACEMENT 0x00000001
  815. #define SO_HORIZONTAL 0x00000002
  816. #define SO_VERTICAL 0x00000004
  817. #define SO_REVERSED 0x00000008
  818. #define SO_ZERO_BEARINGS 0x00000010
  819. #define SO_CHAR_INC_EQUAL_BM_BASE 0x00000020
  820. #define SO_MAXEXT_EQUAL_BM_SIDE 0x00000040
  821. #define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080
  822. #define SO_GLYPHINDEX_TEXTOUT 0x00000100
  823. #define SO_ESC_NOT_ORIENT 0x00000200
  824. typedef struct _STROBJ
  825. {
  826. ULONG cGlyphs; // # of glyphs to render
  827. FLONG flAccel; // accel flags
  828. ULONG ulCharInc; // non-zero only if fixed pitch font, equal to advanced width.
  829. RECTL rclBkGround; // bk ground rect of the string in device coords
  830. GLYPHPOS *pgp; // If non-NULL then has all glyphs.
  831. LPWSTR pwszOrg; // pointer to original unicode string.
  832. } STROBJ;
  833. typedef struct _FONTINFO /* fi */
  834. {
  835. ULONG cjThis;
  836. FLONG flCaps;
  837. ULONG cGlyphsSupported;
  838. ULONG cjMaxGlyph1;
  839. ULONG cjMaxGlyph4;
  840. ULONG cjMaxGlyph8;
  841. ULONG cjMaxGlyph32;
  842. } FONTINFO, *PFONTINFO;
  843. ULONG APIENTRY FONTOBJ_cGetAllGlyphHandles(
  844. FONTOBJ *pfo,
  845. HGLYPH *phg);
  846. VOID APIENTRY FONTOBJ_vGetInfo(
  847. FONTOBJ *pfo,
  848. ULONG cjSize,
  849. FONTINFO *pfi);
  850. ULONG APIENTRY FONTOBJ_cGetGlyphs(
  851. FONTOBJ *pfo,
  852. ULONG iMode,
  853. ULONG cGlyph,
  854. HGLYPH *phg,
  855. PVOID *ppvGlyph);
  856. GAMMA_TABLES* APIENTRY FONTOBJ_pGetGammaTables(FONTOBJ *pfo);
  857. XFORMOBJ * APIENTRY FONTOBJ_pxoGetXform(FONTOBJ *pfo);
  858. IFIMETRICS * APIENTRY FONTOBJ_pifi(FONTOBJ *pfo);
  859. PVOID FONTOBJ_pvTrueTypeFontFile(
  860. FONTOBJ *pfo,
  861. ULONG *pcjFile);
  862. // possible values that iMode can take:
  863. /*
  864. * PALOBJ callbacks
  865. */
  866. #define PAL_INDEXED 0x00000001
  867. #define PAL_BITFIELDS 0x00000002
  868. #define PAL_RGB 0x00000004
  869. #define PAL_BGR 0x00000008
  870. ULONG APIENTRY PALOBJ_cGetColors(
  871. PALOBJ *ppalo,
  872. ULONG iStart,
  873. ULONG cColors,
  874. ULONG *pulColors);
  875. /*
  876. * PATHOBJ callbacks
  877. */
  878. #define PO_BEZIERS 0x00000001
  879. #define PO_ELLIPSE 0x00000002
  880. #define PD_BEGINSUBPATH 0x00000001
  881. #define PD_ENDSUBPATH 0x00000002
  882. #define PD_RESETSTYLE 0x00000004
  883. #define PD_CLOSEFIGURE 0x00000008
  884. #define PD_BEZIERS 0x00000010
  885. #define PD_ALL (PD_BEGINSUBPATH | \
  886. PD_ENDSUBPATH | \
  887. PD_RESETSTYLE | \
  888. PD_CLOSEFIGURE | \
  889. PD_BEZIERS)
  890. typedef struct _PATHDATA
  891. {
  892. FLONG flags;
  893. ULONG count;
  894. POINTFIX *pptfx;
  895. } PATHDATA, *PPATHDATA;
  896. typedef struct _RUN
  897. {
  898. LONG iStart;
  899. LONG iStop;
  900. } RUN, *PRUN;
  901. typedef struct _CLIPLINE
  902. {
  903. POINTFIX ptfxA;
  904. POINTFIX ptfxB;
  905. LONG lStyleState;
  906. ULONG c;
  907. RUN arun[1];
  908. } CLIPLINE, *PCLIPLINE;
  909. VOID APIENTRY PATHOBJ_vEnumStart(PATHOBJ *ppo);
  910. BOOL APIENTRY PATHOBJ_bEnum(
  911. PATHOBJ *ppo,
  912. PATHDATA *ppd);
  913. VOID APIENTRY PATHOBJ_vEnumStartClipLines(
  914. PATHOBJ *ppo,
  915. CLIPOBJ *pco,
  916. SURFOBJ *pso,
  917. LINEATTRS *pla);
  918. BOOL APIENTRY PATHOBJ_bEnumClipLines(
  919. PATHOBJ *ppo,
  920. ULONG cb,
  921. CLIPLINE *pcl);
  922. BOOL APIENTRY PATHOBJ_bMoveTo(
  923. PATHOBJ *ppo,
  924. POINTFIX ptfx);
  925. BOOL APIENTRY PATHOBJ_bPolyLineTo(
  926. PATHOBJ *ppo,
  927. POINTFIX *pptfx,
  928. ULONG cptfx);
  929. BOOL APIENTRY PATHOBJ_bPolyBezierTo(
  930. PATHOBJ *ppo,
  931. POINTFIX *pptfx,
  932. ULONG cptfx);
  933. BOOL APIENTRY PATHOBJ_bCloseFigure(PATHOBJ *ppo);
  934. VOID APIENTRY PATHOBJ_vGetBounds(
  935. PATHOBJ *ppo,
  936. PRECTFX prectfx);
  937. /*
  938. * STROBJ callbacks
  939. */
  940. VOID APIENTRY STROBJ_vEnumStart(
  941. STROBJ *pstro);
  942. BOOL APIENTRY STROBJ_bEnum(
  943. STROBJ *pstro,
  944. ULONG *pc,
  945. PGLYPHPOS *ppgpos);
  946. DWORD APIENTRY STROBJ_dwGetCodePage(
  947. STROBJ *pstro);
  948. #define SGI_EXTRASPACE 0
  949. /*
  950. * SURFOBJ callbacks
  951. */
  952. #define STYPE_BITMAP 0L
  953. #define STYPE_DEVICE 1L
  954. #define STYPE_DEVBITMAP 3L
  955. #define BMF_1BPP 1L
  956. #define BMF_4BPP 2L
  957. #define BMF_8BPP 3L
  958. #define BMF_16BPP 4L
  959. #define BMF_24BPP 5L
  960. #define BMF_32BPP 6L
  961. #define BMF_4RLE 7L
  962. #define BMF_8RLE 8L
  963. #define BMF_TOPDOWN 0x0001
  964. #define BMF_NOZEROINIT 0x0002
  965. #define BMF_DONTCACHE 0x0004
  966. #define BMF_USERMEM 0x0008
  967. #define BMF_KMSECTION 0x0010
  968. /*
  969. * XFORMOBJ callbacks
  970. */
  971. #define GX_IDENTITY 0L
  972. #define GX_OFFSET 1L
  973. #define GX_SCALE 2L
  974. #define GX_GENERAL 3L
  975. #define XF_LTOL 0L
  976. #define XF_INV_LTOL 1L
  977. #define XF_LTOFX 2L
  978. #define XF_INV_FXTOL 3L
  979. ULONG APIENTRY XFORMOBJ_iGetXform(
  980. XFORMOBJ *pxo,
  981. XFORM *pxform);
  982. BOOL APIENTRY XFORMOBJ_bApplyXform(
  983. XFORMOBJ *pxo,
  984. ULONG iMode,
  985. ULONG cPoints,
  986. PVOID pvIn,
  987. PVOID pvOut);
  988. /*
  989. * XLATEOBJ callbacks
  990. */
  991. #define XO_TRIVIAL 0x00000001
  992. #define XO_TABLE 0x00000002
  993. #define XO_TO_MONO 0x00000004
  994. #define XO_SRCPALETTE 1
  995. #define XO_DESTPALETTE 2
  996. #define XO_DESTDCPALETTE 3
  997. ULONG APIENTRY XLATEOBJ_iXlate(XLATEOBJ *pxlo, ULONG iColor);
  998. ULONG * APIENTRY XLATEOBJ_piVector(XLATEOBJ *pxlo);
  999. ULONG APIENTRY XLATEOBJ_cGetPalette(
  1000. XLATEOBJ *pxlo,
  1001. ULONG iPal,
  1002. ULONG cPal,
  1003. ULONG *pPal);
  1004. /*
  1005. * Engine callbacks - error logging
  1006. */
  1007. VOID APIENTRY EngSetLastError(ULONG);
  1008. ULONG APIENTRY EngGetLastError();
  1009. /*
  1010. * Engine callbacks - Surfaces
  1011. */
  1012. #define HOOK_BITBLT 0x00000001
  1013. #define HOOK_STRETCHBLT 0x00000002
  1014. #define HOOK_PLGBLT 0x00000004
  1015. #define HOOK_TEXTOUT 0x00000008
  1016. #define HOOK_PAINT 0x00000010
  1017. #define HOOK_STROKEPATH 0x00000020
  1018. #define HOOK_FILLPATH 0x00000040
  1019. #define HOOK_STROKEANDFILLPATH 0x00000080
  1020. #define HOOK_LINETO 0x00000100
  1021. #define HOOK_COPYBITS 0x00000400
  1022. #define HOOK_SYNCHRONIZE 0x00001000
  1023. #define HOOK_SYNCHRONIZEACCESS 0x00004000
  1024. HBITMAP APIENTRY EngCreateBitmap(
  1025. SIZEL sizl,
  1026. LONG lWidth,
  1027. ULONG iFormat,
  1028. FLONG fl,
  1029. PVOID pvBits);
  1030. HSURF APIENTRY EngCreateDeviceSurface(DHSURF dhsurf, SIZEL sizl, ULONG iFormatCompat);
  1031. HBITMAP APIENTRY EngCreateDeviceBitmap(DHSURF dhsurf, SIZEL sizl, ULONG iFormatCompat);
  1032. BOOL APIENTRY EngDeleteSurface(HSURF hsurf);
  1033. SURFOBJ * APIENTRY EngLockSurface(HSURF hsurf);
  1034. VOID APIENTRY EngUnlockSurface(SURFOBJ *pso);
  1035. BOOL APIENTRY EngEraseSurface(
  1036. SURFOBJ *pso,
  1037. RECTL *prcl,
  1038. ULONG iColor);
  1039. BOOL APIENTRY EngAssociateSurface(
  1040. HSURF hsurf,
  1041. HDEV hdev,
  1042. FLONG flHooks);
  1043. BOOL APIENTRY EngMarkBandingSurface( HSURF hsurf );
  1044. BOOL APIENTRY EngCheckAbort(SURFOBJ *pso);
  1045. /*
  1046. * Engine callbacks - Paths
  1047. */
  1048. PATHOBJ * APIENTRY EngCreatePath();
  1049. VOID APIENTRY EngDeletePath(PATHOBJ *ppo);
  1050. /*
  1051. * Engine callbacks - Palettes
  1052. */
  1053. HPALETTE APIENTRY EngCreatePalette(
  1054. ULONG iMode,
  1055. ULONG cColors,
  1056. ULONG *pulColors,
  1057. FLONG flRed,
  1058. FLONG flGreen,
  1059. FLONG flBlue);
  1060. BOOL APIENTRY EngDeletePalette(HPALETTE hpal);
  1061. /*
  1062. * Engine callbacks - Clipping
  1063. */
  1064. CLIPOBJ * APIENTRY EngCreateClip();
  1065. VOID APIENTRY EngDeleteClip(CLIPOBJ *pco);
  1066. /*
  1067. * Function prototypes
  1068. */
  1069. // These are the only EXPORTED functions for ANY driver
  1070. BOOL APIENTRY DrvEnableDriver(
  1071. ULONG iEngineVersion,
  1072. ULONG cj,
  1073. DRVENABLEDATA *pded);
  1074. /*
  1075. * Driver functions
  1076. */
  1077. DHPDEV APIENTRY DrvEnablePDEV(
  1078. DEVMODEW *pdm,
  1079. LPWSTR pwszLogAddress,
  1080. ULONG cPat,
  1081. HSURF *phsurfPatterns,
  1082. ULONG cjCaps,
  1083. ULONG *pdevcaps,
  1084. ULONG cjDevInfo,
  1085. DEVINFO *pdi,
  1086. HDEV hdev,
  1087. LPWSTR pwszDeviceName,
  1088. HANDLE hDriver);
  1089. #define HS_DDI_MAX 6
  1090. BOOL APIENTRY DrvResetPDEV(DHPDEV dhpdevOld, DHPDEV dhpdevNew);
  1091. VOID APIENTRY DrvCompletePDEV(DHPDEV dhpdev,HDEV hdev);
  1092. HSURF APIENTRY DrvEnableSurface(DHPDEV dhpdev);
  1093. VOID APIENTRY DrvSynchronize(DHPDEV dhpdev,RECTL *prcl);
  1094. VOID APIENTRY DrvDisableSurface(DHPDEV dhpdev);
  1095. VOID APIENTRY DrvDisablePDEV(DHPDEV dhpdev);
  1096. BOOL APIENTRY DrvStartBanding(SURFOBJ *pso, POINTL *pptl);
  1097. BOOL APIENTRY DrvNextBand(SURFOBJ *pso, POINTL *pptl);
  1098. /* DrvSaveScreenBits - iMode definitions */
  1099. #define SS_SAVE 0
  1100. #define SS_RESTORE 1
  1101. #define SS_FREE 2
  1102. ULONG APIENTRY DrvSaveScreenBits(SURFOBJ *pso,ULONG iMode,ULONG ident,RECTL *prcl);
  1103. /*
  1104. * Desktops
  1105. */
  1106. BOOL APIENTRY DrvAssertMode(
  1107. DHPDEV dhpdev,
  1108. BOOL bEnable);
  1109. ULONG APIENTRY DrvGetModes(
  1110. HANDLE hDriver,
  1111. ULONG cjSize,
  1112. DEVMODEW *pdm);
  1113. /*
  1114. * Bitmaps
  1115. */
  1116. HBITMAP APIENTRY DrvCreateDeviceBitmap (
  1117. DHPDEV dhpdev,
  1118. SIZEL sizl,
  1119. ULONG iFormat);
  1120. VOID APIENTRY DrvDeleteDeviceBitmap(DHSURF dhsurf);
  1121. /*
  1122. * Palettes
  1123. */
  1124. BOOL APIENTRY DrvSetPalette(
  1125. DHPDEV dhpdev,
  1126. PALOBJ *ppalo,
  1127. FLONG fl,
  1128. ULONG iStart,
  1129. ULONG cColors);
  1130. /*
  1131. * Brushes
  1132. */
  1133. #define DM_DEFAULT 0x00000001
  1134. #define DM_MONOCHROME 0x00000002
  1135. #define DCR_SOLID 0
  1136. #define DCR_DRIVER 1
  1137. #define DCR_HALFTONE 2
  1138. ULONG APIENTRY DrvDitherColor(
  1139. DHPDEV dhpdev,
  1140. ULONG iMode,
  1141. ULONG rgb,
  1142. ULONG *pul);
  1143. BOOL APIENTRY DrvRealizeBrush(
  1144. BRUSHOBJ *pbo,
  1145. SURFOBJ *psoTarget,
  1146. SURFOBJ *psoPattern,
  1147. SURFOBJ *psoMask,
  1148. XLATEOBJ *pxlo,
  1149. ULONG iHatch);
  1150. #define RB_DITHERCOLOR 0x80000000L
  1151. /*
  1152. * Fonts
  1153. */
  1154. PIFIMETRICS APIENTRY DrvQueryFont(
  1155. DHPDEV dhpdev,
  1156. ULONG iFile,
  1157. ULONG iFace,
  1158. ULONG *pid);
  1159. // #define QFT_UNICODE 0L
  1160. #define QFT_LIGATURES 1L
  1161. #define QFT_KERNPAIRS 2L
  1162. #define QFT_GLYPHSET 3L
  1163. PVOID APIENTRY DrvQueryFontTree(
  1164. DHPDEV dhpdev,
  1165. ULONG iFile,
  1166. ULONG iFace,
  1167. ULONG iMode,
  1168. ULONG *pid);
  1169. #define QFD_GLYPHANDBITMAP 1L
  1170. #define QFD_GLYPHANDOUTLINE 2L
  1171. #define QFD_MAXEXTENTS 3L
  1172. #define QFD_TT_GLYPHANDBITMAP 4L
  1173. #define QFD_TT_GRAY1_BITMAP 5L
  1174. #define QFD_TT_GRAY2_BITMAP 6L
  1175. #define QFD_TT_GRAY4_BITMAP 8L
  1176. #define QFD_TT_GRAY8_BITMAP 9L
  1177. #define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP
  1178. LONG APIENTRY DrvQueryFontData(
  1179. DHPDEV dhpdev,
  1180. FONTOBJ *pfo,
  1181. ULONG iMode,
  1182. HGLYPH hg,
  1183. GLYPHDATA *pgd,
  1184. PVOID pv,
  1185. ULONG cjSize);
  1186. VOID APIENTRY DrvFree(
  1187. PVOID pv,
  1188. ULONG id);
  1189. VOID APIENTRY DrvDestroyFont(
  1190. FONTOBJ *pfo);
  1191. // Capability flags for DrvQueryCaps.
  1192. #define QC_OUTLINES 0x00000001
  1193. #define QC_1BIT 0x00000002
  1194. #define QC_4BIT 0x00000004
  1195. //
  1196. // This is a mask of the capabilites of a font provider that can return more
  1197. // than just glyph metrics (i.e., bitmaps and/or outlines). If a driver has
  1198. // one or more of these capabilities, then it is FONT DRIVER.
  1199. //
  1200. // Drivers should only set individual bits. GDI will check if any are turned on
  1201. // using this define.
  1202. //
  1203. #define QC_FONTDRIVERCAPS ( QC_OUTLINES | QC_1BIT | QC_4BIT )
  1204. LONG APIENTRY DrvQueryFontCaps(
  1205. ULONG culCaps,
  1206. ULONG *pulCaps);
  1207. ULONG APIENTRY DrvLoadFontFile(
  1208. ULONG cFiles, // number of font files associated with this font
  1209. ULONG *piFile, // handles for individual files, cFiles of them
  1210. PVOID *ppvView, // array of cFiles views
  1211. ULONG *pcjView, // array of their sizes
  1212. ULONG ulLangID);
  1213. BOOL APIENTRY DrvUnloadFontFile(
  1214. ULONG iFile);
  1215. LONG APIENTRY DrvQueryTrueTypeTable(
  1216. ULONG iFile,
  1217. ULONG ulFont,
  1218. ULONG ulTag,
  1219. PTRDIFF dpStart,
  1220. ULONG cjBuf,
  1221. BYTE *pjBuf);
  1222. BOOL APIENTRY DrvQueryAdvanceWidths(
  1223. DHPDEV dhpdev,
  1224. FONTOBJ *pfo,
  1225. ULONG iMode,
  1226. HGLYPH *phg,
  1227. PVOID pvWidths,
  1228. ULONG cGlyphs);
  1229. // Values for iMode
  1230. #define QAW_GETWIDTHS 0
  1231. #define QAW_GETEASYWIDTHS 1
  1232. LONG APIENTRY DrvQueryTrueTypeOutline(
  1233. DHPDEV dhpdev,
  1234. FONTOBJ *pfo,
  1235. HGLYPH hglyph,
  1236. BOOL bMetricsOnly,
  1237. GLYPHDATA *pgldt,
  1238. ULONG cjBuf,
  1239. TTPOLYGONHEADER *ppoly);
  1240. PVOID APIENTRY DrvGetTrueTypeFile (
  1241. ULONG iFile,
  1242. ULONG *pcj);
  1243. // values for ulMode:
  1244. #define QFF_DESCRIPTION 1L
  1245. #define QFF_NUMFACES 2L
  1246. LONG APIENTRY DrvQueryFontFile(
  1247. ULONG iFile,
  1248. ULONG ulMode,
  1249. ULONG cjBuf,
  1250. ULONG *pulBuf);
  1251. /*
  1252. * BitBlt
  1253. */
  1254. BOOL APIENTRY DrvBitBlt(
  1255. SURFOBJ *psoTrg,
  1256. SURFOBJ *psoSrc,
  1257. SURFOBJ *psoMask,
  1258. CLIPOBJ *pco,
  1259. XLATEOBJ *pxlo,
  1260. RECTL *prclTrg,
  1261. POINTL *pptlSrc,
  1262. POINTL *pptlMask,
  1263. BRUSHOBJ *pbo,
  1264. POINTL *pptlBrush,
  1265. ROP4 rop4);
  1266. BOOL APIENTRY DrvStretchBlt(
  1267. SURFOBJ *psoDest,
  1268. SURFOBJ *psoSrc,
  1269. SURFOBJ *psoMask,
  1270. CLIPOBJ *pco,
  1271. XLATEOBJ *pxlo,
  1272. COLORADJUSTMENT *pca,
  1273. POINTL *pptlHTOrg,
  1274. RECTL *prclDest,
  1275. RECTL *prclSrc,
  1276. POINTL *pptlMask,
  1277. ULONG iMode);
  1278. BOOL APIENTRY DrvCopyBits(
  1279. SURFOBJ *psoDest,
  1280. SURFOBJ *psoSrc,
  1281. CLIPOBJ *pco,
  1282. XLATEOBJ *pxlo,
  1283. RECTL *prclDest,
  1284. POINTL *pptlSrc);
  1285. /*
  1286. * Text Output
  1287. */
  1288. BOOL APIENTRY DrvTextOut(
  1289. SURFOBJ *pso,
  1290. STROBJ *pstro,
  1291. FONTOBJ *pfo,
  1292. CLIPOBJ *pco,
  1293. RECTL *prclExtra,
  1294. RECTL *prclOpaque,
  1295. BRUSHOBJ *pboFore,
  1296. BRUSHOBJ *pboOpaque,
  1297. POINTL *pptlOrg,
  1298. MIX mix);
  1299. /*
  1300. * Graphics Output
  1301. */
  1302. BOOL APIENTRY DrvLineTo(
  1303. SURFOBJ *pso,
  1304. CLIPOBJ *pco,
  1305. BRUSHOBJ *pbo,
  1306. LONG x1,
  1307. LONG y1,
  1308. LONG x2,
  1309. LONG y2,
  1310. RECTL *prclBounds,
  1311. MIX mix);
  1312. BOOL APIENTRY DrvStrokePath(
  1313. SURFOBJ *pso,
  1314. PATHOBJ *ppo,
  1315. CLIPOBJ *pco,
  1316. XFORMOBJ *pxo,
  1317. BRUSHOBJ *pbo,
  1318. POINTL *pptlBrushOrg,
  1319. LINEATTRS *plineattrs,
  1320. MIX mix);
  1321. #define FP_ALTERNATEMODE 1L
  1322. #define FP_WINDINGMODE 2L
  1323. BOOL APIENTRY DrvFillPath(
  1324. SURFOBJ *pso,
  1325. PATHOBJ *ppo,
  1326. CLIPOBJ *pco,
  1327. BRUSHOBJ *pbo,
  1328. POINTL *pptlBrushOrg,
  1329. MIX mix,
  1330. FLONG flOptions);
  1331. BOOL APIENTRY DrvStrokeAndFillPath(
  1332. SURFOBJ *pso,
  1333. PATHOBJ *ppo,
  1334. CLIPOBJ *pco,
  1335. XFORMOBJ *pxo,
  1336. BRUSHOBJ *pboStroke,
  1337. LINEATTRS *plineattrs,
  1338. BRUSHOBJ *pboFill,
  1339. POINTL *pptlBrushOrg,
  1340. MIX mixFill,
  1341. FLONG flOptions);
  1342. BOOL APIENTRY DrvPaint(
  1343. SURFOBJ *pso,
  1344. CLIPOBJ *pco,
  1345. BRUSHOBJ *pbo,
  1346. POINTL *pptlBrushOrg,
  1347. MIX mix);
  1348. /*
  1349. * Pointers
  1350. */
  1351. #define SPS_ERROR 0
  1352. #define SPS_DECLINE 1
  1353. #define SPS_ACCEPT_NOEXCLUDE 2
  1354. #define SPS_ACCEPT_EXCLUDE 3
  1355. #define SPS_CHANGE 0x00000001L
  1356. #define SPS_ASYNCCHANGE 0x00000002L
  1357. #define SPS_ANIMATESTART 0x00000004L
  1358. #define SPS_ANIMATEUPDATE 0x00000008L
  1359. ULONG APIENTRY DrvSetPointerShape(
  1360. SURFOBJ *pso,
  1361. SURFOBJ *psoMask,
  1362. SURFOBJ *psoColor,
  1363. XLATEOBJ *pxlo,
  1364. LONG xHot,
  1365. LONG yHot,
  1366. LONG x,
  1367. LONG y,
  1368. RECTL *prcl,
  1369. FLONG fl);
  1370. VOID APIENTRY DrvMovePointer(SURFOBJ *pso,LONG x,LONG y,RECTL *prcl);
  1371. /*
  1372. * Printing
  1373. */
  1374. BOOL APIENTRY DrvSendPage(SURFOBJ *pso);
  1375. BOOL APIENTRY DrvStartPage(SURFOBJ *pso);
  1376. ULONG APIENTRY DrvEscape(
  1377. SURFOBJ *pso,
  1378. ULONG iEsc,
  1379. ULONG cjIn,
  1380. PVOID pvIn,
  1381. ULONG cjOut,
  1382. PVOID pvOut);
  1383. BOOL APIENTRY DrvStartDoc(
  1384. SURFOBJ *pso,
  1385. LPWSTR pwszDocName,
  1386. DWORD dwJobId);
  1387. #define ED_ABORTDOC 1
  1388. BOOL APIENTRY DrvEndDoc(SURFOBJ *pso, FLONG fl);
  1389. BOOL APIENTRY DrvQuerySpoolType(DHPDEV, LPWSTR);
  1390. ULONG APIENTRY DrvDrawEscape(
  1391. SURFOBJ *pso,
  1392. ULONG iEsc,
  1393. CLIPOBJ *pco,
  1394. RECTL *prcl,
  1395. ULONG cjIn,
  1396. PVOID pvIn);
  1397. ULONG APIENTRY DrvGetGlyphMode(DHPDEV, FONTOBJ *);
  1398. ULONG APIENTRY DrvFontManagement(
  1399. SURFOBJ *pso,
  1400. FONTOBJ *pfo,
  1401. ULONG iMode,
  1402. ULONG cjIn,
  1403. PVOID pvIn,
  1404. ULONG cjOut,
  1405. PVOID pvOut);
  1406. /*
  1407. * DirectDraw
  1408. */
  1409. BOOL DrvEnableDirectDraw(
  1410. DHPDEV dhpdev,
  1411. DD_CALLBACKS *pCallBacks,
  1412. DD_SURFACECALLBACKS *pSurfaceCallBacks,
  1413. DD_PALETTECALLBACKS *pPaletteCallBacks);
  1414. VOID DrvDisableDirectDraw(
  1415. DHPDEV dhpdev);
  1416. BOOL DrvGetDirectDrawInfo(
  1417. DHPDEV dhpdev,
  1418. DD_HALINFO *pHalInfo,
  1419. DWORD *pdwNumHeaps,
  1420. VIDEOMEMORY *pvmList,
  1421. DWORD *pdwNumFourCCCodes,
  1422. DWORD *pdwFourCC);
  1423. /*
  1424. * Engine callbacks - tracking clip region changes
  1425. */
  1426. #define WOC_RGN_CLIENT_DELTA 1
  1427. #define WOC_RGN_CLIENT 2
  1428. #define WOC_RGN_SURFACE_DELTA 4
  1429. #define WOC_RGN_SURFACE 8
  1430. #define WOC_CHANGED 16
  1431. #define WOC_DELETE 32
  1432. typedef VOID (CALLBACK * WNDOBJCHANGEPROC)(WNDOBJ *pwo, FLONG fl);
  1433. #define WO_RGN_CLIENT_DELTA 1
  1434. #define WO_RGN_CLIENT 2
  1435. #define WO_RGN_SURFACE_DELTA 4
  1436. #define WO_RGN_SURFACE 8
  1437. #define WO_RGN_UPDATE_ALL 16
  1438. WNDOBJ * APIENTRY EngCreateWnd(
  1439. SURFOBJ *pso,
  1440. HWND hwnd,
  1441. WNDOBJCHANGEPROC pfn,
  1442. FLONG fl,
  1443. int iPixelFormat);
  1444. ULONG APIENTRY WNDOBJ_cEnumStart(
  1445. WNDOBJ *pwo,
  1446. ULONG iType,
  1447. ULONG iDirection,
  1448. ULONG cLimit);
  1449. BOOL APIENTRY WNDOBJ_bEnum(
  1450. WNDOBJ *pwo,
  1451. ULONG cj,
  1452. ULONG *pul);
  1453. VOID APIENTRY WNDOBJ_vSetConsumer(
  1454. WNDOBJ *pwo,
  1455. PVOID pvConsumer);
  1456. /*
  1457. * Engine callbacks - tracking driver managed resources
  1458. */
  1459. HDRVOBJ APIENTRY EngCreateDriverObj(
  1460. PVOID pvObj,
  1461. FREEOBJPROC pFreeObjProc,
  1462. HDEV hdev);
  1463. BOOL APIENTRY EngDeleteDriverObj(
  1464. HDRVOBJ hdo,
  1465. BOOL bCallBack,
  1466. BOOL bLocked);
  1467. DRIVEROBJ * APIENTRY EngLockDriverObj(HDRVOBJ hdo);
  1468. BOOL APIENTRY EngUnlockDriverObj(HDRVOBJ hdo);
  1469. /*
  1470. * Engine callback - return current process handle.
  1471. */
  1472. HANDLE APIENTRY EngGetProcessHandle();
  1473. /*
  1474. * Pixel formats
  1475. */
  1476. BOOL APIENTRY DrvSetPixelFormat(
  1477. SURFOBJ *pso,
  1478. LONG iPixelFormat,
  1479. HWND hwnd);
  1480. LONG APIENTRY DrvDescribePixelFormat(
  1481. DHPDEV dhpdev,
  1482. LONG iPixelFormat,
  1483. ULONG cjpfd,
  1484. PIXELFORMATDESCRIPTOR *ppfd);
  1485. /*
  1486. * Swap buffers
  1487. */
  1488. BOOL APIENTRY DrvSwapBuffers(
  1489. SURFOBJ *pso,
  1490. WNDOBJ *pwo);
  1491. /*
  1492. * Function prototypes - Engine Simulations
  1493. */
  1494. BOOL APIENTRY EngBitBlt(
  1495. SURFOBJ *psoTrg,
  1496. SURFOBJ *psoSrc,
  1497. SURFOBJ *psoMask,
  1498. CLIPOBJ *pco,
  1499. XLATEOBJ *pxlo,
  1500. RECTL *prclTrg,
  1501. POINTL *pptlSrc,
  1502. POINTL *pptlMask,
  1503. BRUSHOBJ *pbo,
  1504. POINTL *pptlBrush,
  1505. ROP4 rop4);
  1506. BOOL APIENTRY EngLineTo(
  1507. SURFOBJ *pso,
  1508. CLIPOBJ *pco,
  1509. BRUSHOBJ *pbo,
  1510. LONG x1,
  1511. LONG y1,
  1512. LONG x2,
  1513. LONG y2,
  1514. RECTL *prclBounds,
  1515. MIX mix);
  1516. BOOL APIENTRY EngStretchBlt(
  1517. SURFOBJ *psoDest,
  1518. SURFOBJ *psoSrc,
  1519. SURFOBJ *psoMask,
  1520. CLIPOBJ *pco,
  1521. XLATEOBJ *pxlo,
  1522. COLORADJUSTMENT *pca,
  1523. POINTL *pptlHTOrg,
  1524. RECTL *prclDest,
  1525. RECTL *prclSrc,
  1526. POINTL *pptlMask,
  1527. ULONG iMode);
  1528. BOOL APIENTRY EngTextOut(
  1529. SURFOBJ *pso,
  1530. STROBJ *pstro,
  1531. FONTOBJ *pfo,
  1532. CLIPOBJ *pco,
  1533. RECTL *prclExtra,
  1534. RECTL *prclOpaque,
  1535. BRUSHOBJ *pboFore,
  1536. BRUSHOBJ *pboOpaque,
  1537. POINTL *pptlOrg,
  1538. MIX mix);
  1539. BOOL APIENTRY EngStrokePath(
  1540. SURFOBJ *pso,
  1541. PATHOBJ *ppo,
  1542. CLIPOBJ *pco,
  1543. XFORMOBJ *pxo,
  1544. BRUSHOBJ *pbo,
  1545. POINTL *pptlBrushOrg,
  1546. LINEATTRS *plineattrs,
  1547. MIX mix);
  1548. BOOL APIENTRY EngFillPath(
  1549. SURFOBJ *pso,
  1550. PATHOBJ *ppo,
  1551. CLIPOBJ *pco,
  1552. BRUSHOBJ *pbo,
  1553. POINTL *pptlBrushOrg,
  1554. MIX mix,
  1555. FLONG flOptions);
  1556. BOOL APIENTRY EngStrokeAndFillPath(
  1557. SURFOBJ *pso,
  1558. PATHOBJ *ppo,
  1559. CLIPOBJ *pco,
  1560. XFORMOBJ *pxo,
  1561. BRUSHOBJ *pboStroke,
  1562. LINEATTRS *plineattrs,
  1563. BRUSHOBJ *pboFill,
  1564. POINTL *pptlBrushOrg,
  1565. MIX mixFill,
  1566. FLONG flOptions);
  1567. BOOL APIENTRY EngPaint(
  1568. SURFOBJ *pso,
  1569. CLIPOBJ *pco,
  1570. BRUSHOBJ *pbo,
  1571. POINTL *pptlBrushOrg,
  1572. MIX mix);
  1573. BOOL APIENTRY EngCopyBits(
  1574. SURFOBJ *psoDest,
  1575. SURFOBJ *psoSrc,
  1576. CLIPOBJ *pco,
  1577. XLATEOBJ *pxlo,
  1578. RECTL *prclDest,
  1579. POINTL *pptlSrc);
  1580. #define PPB_NOCLIP 0x0001
  1581. //
  1582. // Halftone releated APIs
  1583. //
  1584. LONG
  1585. APIENTRY
  1586. HT_ComputeRGBGammaTable(
  1587. USHORT GammaTableEntries,
  1588. USHORT GammaTableType,
  1589. USHORT RedGamma,
  1590. USHORT GreenGamma,
  1591. USHORT BlueGamma,
  1592. LPBYTE pGammaTable
  1593. );
  1594. LONG
  1595. APIENTRY
  1596. HT_Get8BPPFormatPalette(
  1597. LPPALETTEENTRY pPaletteEntry,
  1598. USHORT RedGamma,
  1599. USHORT GreenGamma,
  1600. USHORT BlueGamma
  1601. );
  1602. typedef struct _DEVHTINFO {
  1603. DWORD HTFlags;
  1604. DWORD HTPatternSize;
  1605. DWORD DevPelsDPI;
  1606. COLORINFO ColorInfo;
  1607. } DEVHTINFO, *PDEVHTINFO;
  1608. #define DEVHTADJF_COLOR_DEVICE 0x00000001
  1609. #define DEVHTADJF_ADDITIVE_DEVICE 0x00000002
  1610. typedef struct _DEVHTADJDATA {
  1611. DWORD DeviceFlags;
  1612. DWORD DeviceXDPI;
  1613. DWORD DeviceYDPI;
  1614. PDEVHTINFO pDefHTInfo;
  1615. PDEVHTINFO pAdjHTInfo;
  1616. } DEVHTADJDATA, *PDEVHTADJDATA;
  1617. LONG
  1618. APIENTRY
  1619. HTUI_DeviceColorAdjustment(
  1620. LPSTR pDeviceName,
  1621. PDEVHTADJDATA pDevHTAdjData
  1622. );
  1623. //
  1624. // General support APIS
  1625. //
  1626. VOID
  1627. APIENTRY
  1628. EngDebugBreak(
  1629. VOID
  1630. );
  1631. VOID
  1632. APIENTRY
  1633. EngDebugPrint(
  1634. PCHAR StandardPrefix,
  1635. PCHAR DebugMessage,
  1636. va_list ap
  1637. );
  1638. VOID
  1639. APIENTRY
  1640. EngQueryPerformanceCounter(
  1641. LONGLONG *pPerformanceCount
  1642. );
  1643. VOID
  1644. APIENTRY
  1645. EngQueryPerformanceFrequency(
  1646. LONGLONG *pFrequency
  1647. );
  1648. //
  1649. // Kernel mode memory operations
  1650. //
  1651. #define FL_ZERO_MEMORY 0x00000001
  1652. PVOID
  1653. APIENTRY
  1654. EngAllocMem(
  1655. ULONG Flags,
  1656. ULONG MemSize,
  1657. ULONG Tag
  1658. );
  1659. VOID
  1660. APIENTRY
  1661. EngFreeMem(
  1662. PVOID Mem
  1663. );
  1664. //
  1665. // User mode memory Operations
  1666. //
  1667. VOID
  1668. APIENTRY
  1669. EngProbeForRead(
  1670. PVOID Address,
  1671. ULONG Length,
  1672. ULONG Alignment
  1673. );
  1674. VOID
  1675. APIENTRY
  1676. EngProbeForReadAndWrite(
  1677. PVOID Address,
  1678. ULONG Length,
  1679. ULONG Alignment
  1680. );
  1681. PVOID
  1682. APIENTRY
  1683. EngAllocUserMem(
  1684. ULONG cj,
  1685. ULONG tag
  1686. );
  1687. HANDLE
  1688. APIENTRY
  1689. EngSecureMem(
  1690. PVOID Address,
  1691. ULONG Length
  1692. );
  1693. VOID
  1694. APIENTRY
  1695. EngUnsecureMem(
  1696. HANDLE hSecure
  1697. );
  1698. VOID
  1699. APIENTRY
  1700. EngFreeUserMem(
  1701. PVOID pv
  1702. );
  1703. DWORD
  1704. APIENTRY
  1705. EngDeviceIoControl(
  1706. HANDLE hDevice,
  1707. DWORD dwIoControlCode,
  1708. LPVOID lpInBuffer,
  1709. DWORD nInBufferSize,
  1710. LPVOID lpOutBuffer,
  1711. DWORD nOutBufferSize,
  1712. LPDWORD lpBytesReturned
  1713. );
  1714. int
  1715. APIENTRY
  1716. EngMulDiv(
  1717. int a,
  1718. int b,
  1719. int c);
  1720. //
  1721. // Loading drivers and gettings entry points from them
  1722. //
  1723. HANDLE
  1724. APIENTRY
  1725. EngLoadImage(
  1726. LPWSTR pwszDriver
  1727. );
  1728. PVOID
  1729. APIENTRY
  1730. EngFindImageProcAddress(
  1731. HANDLE hModule,
  1732. LPSTR lpProcName
  1733. );
  1734. VOID
  1735. APIENTRY
  1736. EngUnloadImage(
  1737. HANDLE hModule
  1738. );
  1739. //
  1740. // callback for extra PDEV information
  1741. //
  1742. LPWSTR
  1743. APIENTRY
  1744. EngGetPrinterDataFileName(
  1745. HDEV hdev
  1746. );
  1747. LPWSTR
  1748. APIENTRY
  1749. EngGetDriverName(
  1750. HDEV hdev
  1751. );
  1752. typedef struct _TYPE1_FONT
  1753. {
  1754. HANDLE hPFM;
  1755. HANDLE hPFB;
  1756. ULONG ulIdentifier;
  1757. } TYPE1_FONT;
  1758. BOOL
  1759. APIENTRY
  1760. EngGetType1FontList(
  1761. HDEV hdev,
  1762. TYPE1_FONT *pType1Buffer,
  1763. ULONG cjType1Buffer,
  1764. PULONG pulLocalFonts,
  1765. PULONG pulRemoteFonts,
  1766. LARGE_INTEGER *pLastModified
  1767. );
  1768. //
  1769. // Manipulating resource sections
  1770. //
  1771. HANDLE
  1772. APIENTRY
  1773. EngLoadModule(
  1774. LPWSTR pwsz
  1775. );
  1776. PVOID
  1777. APIENTRY
  1778. EngMapModule(
  1779. HANDLE h,
  1780. PULONG pSize
  1781. );
  1782. PVOID
  1783. APIENTRY
  1784. EngFindResource(
  1785. HANDLE h,
  1786. int iName,
  1787. int iType,
  1788. PULONG pulSize
  1789. );
  1790. VOID
  1791. APIENTRY
  1792. EngFreeModule(
  1793. HANDLE h
  1794. );
  1795. //
  1796. // FontFile Callbacks
  1797. //
  1798. VOID
  1799. APIENTRY
  1800. EngUnmapFontFile(
  1801. ULONG iFile
  1802. );
  1803. BOOL
  1804. APIENTRY
  1805. EngMapFontFile(
  1806. ULONG iFile,
  1807. PULONG *ppjBuf,
  1808. ULONG *pcjBuf
  1809. );
  1810. //
  1811. // Semaphores
  1812. //
  1813. DECLARE_HANDLE(HSEMAPHORE);
  1814. HSEMAPHORE
  1815. APIENTRY
  1816. EngCreateSemaphore(
  1817. VOID
  1818. );
  1819. VOID
  1820. APIENTRY
  1821. EngAcquireSemaphore(
  1822. HSEMAPHORE hsem
  1823. );
  1824. VOID
  1825. APIENTRY
  1826. EngReleaseSemaphore(
  1827. HSEMAPHORE hsem
  1828. );
  1829. VOID
  1830. APIENTRY
  1831. EngDeleteSemaphore(
  1832. HSEMAPHORE hsem
  1833. );
  1834. VOID
  1835. APIENTRY
  1836. EngMultiByteToUnicodeN(
  1837. LPWSTR UnicodeString,
  1838. ULONG MaxBytesInUnicodeString,
  1839. PULONG BytesInUnicodeString,
  1840. PCHAR MultiByteString,
  1841. ULONG BytesInMultiByteString
  1842. );
  1843. VOID
  1844. APIENTRY
  1845. EngUnicodeToMultiByteN(
  1846. PCHAR MultiByteString,
  1847. ULONG MaxBytesInMultiByteString,
  1848. PULONG BytesInMultiByteString,
  1849. PWSTR UnicodeString,
  1850. ULONG BytesInUnicodeString
  1851. );
  1852. // for the spooler
  1853. DWORD
  1854. APIENTRY
  1855. EngGetPrinterData(
  1856. HANDLE hPrinter,
  1857. LPWSTR pValueName,
  1858. LPDWORD pType,
  1859. LPBYTE pData,
  1860. DWORD nSize,
  1861. LPDWORD pcbNeeded
  1862. );
  1863. DWORD
  1864. APIENTRY
  1865. EngSetPrinterData(
  1866. HANDLE hPrinter,
  1867. LPWSTR pType,
  1868. DWORD dwType,
  1869. LPBYTE lpbPrinterData,
  1870. DWORD cjPrinterData
  1871. );
  1872. BOOL
  1873. APIENTRY
  1874. EngGetForm(
  1875. HANDLE hPrinter,
  1876. LPWSTR pFormName,
  1877. DWORD Level,
  1878. LPBYTE pForm,
  1879. DWORD cbBuf,
  1880. LPDWORD pcbNeeded
  1881. );
  1882. BOOL
  1883. APIENTRY
  1884. EngWritePrinter(
  1885. HANDLE hPrinter,
  1886. LPVOID pBuf,
  1887. DWORD cbBuf,
  1888. LPDWORD pcWritten
  1889. );
  1890. BOOL
  1891. APIENTRY
  1892. EngGetPrinter(
  1893. HANDLE hPrinter,
  1894. DWORD dwLevel,
  1895. LPBYTE pPrinter,
  1896. DWORD cbBuf,
  1897. LPDWORD pcbNeeded
  1898. );
  1899. BOOL
  1900. APIENTRY
  1901. EngEnumForms(
  1902. HANDLE hPrinter,
  1903. DWORD Level,
  1904. LPBYTE pForm,
  1905. DWORD cbBuf,
  1906. LPDWORD pcbNeeded,
  1907. LPDWORD pcReturned
  1908. );
  1909. ULONG
  1910. APIENTRY
  1911. EngEscape(
  1912. HANDLE hPrinter,
  1913. ULONG iEsc,
  1914. ULONG cjIn,
  1915. PVOID pvIn,
  1916. ULONG cjOut,
  1917. PVOID pvOut
  1918. );
  1919. #ifdef _X86_
  1920. typedef struct _FLOATOBJ
  1921. {
  1922. ULONG ul1;
  1923. ULONG ul2;
  1924. } FLOATOBJ, *PFLOATOBJ;
  1925. VOID FLOATOBJ_SetFloat(PFLOATOBJ,FLOAT);
  1926. VOID FLOATOBJ_SetLong(PFLOATOBJ,LONG);
  1927. LONG FLOATOBJ_GetFloat(PFLOATOBJ);
  1928. LONG FLOATOBJ_GetLong(PFLOATOBJ);
  1929. VOID FLOATOBJ_AddFloat(PFLOATOBJ,FLOAT);
  1930. VOID FLOATOBJ_AddLong(PFLOATOBJ,LONG);
  1931. VOID FLOATOBJ_Add(PFLOATOBJ,PFLOATOBJ);
  1932. VOID FLOATOBJ_SubFloat(PFLOATOBJ,FLOAT);
  1933. VOID FLOATOBJ_SubLong(PFLOATOBJ,LONG);
  1934. VOID FLOATOBJ_Sub(PFLOATOBJ,PFLOATOBJ);
  1935. VOID FLOATOBJ_MulFloat(PFLOATOBJ,FLOAT);
  1936. VOID FLOATOBJ_MulLong(PFLOATOBJ,LONG);
  1937. VOID FLOATOBJ_Mul(PFLOATOBJ,PFLOATOBJ);
  1938. VOID FLOATOBJ_DivFloat(PFLOATOBJ,FLOAT);
  1939. VOID FLOATOBJ_DivLong(PFLOATOBJ,LONG);
  1940. VOID FLOATOBJ_Div(PFLOATOBJ,PFLOATOBJ);
  1941. VOID FLOATOBJ_Neg(PFLOATOBJ);
  1942. BOOL FLOATOBJ_EqualLong(PFLOATOBJ,LONG);
  1943. BOOL FLOATOBJ_GreaterThanLong(PFLOATOBJ,LONG);
  1944. BOOL FLOATOBJ_LessThanLong(PFLOATOBJ,LONG);
  1945. BOOL FLOATOBJ_Equal(PFLOATOBJ,PFLOATOBJ);
  1946. BOOL FLOATOBJ_GreaterThan(PFLOATOBJ,PFLOATOBJ);
  1947. BOOL FLOATOBJ_LessThan(PFLOATOBJ,PFLOATOBJ);
  1948. #else
  1949. // any platform that has support for floats in the kernel
  1950. typedef FLOAT FLOATOBJ;
  1951. typedef FLOAT *PFLOATOBJ;
  1952. #define FLOATOBJ_SetFloat(pf,f) {*(pf) = (f); }
  1953. #define FLOATOBJ_SetLong(pf,l) {*(pf) = (FLOAT)(l); }
  1954. #define FLOATOBJ_GetFloat(pf) *((PULONG)pf)
  1955. #define FLOATOBJ_GetLong(pf) (LONG)*(pf)
  1956. #define FLOATOBJ_AddFloat(pf,f) {*(pf) += f; }
  1957. #define FLOATOBJ_AddLong(pf,l) {*(pf) += (LONG)(l); }
  1958. #define FLOATOBJ_Add(pf,pf1) {*(pf) += *(pf1); }
  1959. #define FLOATOBJ_SubFloat(pf,f) {*(pf) -= f; }
  1960. #define FLOATOBJ_SubLong(pf,l) {*(pf) -= (LONG)(l); }
  1961. #define FLOATOBJ_Sub(pf,pf1) {*(pf) -= *(pf1); }
  1962. #define FLOATOBJ_MulFloat(pf,f) {*(pf) *= f; }
  1963. #define FLOATOBJ_MulLong(pf,l) {*(pf) *= (LONG)(l); }
  1964. #define FLOATOBJ_Mul(pf,pf1) {*(pf) *= *(pf1); }
  1965. #define FLOATOBJ_DivFloat(pf,f) {*(pf) /= f; }
  1966. #define FLOATOBJ_DivLong(pf,l) {*(pf) /= (LONG)(l); }
  1967. #define FLOATOBJ_Div(pf,pf1) {*(pf) /= *(pf1); }
  1968. #define FLOATOBJ_Neg(pf) {*(pf) = -*(pf); }
  1969. #define FLOATOBJ_EqualLong(pf,l) (*(pf) == (FLOAT)(l))
  1970. #define FLOATOBJ_GreaterThanLong(pf,l) (*(pf) > (FLOAT)(l))
  1971. #define FLOATOBJ_LessThanLong(pf,l) (*(pf) < (FLOAT)(l))
  1972. #define FLOATOBJ_Equal(pf,pf1) (*(pf) == *(pf1))
  1973. #define FLOATOBJ_GreaterThan(pf,pf1) (*(pf) > *(pf1))
  1974. #define FLOATOBJ_LessThan(pf,pf1) (*(pf) < *(pf1))
  1975. #endif // _FLOATOBJ_
  1976. typedef struct tagFLOATOBJ_XFORM
  1977. {
  1978. FLOATOBJ eM11;
  1979. FLOATOBJ eM12;
  1980. FLOATOBJ eM21;
  1981. FLOATOBJ eM22;
  1982. FLOATOBJ eDx;
  1983. FLOATOBJ eDy;
  1984. } FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
  1985. ULONG
  1986. APIENTRY
  1987. XFORMOBJ_iGetFloatObjXform(
  1988. XFORMOBJ *pxo,
  1989. FLOATOBJ_XFORM * pfxo);
  1990. // SORT specific defines
  1991. typedef int (__cdecl *SORTCOMP)(const void *pv1, const void *pv2);
  1992. VOID
  1993. APIENTRY
  1994. EngSort(
  1995. PBYTE pjBuf,
  1996. ULONG c,
  1997. ULONG cjElem,
  1998. SORTCOMP pfnComp);
  1999. typedef struct _ENG_TIME_FIELDS {
  2000. USHORT usYear; // range [1601...]
  2001. USHORT usMonth; // range [1..12]
  2002. USHORT usDay; // range [1..31]
  2003. USHORT usHour; // range [0..23]
  2004. USHORT usMinute; // range [0..59]
  2005. USHORT usSecond; // range [0..59]
  2006. USHORT usMilliseconds;// range [0..999]
  2007. USHORT usWeekday; // range [0..6] == [Sunday..Saturday]
  2008. } ENG_TIME_FIELDS, *PENG_TIME_FIELDS;
  2009. VOID EngQueryLocalTime(
  2010. PENG_TIME_FIELDS);
  2011. FD_GLYPHSET *
  2012. APIENTRY
  2013. EngComputeGlyphSet(
  2014. INT nCodePage,
  2015. INT nFirstChar,
  2016. INT cChars
  2017. );
  2018. INT
  2019. APIENTRY
  2020. EngMultiByteToWideChar(
  2021. UINT CodePage,
  2022. LPWSTR WideCharString,
  2023. INT BytesInWideCharString,
  2024. LPSTR MultiByteString,
  2025. INT BytesInMultiByteString
  2026. );
  2027. INT
  2028. APIENTRY
  2029. EngWideCharToMultiByte(
  2030. UINT CodePage,
  2031. LPWSTR WideCharString,
  2032. INT BytesInWideCharString,
  2033. LPSTR MultiByteString,
  2034. INT BytesInMultiByteString
  2035. );
  2036. VOID
  2037. APIENTRY
  2038. EngGetCurrentCodePage(
  2039. PUSHORT OemCodePage,
  2040. PUSHORT AnsiCodePage
  2041. );
  2042. HANDLE
  2043. APIENTRY
  2044. EngLoadModuleForWrite(
  2045. LPWSTR pwsz,
  2046. ULONG cjSizeOfModule
  2047. );
  2048. BOOL
  2049. APIENTRY
  2050. EngGetFileChangeTime(
  2051. HANDLE h,
  2052. LARGE_INTEGER *pChangeTime
  2053. );
  2054. LPWSTR
  2055. APIENTRY
  2056. EngGetFilePath(
  2057. HANDLE h
  2058. );
  2059. #endif // _WINDDI_