|
|
1.1 root 1: /*++ BUILD Version: 0001
2:
3: Copyright (c) 1985-91, Microsoft Corporation
4:
5: Module Name:
6:
7: winddi.h
8:
9: Abstract:
10:
11: Private entry points, defines and types for NTWIN DDI.
12:
13: --*/
14:
15: #ifndef _WINDDI_
16: #define _WINDDI_
17:
18:
19: typedef ULONG FLONG;
20: typedef USHORT FSHORT;
21: typedef BYTE FBYTE;
22: typedef ptrdiff_t PTRDIFF;
23: typedef PTRDIFF *PPTRDIFF;
24: typedef size_t SIZE_T;
25: typedef int (*PFN)();
26: typedef LONG FIX;
27: typedef FIX *PFIX;
28: typedef ULONG ROP4;
29: typedef ULONG MIX;
30:
31: typedef WCHAR *PWSZ; // pwsz, 0x0000 terminated UNICODE strings only
32: typedef CONST WCHAR *PCWSZ; // pwsz, 0x0000 terminated UNICODE strings only
33:
34: typedef ULONG HGLYPH;
35: typedef HGLYPH *PHGLYPH;
36: #define HGLYPH_INVALID ((HGLYPH)-1)
37:
38: typedef ULONG IDENT;
39:
40:
41: typedef struct _POINTE /* pte */
42: {
43: FLOAT x;
44: FLOAT y;
45: } POINTE, *PPOINTE;
46:
47: typedef union _FLOAT_LONG
48: {
49: FLOAT e;
50: LONG l;
51: } FLOAT_LONG, *PFLOAT_LONG;
52:
53: typedef struct tagPOINTFIX
54: {
55: FIX x;
56: FIX y;
57: } POINTFIX, *PPOINTFIX;
58:
59: typedef struct tagRECTFX
60: {
61: FIX xLeft;
62: FIX yTop;
63: FIX xRight;
64: FIX yBottom;
65: } RECTFX, *PRECTFX;
66:
67:
68: DECLARE_HANDLE(HBM);
69: DECLARE_HANDLE(HSEM);
70: DECLARE_HANDLE(HDEV);
71: DECLARE_HANDLE(HPDEV);
72: DECLARE_HANDLE(HJNL);
73: DECLARE_HANDLE(HSURF);
74: DECLARE_HANDLE(DHSURF);
75: DECLARE_HANDLE(DHPDEV);
76:
77: typedef HSURF *PHSURF;
78:
79:
80: #define BLTOFXOK(x) (((x) < 0x07FFFFFF) && ((x) > -0x07FFFFFF))
81: #define LTOFX(x) ((x)<<4)
82:
83: #define FXTOL(x) ((x)>>4)
84: #define FXTOLFLOOR(x) ((x)>>4)
85: #define FXTOLCEILING(x) ((x + 0x0F)>>4)
86: #define FXTOLROUND(x) ((((x) >> 3) + 1) >> 1)
87:
88: typedef struct _FD_DEVICEMETRICS { // devm
89: FLONG flRealizedType;
90: POINTE pteBase;
91: POINTE pteSide;
92: LONG lD;
93: FIX fxMaxAscender;
94: FIX fxMaxDescender;
95: POINTL ptlUnderline1;
96: POINTL ptlStrikeOut;
97: POINTL ptlULThickness;
98: POINTL ptlSOThickness;
99: ULONG cxMax; // max pel width of bitmaps
100: } FD_DEVICEMETRICS, *PFD_DEVICEMETRICS;
101:
102: typedef struct _LIGATURE { /* lig */
103: ULONG culSize;
104: PWSZ pwsz;
105: ULONG chglyph;
106: HGLYPH ahglyph[1];
107: } LIGATURE, *PLIGATURE;
108:
109: typedef struct _FD_LIGATURE {
110: ULONG culThis;
111: ULONG ulType;
112: ULONG cLigatures;
113: LIGATURE alig[1];
114: } FD_LIGATURE;
115:
116:
117: // glyph handle must be 32 bit
118:
119:
120: // signed 16 bit integer type denoting number of FUnit's
121:
122: typedef SHORT FWORD;
123:
124: typedef LARGE_INTEGER QFIX; // qf
125:
126: // point in the 32.32 bit precission
127:
128: typedef struct _POINTQF // ptq
129: {
130: QFIX x;
131: QFIX y;
132: } POINTQF, *PPOINTQF;
133:
134: //. Structures
135:
136:
137: // devm.flRealizedType flags
138:
139: // FDM_TYPE_ZERO_BEARINGS // all glyphs have zero a and c spaces
140:
141: // the following two features refer to all glyphs in this font realization
142:
143: // FDM_TYPE_CHAR_INC_EQUAL_BM_BASE // base width == cx for horiz, == cy for vert.
144: // FDM_TYPE_MAXEXT_EQUAL_BM_SIDE // side width == cy for horiz, == cx for vert.
145:
146: #define FDM_TYPE_BM_SIDE_CONST 0x00000001
147: #define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE 0x00000002
148: #define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE 0x00000004
149: #define FDM_TYPE_ZERO_BEARINGS 0x00000008
150: #define FDM_TYPE_CONST_BEARINGS 0x00000010
151:
152:
153: // structures for describing a supported set of glyphs in a font
154:
155: typedef struct _WCRUN {
156: WCHAR wcLow; // lowest character in run inclusive
157: USHORT cGlyphs; // wcHighInclusive = wcLow + cGlyphs - 1;
158: HGLYPH *phg; // pointer to an array of cGlyphs HGLYPH's
159: } WCRUN, *PWCRUN;
160:
161: // If phg is set to (HGLYPH *)NULL, for all wc's in this particular run
162: // the handle can be computed as simple zero extension:
163: // HGLYPH hg = (HGLYPH) wc;
164: //
165: // If phg is not NULL, memory pointed to by phg, allocated by the driver,
166: // WILL NOT MOVE.
167:
168:
169: typedef struct _FD_GLYPHSET {
170: ULONG cjThis; // size of this structure in butes
171: FLONG flAccel; // accel flags, bits to be explained below
172: ULONG cGlyphsSupported; // sum over all wcrun's of wcrun.cGlyphs
173: ULONG cRuns;
174: WCRUN awcrun[1]; // an array of cRun WCRUN structures
175: } FD_GLYPHSET, *PFD_GLYPHSET;
176:
177:
178: #define GS_UNICODE_HANDLES 0x00000001
179:
180: // If this bit is set, for ALL WCRUNS in this FD_GLYPHSET the
181: // handles are
182: // obtained by zero extending unicode code points of
183: // the corresponding supported glyphs, i.e. all gs.phg's are NULL
184:
185: // ligatures
186:
187:
188: typedef struct _FD_KERNINGPAIR {
189: WCHAR wcFirst;
190: WCHAR wcSecond;
191: FWORD fwdKern;
192: } FD_KERNINGPAIR;
193:
194: // context information
195:
196: typedef struct _FD_XFORM {
197: FLOAT eXX;
198: FLOAT eXY;
199: FLOAT eYX;
200: FLOAT eYY;
201: } FD_XFORM, *PFD_XFORM;
202:
203: // An extra field passed to DrvQueryFontData with the DEVICEMETRICS.
204:
205: typedef struct _FD_REALIZEEXTRA
206: {
207: FD_XFORM fdxQuantized;
208: LONG lExtLeading;
209: LONG alReserved[4];
210: } FD_REALIZEEXTRA;
211:
212: //
213: // IFIMETRICS constants
214: //
215:
216: #define FM_VERSION_NUMBER 0x0
217:
218: //
219: // IFIMETRICS::fsType flags
220: //
221: #define FM_TYPE_LICENSED 0x1
222: #define FM_READONLY_EMBED 0x2
223: #define FM_NO_EMBEDDING FM_TYPE_LICENSED
224:
225: //
226: // IFIMETRICS::flInfo flags
227: //
228: #define FM_INFO_TECH_TRUETYPE 0x00000001
229: #define FM_INFO_TECH_BITMAP 0x00000002
230: #define FM_INFO_TECH_STROKE 0x00000004
231: #define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008
232: #define FM_INFO_ARB_XFORMS 0x00000010
233: #define FM_INFO_1BBP 0x00000020
234: #define FM_INFO_4BBP 0x00000040
235: #define FM_INFO_8BBP 0x00000080
236: #define FM_INFO_16BBP 0x00000100
237: #define FM_INFO_24BBP 0x00000200
238: #define FM_INFO_32BBP 0x00000400
239: #define FM_INFO_INTEGER_WIDTH 0x00000800
240: #define FM_INFO_CONSTANT_WIDTH 0x00001000
241: #define FM_INFO_NOT_CONTIGUOUS 0x00002000
242: #define FM_INFO_PID_EMBEDDED 0x00004000
243: #define FM_INFO_RETURNS_OUTLINES 0x00008000
244: #define FM_INFO_RETURNS_STROKES 0x00010000
245: #define FM_INFO_RETURNS_BITMAPS 0x00020000
246: #define FM_INFO_UNICODE_COMPLIANT 0x00040000
247: #define FM_INFO_RIGHT_HANDED 0x00080000
248: #define FM_INFO_INTEGRAL_SCALING 0x00100000
249: #define FM_INFO_90DEGREE_ROTATIONS 0x00200000
250: #define FM_INFO_OPTICALLY_FIXED_PITCH 0x00400000
251: #define FM_INFO_DO_NOT_ENUMERATE 0x00800000
252: #define FM_INFO_ISOTROPIC_SCALING_ONLY 0x01000000
253: #define FM_INFO_ANISOTROPIC_SCALING_ONLY 0x02000000
254: #define FM_INFO_TID_EMBEDDED 0x04000000
255: #define FM_INFO_FAMILY_EQUIV 0x08000000
256:
257:
258: //
259: // Useful combinations of IFIMETRICS::flInfo flags
260: //
261:
262: #define FM_INFO_TECH_SET ( FM_INFO_TECH_TRUETYPE | \
263: FM_INFO_TECH_BITMAP | \
264: FM_INFO_TECH_STROKE | \
265: FM_INFO_TECH_OUTLINE_NOT_TRUETYPE )
266:
267: #define FM_INFO_ALL_TT_FLAGS ( FM_INFO_TECH_TRUETYPE | \
268: FM_INFO_ARB_XFORMS | \
269: FM_INFO_RETURNS_OUTLINES | \
270: FM_INFO_RETURNS_BITMAPS | \
271: FM_INFO_1BBP )
272:
273: //
274: // IFIMETRICS::ulPanoseCulture
275: //
276: #define FM_PANOSE_CULTURE_LATIN 0x0
277:
278:
279: //
280: // IFMETRICS::fsSelection flags
281: //
282: #define FM_SEL_ITALIC 0x0001
283: #define FM_SEL_UNDERSCORE 0x0002
284: #define FM_SEL_NEGATIVE 0x0004
285: #define FM_SEL_OUTLINED 0x0008
286: #define FM_SEL_STRIKEOUT 0x0010
287: #define FM_SEL_BOLD 0x0020
288: #define FM_SEL_REGULAR 0x0040
289:
290: //
291: // The FONTDIFF structure contains all of the fields that could
292: // possibly change under simulation
293: //
294: typedef struct _FONTDIFF {
295: BYTE jReserved1; // 0x0
296: BYTE jReserved2; // 0x1
297: BYTE jReserved3; // 0x2
298: BYTE bWeight; // 0x3 Panose Weight
299: USHORT usWinWeight; // 0x4
300: FSHORT fsSelection; // 0x6
301: FWORD fwdAveCharWidth; // 0x8
302: FWORD fwdMaxCharInc; // 0xA
303: POINTL ptlCaret; // 0xC
304: } FONTDIFF;
305:
306: typedef struct _FONTSIM {
307: PTRDIFF dpBold; // offset from beginning of FONTSIM to FONTDIFF
308: PTRDIFF dpItalic; // offset from beginning of FONTSIM to FONTDIFF
309: PTRDIFF dpBoldItalic; // offset from beginning of FONTSIM to FONTDIFF
310: } FONTSIM;
311:
312: #define IFI_RESERVED 4 // number of reserved longs in IFIMETRICS
313:
314: //
315: // This entry in the reserved array is used to hold the PID or TID of the
316: // client that created an embeded true type font. Drivers should be careful
317: // not to use it.
318: //
319:
320: #define IFI_RESERVED_EMBED_ID 0
321:
322: //
323: // This entry of the reserved array is used to return the italics angle.
324: //
325:
326: #define IFI_RESERVED_ITALIC_ANGLE 1
327:
328: //
329: // This entry of the reserved array is used to return the character bias.
330: //
331:
332: #define IFI_RESERVED_CHARBIAS 2
333:
334: typedef struct _IFIMETRICS {
335: ULONG cjThis; // includes attached information
336: ULONG ulVersion;
337: PTRDIFF dpwszFamilyName;
338: PTRDIFF dpwszStyleName;
339: PTRDIFF dpwszFaceName;
340: PTRDIFF dpwszUniqueName;
341: PTRDIFF dpFontSim;
342: LONG alReserved[IFI_RESERVED];
343: BYTE jWinCharSet; // as in LOGFONT::lfCharSet
344: BYTE jWinPitchAndFamily; // as in LOGFONT::lfPitchAndFamily
345: USHORT usWinWeight; // as in LOGFONT::lfWeight
346: ULONG flInfo; // see above
347: USHORT fsSelection; // see above
348: USHORT fsType; // see above
349: FWORD fwdUnitsPerEm; // em height
350: FWORD fwdLowestPPEm; // readable limit
351: FWORD fwdWinAscender;
352: FWORD fwdWinDescender;
353: FWORD fwdMacAscender;
354: FWORD fwdMacDescender;
355: FWORD fwdMacLineGap;
356: FWORD fwdTypoAscender;
357: FWORD fwdTypoDescender;
358: FWORD fwdTypoLineGap;
359: FWORD fwdAveCharWidth;
360: FWORD fwdMaxCharInc;
361: FWORD fwdCapHeight;
362: FWORD fwdXHeight;
363: FWORD fwdSubscriptXSize;
364: FWORD fwdSubscriptYSize;
365: FWORD fwdSubscriptXOffset;
366: FWORD fwdSubscriptYOffset;
367: FWORD fwdSuperscriptXSize;
368: FWORD fwdSuperscriptYSize;
369: FWORD fwdSuperscriptXOffset;
370: FWORD fwdSuperscriptYOffset;
371: FWORD fwdUnderscoreSize;
372: FWORD fwdUnderscorePosition;
373: FWORD fwdStrikeoutSize;
374: FWORD fwdStrikeoutPosition;
375: BYTE chFirstChar; // for win 3.1 compatibility
376: BYTE chLastChar; // for win 3.1 compatibility
377: BYTE chDefaultChar; // for win 3.1 compatibility
378: BYTE chBreakChar; // for win 3.1 compatibility
379: WCHAR wcFirstChar; // lowest supported code in Unicode set
380: WCHAR wcLastChar; // highest supported code in Unicode set
381: WCHAR wcDefaultChar;
382: WCHAR wcBreakChar;
383: POINTL ptlBaseline; //
384: POINTL ptlAspect; // designed aspect ratio (bitmaps)
385: POINTL ptlCaret; // points along caret
386: RECTL rclFontBox; // bounding box for all glyphs (font space)
387: BYTE achVendId[4]; // as per TrueType
388: ULONG cKerningPairs;
389: ULONG ulPanoseCulture;
390: PANOSE panose;
391: } IFIMETRICS, *PIFIMETRICS;
392:
393:
394:
395:
396: /**************************************************************************\
397: *
398: \**************************************************************************/
399:
400: #define DDI_DRIVER_VERSION 0x00010000
401: #define DDI_ERROR 0xFFFFFFFF
402:
403: typedef struct _DRVFN /* drvfn */
404: {
405: ULONG iFunc;
406: PFN pfn;
407: } DRVFN, *PDRVFN;
408:
409: /* Required functions */
410:
411: #define INDEX_DrvEnablePDEV 0L
412: #define INDEX_DrvCompletePDEV 1L
413: #define INDEX_DrvDisablePDEV 2L
414: #define INDEX_DrvEnableSurface 3L
415: #define INDEX_DrvDisableSurface 4L
416:
417: /* Other functions */
418:
419: #define INDEX_DrvAssertMode 5L
420: #define INDEX_UNUSED4 6L
421: #define INDEX_UNUSED3 7L
422: #define INDEX_DrvRestartPDEV 8L
423: #define INDEX_DrvQueryResource 9L
424: #define INDEX_DrvCreateDeviceBitmap 10L
425: #define INDEX_DrvDeleteDeviceBitmap 11L
426: #define INDEX_DrvRealizeBrush 12L
427: #define INDEX_DrvDitherColor 13L
428: #define INDEX_DrvStrokePath 14L
429: #define INDEX_DrvFillPath 15L
430: #define INDEX_DrvStrokeAndFillPath 16L
431: #define INDEX_DrvPaint 17L
432: #define INDEX_DrvBitBlt 18L
433: #define INDEX_DrvCopyBits 19L
434: #define INDEX_DrvStretchBlt 20L
435: #define INDEX_DrvPlgBlt 21L
436: #define INDEX_DrvSetPalette 22L
437: #define INDEX_DrvTextOut 23L
438: #define INDEX_DrvEscape 24L
439: #define INDEX_DrvDrawEscape 25L
440: #define INDEX_DrvQueryFont 26L
441: #define INDEX_DrvQueryFontTree 27L
442: #define INDEX_DrvQueryFontData 28L
443: #define INDEX_DrvSetPointerShape 29L
444: #define INDEX_DrvMovePointer 30L
445: #define INDEX_DrvUNUSED2 31L
446: #define INDEX_DrvSendPage 32L
447: #define INDEX_DrvStartPage 33L
448: #define INDEX_DrvEndDoc 34L
449: #define INDEX_DrvStartDoc 35L
450: #define INDEX_DrvQueryObjectData 36L
451: #define INDEX_DrvGetGlyphMode 37L
452: #define INDEX_DrvSynchronize 38L
453: #define INDEX_DrvUNUSED1 39L
454: #define INDEX_DrvSaveScreenBits 40L
455: #define INDEX_DrvGetModes 41L
456: #define INDEX_DrvFree 42L
457: #define INDEX_DrvDestroyFont 43L
458: #define INDEX_DrvQueryFontCaps 44L
459: #define INDEX_DrvLoadFontFile 45L
460: #define INDEX_DrvUnloadFontFile 46L
461: #define INDEX_DrvFontManagement 47L
462: #define INDEX_DrvQueryTrueTypeTable 48L
463: #define INDEX_DrvQueryTrueTypeOutline 49L
464: #define INDEX_DrvGetTrueTypeFile 50L
465: #define INDEX_DrvQueryFontFile 51L
466: #define INDEX_UNUSED5 52L
467: #define INDEX_DrvQueryAdvanceWidths 53L
468:
469: /* The total number of dispatched functions */
470:
471: #define INDEX_LAST 54L
472:
473: typedef struct tagDRVENABLEDATA
474: {
475: ULONG iDriverVersion;
476: ULONG c;
477: DRVFN *pdrvfn;
478: } DRVENABLEDATA, *PDRVENABLEDATA;
479:
480: typedef struct tagDEVINFO
481: {
482: FLONG flGraphicsCaps;
483: LOGFONTW lfDefaultFont;
484: LOGFONTW lfAnsiVarFont;
485: LOGFONTW lfAnsiFixFont;
486: ULONG cFonts;
487: ULONG iDitherFormat;
488: USHORT cxDither;
489: USHORT cyDither;
490: HPALETTE hpalDefault;
491: } DEVINFO, *PDEVINFO;
492:
493: #define GCAPS_BEZIERS 0x00000001
494: #define GCAPS_GEOMETRICWIDE 0x00000002
495: #define GCAPS_ALTERNATEFILL 0x00000004
496: #define GCAPS_WINDINGFILL 0x00000008
497: #define GCAPS_HALFTONE 0x00000010
498: #define GCAPS_COLOR_DITHER 0x00000020
499: #define GCAPS_HORIZSTRIKE 0x00000040
500: #define GCAPS_VERTSTRIKE 0x00000080
501: #define GCAPS_OPAQUERECT 0x00000100
502: #define GCAPS_VECTORFONT 0x00000200
503: #define GCAPS_MONO_DITHER 0x00000400
504: #define GCAPS_ASYNCCHANGE 0x00000800
505: #define GCAPS_ASYNCMOVE 0x00001000
506: #define GCAPS_ARBRUSHOPAQUE 0x00008000
507: #define GCAPS_HIGHRESTEXT 0x00040000
508: #define GCAPS_PALMANAGED 0x00080000
509: #define GCAPS_TRAPPAINT 0x00100000
510: #define GCAPS_DITHERONREALIZE 0x00200000
511:
512: typedef struct _HCINFO
513: {
514: CHAR szFormname[32];
515: LONG cx;
516: LONG cy;
517: LONG xLeftClip;
518: LONG yBottomClip;
519: LONG xRightClip;
520: LONG yTopClip;
521: LONG xPels;
522: LONG yPels;
523: FLONG flAttributes;
524: } HCINFO, *PHCINFO;
525:
526: #define HCAPS_CURRENT 0x00000001
527:
528: typedef struct _LINEATTRS
529: {
530: FLONG fl;
531: ULONG iJoin;
532: ULONG iEndCap;
533: FLOAT_LONG elWidth;
534: FLOAT eMiterLimit;
535: ULONG cstyle;
536: PFLOAT_LONG pstyle;
537: FLOAT_LONG elStyleState;
538: } LINEATTRS, *PLINEATTRS;
539:
540: #define LA_GEOMETRIC 0x00000001
541: #define LA_ALTERNATE 0x00000002
542: #define LA_STARTGAP 0x00000004
543:
544: #define JOIN_ROUND 0L
545: #define JOIN_BEVEL 1L
546: #define JOIN_MITER 2L
547:
548: #define ENDCAP_ROUND 0L
549: #define ENDCAP_SQUARE 1L
550: #define ENDCAP_BUTT 2L
551:
552: typedef struct _TRAPEZOID
553: {
554: LONG iScanTop;
555: LONG iScanBottom;
556: POINTFIX ptfxLeftLo;
557: POINTFIX ptfxLeftHi;
558: POINTFIX ptfxRightLo;
559: POINTFIX ptfxRightHi;
560: } TRAPEZOID;
561:
562:
563: typedef LONG LDECI4;
564:
565: typedef struct _CIECHROMA
566: {
567: LDECI4 x;
568: LDECI4 y;
569: LDECI4 Y;
570: }CIECHROMA;
571:
572: typedef struct _COLORINFO
573: {
574: CIECHROMA Red;
575: CIECHROMA Green;
576: CIECHROMA Blue;
577: CIECHROMA Cyan;
578: CIECHROMA Magenta;
579: CIECHROMA Yellow;
580: CIECHROMA AlignmentWhite;
581:
582: LDECI4 RedGamma;
583: LDECI4 GreenGamma;
584: LDECI4 BlueGamma;
585:
586: LDECI4 MagentaInCyanDye;
587: LDECI4 YellowInCyanDye;
588: LDECI4 CyanInMagentaDye;
589: LDECI4 YellowInMagentaDye;
590: LDECI4 CyanInYellowDye;
591: LDECI4 MagentaInYellowDye;
592: }COLORINFO, *PCOLORINFO;
593:
594: // Allowed values for GDIINFO.ulPrimaryOrder.
595:
596: #define PRIMARY_ORDER_ABC 0
597: #define PRIMARY_ORDER_ACB 1
598: #define PRIMARY_ORDER_BAC 2
599: #define PRIMARY_ORDER_BCA 3
600: #define PRIMARY_ORDER_CBA 4
601: #define PRIMARY_ORDER_CAB 5
602:
603: // Allowed values for GDIINFO.ulHTPatternSize.
604:
605: #define HT_PATSIZE_2x2 0
606: #define HT_PATSIZE_2x2_M 1
607: #define HT_PATSIZE_4x4 2
608: #define HT_PATSIZE_4x4_M 3
609: #define HT_PATSIZE_6x6 4
610: #define HT_PATSIZE_6x6_M 5
611: #define HT_PATSIZE_8x8 6
612: #define HT_PATSIZE_8x8_M 7
613: #define HT_PATSIZE_10x10 8
614: #define HT_PATSIZE_10x10_M 9
615: #define HT_PATSIZE_12x12 10
616: #define HT_PATSIZE_12x12_M 11
617: #define HT_PATSIZE_14x14 12
618: #define HT_PATSIZE_14x14_M 13
619: #define HT_PATSIZE_16x16 14
620: #define HT_PATSIZE_16x16_M 15
621: #define HT_PATSIZE_MAX_INDEX HTPAT_SIZE_16x16_M
622: #define HT_PATSIZE_DEFAULT HTPAT_SIZE_4x4_M
623:
624: // Allowed values for ulHTOutputFormat.
625:
626: #define HT_FORMAT_1BPP 0
627: #define HT_FORMAT_4BPP 2
628: #define HT_FORMAT_4BPP_IRGB 3
629: #define HT_FORMAT_8BPP 4
630: #define HT_FORMAT_16BPP 5
631: #define HT_FORMAT_24BPP 6
632: #define HT_FORMAT_32BPP 7
633:
634: // Allowed values for GDIINFO.flHTFlags.
635:
636: #define HT_FLAG_SQUARE_DEVICE_PEL 0x00000001
637: #define HT_FLAG_HAS_BLACK_DYE 0x00000002
638: #define HT_FLAG_ADDITIVE_PRIMS 0x00000004
639: #define HT_FLAG_OUTPUT_CMY 0x00000100
640:
641: typedef struct _GDIINFO
642: {
643: ULONG ulVersion;
644: ULONG ulTechnology;
645: ULONG ulHorzSize;
646: ULONG ulVertSize;
647: ULONG ulHorzRes;
648: ULONG ulVertRes;
649: ULONG cBitsPixel;
650: ULONG cPlanes;
651: ULONG ulNumColors;
652: ULONG flRaster;
653: ULONG ulLogPixelsX;
654: ULONG ulLogPixelsY;
655: ULONG flTextCaps;
656:
657: ULONG ulDACRed;
658: ULONG ulDACGreen;
659: ULONG ulDACBlue;
660:
661: ULONG ulAspectX;
662: ULONG ulAspectY;
663: ULONG ulAspectXY;
664:
665: LONG xStyleStep;
666: LONG yStyleStep;
667: LONG denStyleStep;
668:
669: POINTL ptlPhysOffset;
670: SIZEL szlPhysSize;
671:
672: ULONG ulNumPalReg;
673:
674: // These fields are for halftone initialization.
675:
676: COLORINFO ciDevice;
677: ULONG ulDevicePelsDPI;
678: ULONG ulPrimaryOrder;
679: ULONG ulHTPatternSize;
680: ULONG ulHTOutputFormat;
681: ULONG flHTFlags;
682:
683: } GDIINFO, *PGDIINFO;
684:
685: /*
686: * User objects
687: */
688:
689: typedef struct _BRUSHOBJ
690: {
691: ULONG iSolidColor;
692: PVOID pvRbrush;
693: } BRUSHOBJ;
694:
695: typedef struct _CLIPOBJ
696: {
697: ULONG iUniq;
698: RECTL rclBounds;
699: BYTE iDComplexity;
700: BYTE iFComplexity;
701: BYTE iMode;
702: BYTE fjOptions;
703: } CLIPOBJ;
704:
705: typedef struct _DDAOBJ
706: {
707: ULONG ulReserved;
708: } DDAOBJ;
709:
710: typedef struct _FONTOBJ
711: {
712: ULONG iUniq;
713: ULONG iFace;
714: ULONG cxMax;
715: FLONG flFontType;
716: ULONG iTTUniq;
717: ULONG iFile;
718: SIZE sizLogResPpi;
719: ULONG ulStyleSize;
720: PVOID pvConsumer;
721: PVOID pvProducer;
722: } FONTOBJ;
723:
724: //
725: // FONTOBJ::flFontType
726: //
727: #define FO_TYPE_RASTER RASTER_FONTTYPE /* 0x1 */
728: #define FO_TYPE_DEVICE DEVICE_FONTTYPE /* 0x2 */
729: #define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE /* 0x4 */
730: #define FO_SIM_BOLD 0x00002000
731: #define FO_SIM_ITALIC 0x00004000
732: #define FO_EM_HEIGHT 0x00008000
733: #define FO_NO_HINTING 0x00010000
734:
735: typedef struct _PALOBJ
736: {
737: ULONG ulReserved;
738: } PALOBJ;
739:
740: typedef struct _PATHOBJ
741: {
742: FLONG fl;
743: ULONG cCurves;
744: } PATHOBJ;
745:
746: typedef struct _SURFOBJ
747: {
748: DHSURF dhsurf;
749: HSURF hsurf;
750: DHPDEV dhpdev;
751: HDEV hdev;
752: SIZEL sizlBitmap;
753: ULONG cjBits;
754: PVOID pvBits;
755: PVOID pvScan0;
756: LONG lDelta;
757: ULONG iUniq;
758: ULONG iBitmapFormat;
759: USHORT iType;
760: USHORT fjBitmap;
761: } SURFOBJ;
762:
763: typedef struct _XFORMOBJ
764: {
765: ULONG ulReserved;
766: } XFORMOBJ;
767:
768: typedef struct _XLATEOBJ
769: {
770: ULONG iUniq;
771: FLONG flXlate;
772: USHORT iSrcType;
773: USHORT iDstType;
774: ULONG cEntries;
775: ULONG *pulXlate;
776: } XLATEOBJ;
777:
778: /*
779: * BRUSHOBJ callbacks
780: */
781:
782: PVOID BRUSHOBJ_pvAllocRbrush(
783: BRUSHOBJ *pbo,
784: ULONG cj);
785:
786: PVOID BRUSHOBJ_pvGetRbrush(BRUSHOBJ *pbo);
787:
788: /*
789: * CLIPOBJ callbacks
790: */
791:
792: #define DC_TRIVIAL 0
793: #define DC_RECT 1
794: #define DC_COMPLEX 3
795:
796: #define FC_RECT 1
797: #define FC_RECT4 2
798: #define FC_COMPLEX 3
799:
800: #define TC_RECTANGLES 0
801: #define TC_TRAPEZOIDS 1
802: #define TC_PATHOBJ 2
803:
804: #define OC_BANK_CLIP 1
805:
806: #define CT_RECTANGLES 0L
807: #define CT_TRAPEZOIDS 1L
808: #define CT_NOTIFYCHANGE 2L
809:
810: #define CD_RIGHTDOWN 0L
811: #define CD_LEFTDOWN 1L
812: #define CD_RIGHTUP 2L
813: #define CD_LEFTUP 3L
814: #define CD_ANY 4L
815:
816: #define CD_LEFTWARDS 1L
817: #define CD_UPWARDS 2L
818:
819: typedef struct _ENUMRECTS
820: {
821: ULONG c;
822: RECTL arcl[1];
823: } ENUMRECTS;
824:
825: typedef struct _ENUMTRAPS
826: {
827: ULONG c;
828: TRAPEZOID atrap[1];
829: } ENUMTRAPS;
830:
831: ULONG CLIPOBJ_cEnumStart(
832: CLIPOBJ *pco,
833: BOOL bAll,
834: ULONG iType,
835: ULONG iDirection,
836: ULONG cLimit);
837:
838: BOOL CLIPOBJ_bEnum(
839: CLIPOBJ *pco,
840: ULONG cj,
841: ULONG *pul);
842:
843: PATHOBJ *CLIPOBJ_ppoGetPath(CLIPOBJ* pco);
844:
845: /*
846: * DDAOBJ callbacks
847: */
848:
849: #define JD_ENUM_LINE 0L
850: #define JD_ENUM_TRAPEZOID 1L
851: #define JD_ENUM_ELLIPSE 2L
852:
853: typedef struct _DDALIST
854: {
855: LONG yTop;
856: LONG yBottom;
857: LONG axPairs[2];
858: } DDALIST;
859:
860: BOOL DDAOBJ_bEnum(
861: DDAOBJ *pdo,
862: PVOID pv,
863: ULONG cj,
864: DDALIST *pddal,
865: ULONG iType);
866:
867: /*
868: * FONTOBJ callbacks
869: */
870:
871: typedef struct _GLYPHBITS
872: {
873: POINTL ptlOrigin;
874: SIZEL sizlBitmap;
875: BYTE aj[1];
876: } GLYPHBITS;
877:
878: #define FO_HGLYPHS 0L
879: #define FO_GLYPHBITS 1L
880: #define FO_PATHOBJ 2L
881:
882: #define FD_NEGATIVE_FONT 1L
883:
884: #define FO_DEVICE_FONT 1L
885: #define FO_OUTLINE_CAPABLE 2L
886:
887: typedef union _GLYPHDEF
888: {
889: GLYPHBITS *pgb;
890: PATHOBJ *ppo;
891: } GLYPHDEF;
892:
893: typedef struct _GLYPHPOS /* gp */
894: {
895: HGLYPH hg;
896: GLYPHDEF *pgdf;
897: POINTL ptl;
898: } GLYPHPOS,*PGLYPHPOS;
899:
900:
901: // individual glyph data
902:
903: // r is a unit vector along the baseline in device coordinates.
904: // s is a unit vector in the ascent direction in device coordinates.
905: // A, B, and C, are simple tranforms of the notional space versions into
906: // (28.4) device coordinates. The dot products of those vectors with r
907: // are recorded here. Note that the high words of ptqD are also 28.4
908: // device coordinates. The low words provide extra accuracy.
909:
910: typedef struct _GLYPHDATA {
911: GLYPHDEF gdf; // pointer to GLYPHBITS or to PATHOBJ
912: HGLYPH hg; // glyhp handle
913: POINTQF ptqD; // Character increment vector: D=A+B+C.
914: FIX fxD; // Character increment amount: D*r.
915: FIX fxA; // Prebearing amount: A*r.
916: FIX fxAB; // Advancing edge of character: (A+B)*r.
917: FIX fxInkTop; // Baseline to inkbox top along s.
918: FIX fxInkBottom; // Baseline to inkbox bottom along s.
919: RECTL rclInk; // Ink box with sides parallel to x,y axes
920: } GLYPHDATA;
921:
922:
923: // flAccel flags for STROBJ
924:
925: // SO_FLAG_DEFAULT_PLACEMENT // defult inc vectors used to position chars
926: // SO_HORIZONTAL // "left to right" or "right to left"
927: // SO_VERTICAL // "top to bottom" or "bottom to top"
928: // SO_REVERSED // set if horiz & "right to left" or if vert & "bottom to top"
929: // SO_ZERO_BEARINGS // all glyphs have zero a and c spaces
930: // SO_CHAR_INC_EQUAL_BM_BASE // base == cx for horiz, == cy for vert.
931: // SO_MAXEXT_EQUAL_BM_SIDE // side == cy for horiz, == cx for vert.
932:
933: #define SO_FLAG_DEFAULT_PLACEMENT 0x00000001
934: #define SO_HORIZONTAL 0x00000002
935: #define SO_VERTICAL 0x00000004
936: #define SO_REVERSED 0x00000008
937: #define SO_ZERO_BEARINGS 0x00000010
938: #define SO_CHAR_INC_EQUAL_BM_BASE 0x00000020
939: #define SO_MAXEXT_EQUAL_BM_SIDE 0x00000040
940:
941: typedef struct _STROBJ
942: {
943: ULONG cGlyphs; // # of glyphs to render
944: FLONG flAccel;
945: ULONG ulCharInc; // zero if fixed pitch font, else equal to increment
946: RECTL rclBkGround; // bk ground rect of the string in device coords
947: GLYPHPOS *pgp; // If non-NULL then has all glyphs.
948: PWSTR pwszOrg; // pointer to original unicode string.
949: } STROBJ;
950:
951: typedef struct _FONTINFO /* fi */
952: {
953: ULONG cjThis;
954: FLONG flCaps;
955: ULONG cGlyphsSupported;
956: ULONG cjMaxGlyph1;
957: ULONG cjMaxGlyph4;
958: ULONG cjMaxGlyph8;
959: ULONG cjMaxGlyph32;
960: } FONTINFO, *PFONTINFO;
961:
962: ULONG FONTOBJ_cGetAllGlyphHandles(
963: FONTOBJ *pfo,
964: HGLYPH *phg);
965:
966: VOID FONTOBJ_vGetInfo(
967: FONTOBJ *pfo,
968: ULONG cjSize,
969: FONTINFO *pfi);
970:
971: ULONG FONTOBJ_cGetGlyphs(
972: FONTOBJ *pfo,
973: ULONG iMode,
974: ULONG cGlyph,
975: HGLYPH *phg,
976: PVOID *ppvGlyph);
977:
978: XFORMOBJ *FONTOBJ_pxoGetXform(FONTOBJ *pfo);
979: IFIMETRICS* FONTOBJ_pifi(FONTOBJ *pfo);
980:
981: // possible values that iMode can take:
982:
983: /*
984: * PALOBJ callbacks
985: */
986:
987: #define PAL_INDEXED 0x00000001
988: #define PAL_BITFIELDS 0x00000002
989: #define PAL_RGB 0x00000004
990: #define PAL_BGR 0x00000008
991: #define PAL_DC 0x00000010
992: #define PAL_FIXED 0x00000020
993: #define PAL_FREE 0x00000040
994: #define PAL_MANAGED 0x00000080
995: #define PAL_NOSTATIC 0x00000100
996: #define PAL_MONOCHROME 0x00000200
997:
998: ULONG PALOBJ_cGetColors(
999: PALOBJ *ppalo,
1000: ULONG iStart,
1001: ULONG cColors,
1002: ULONG *pulColors);
1003:
1004: PVOID FONTOBJ_pvTrueTypeFontFile(
1005: FONTOBJ *pfo,
1006: ULONG *pcjFile);
1007:
1008: /*
1009: * PATHOBJ callbacks
1010: */
1011:
1012: #define PO_BEZIERS 0x00000001
1013: #define PO_ELLIPSE 0x00000002
1014:
1015: #define PD_BEGINSUBPATH 0x00000001
1016: #define PD_ENDSUBPATH 0x00000002
1017: #define PD_RESETSTYLE 0x00000004
1018: #define PD_CLOSEFIGURE 0x00000008
1019: #define PD_BEZIERS 0x00000010
1020: #define PD_ALL (PD_BEGINSUBPATH | \
1021: PD_ENDSUBPATH | \
1022: PD_RESETSTYLE | \
1023: PD_CLOSEFIGURE | \
1024: PD_BEZIERS)
1025:
1026: typedef struct _PATHDATA
1027: {
1028: FLONG flags;
1029: ULONG count;
1030: POINTFIX *pptfx;
1031: } PATHDATA, *PPATHDATA;
1032:
1033: typedef struct _RUN
1034: {
1035: LONG iStart;
1036: LONG iStop;
1037: } RUN, *PRUN;
1038:
1039: typedef struct _CLIPLINE
1040: {
1041: POINTFIX ptfxA;
1042: POINTFIX ptfxB;
1043: LONG lStyleState;
1044: ULONG c;
1045: RUN arun[1];
1046: } CLIPLINE, *PCLIPLINE;
1047:
1048: VOID PATHOBJ_vEnumStart(PATHOBJ *ppo);
1049:
1050: BOOL PATHOBJ_bEnum(
1051: PATHOBJ *ppo,
1052: PATHDATA *ppd);
1053:
1054: VOID PATHOBJ_vEnumStartClipLines(
1055: PATHOBJ *ppo,
1056: CLIPOBJ *pco,
1057: SURFOBJ *pso,
1058: LINEATTRS *pla);
1059:
1060: BOOL PATHOBJ_bEnumClipLines(
1061: PATHOBJ *ppo,
1062: ULONG cb,
1063: CLIPLINE *pcl);
1064:
1065: BOOL PATHOBJ_bMoveTo(
1066: PATHOBJ *ppo,
1067: POINTFIX ptfx);
1068:
1069: BOOL PATHOBJ_bPolyLineTo(
1070: PATHOBJ *ppo,
1071: POINTFIX *pptfx,
1072: ULONG cptfx);
1073:
1074: BOOL PATHOBJ_bPolyBezierTo(
1075: PATHOBJ *ppo,
1076: POINTFIX *pptfx,
1077: ULONG cptfx);
1078:
1079: BOOL PATHOBJ_bCloseFigure(PATHOBJ *ppo);
1080:
1081: VOID PATHOBJ_vGetBounds(
1082: PATHOBJ *ppo,
1083: PRECTFX prectfx);
1084:
1085: /*
1086: * STROBJ callbacks
1087: */
1088:
1089: #define SO_GLYPHHANDLES 0L
1090: #define SO_MONOBITMAP 1L
1091: #define SO_PATHOBJ 2L
1092:
1093: VOID STROBJ_vEnumStart(
1094: STROBJ *pstro);
1095:
1096: BOOL STROBJ_bEnum(
1097: STROBJ *pstro,
1098: ULONG *pgpos,
1099: PGLYPHPOS *ppgpos);
1100:
1101: #define SGI_EXTRASPACE 0
1102:
1103: /*
1104: * SURFOBJ callbacks
1105: */
1106:
1107: #define STYPE_BITMAP 0L
1108: #define STYPE_DEVICE 1L
1109: #define STYPE_JOURNAL 2L
1110: #define STYPE_DEVBITMAP 3L
1111:
1112: #define BMF_DEVICE 0L
1113: #define BMF_1BPP 1L
1114: #define BMF_4BPP 2L
1115: #define BMF_8BPP 3L
1116: #define BMF_16BPP 4L
1117: #define BMF_24BPP 5L
1118: #define BMF_32BPP 6L
1119: #define BMF_4RLE 7L
1120: #define BMF_8RLE 8L
1121:
1122: #define BMF_TOPDOWN 0x0001
1123:
1124: /*
1125: * XFORMOBJ callbacks
1126: */
1127:
1128: #define GX_IDENTITY 0L
1129: #define GX_OFFSET 1L
1130: #define GX_SCALE 2L
1131: #define GX_GENERAL 3L
1132:
1133: #define XF_LTOL 0L
1134: #define XF_INV_LTOL 1L
1135: #define XF_LTOFX 2L
1136: #define XF_INV_FXTOL 3L
1137:
1138: ULONG XFORMOBJ_iGetXform(
1139: XFORMOBJ *pxo,
1140: XFORM *pxform);
1141:
1142: BOOL XFORMOBJ_bApplyXform(
1143: XFORMOBJ *pxo,
1144: ULONG iMode,
1145: ULONG cPoints,
1146: PVOID pvIn,
1147: PVOID pvOut);
1148:
1149: /*
1150: * XLATEOBJ callbacks
1151: */
1152:
1153: #define XO_TRIVIAL 0x00000001
1154: #define XO_TABLE 0x00000002
1155: #define XO_TO_MONO 0x00000004
1156: #define XO_FROM_MONO 0x00000008
1157: #define XO_RGB_SRC 0x00000010
1158: #define XO_RGB_BOTH 0x00000020
1159: #define XO_PAL_MANAGED 0x00000040
1160:
1161: #define XO_SRCPALETTE 1
1162: #define XO_DESTPALETTE 2
1163: #define XO_DESTDCPALETTE 3
1164:
1165: ULONG XLATEOBJ_iXlate(XLATEOBJ *pxlo, ULONG iColor);
1166: ULONG *XLATEOBJ_piVector(XLATEOBJ *pxlo);
1167: ULONG XLATEOBJ_cGetPalette(
1168: XLATEOBJ *pxlo,
1169: ULONG iPal,
1170: ULONG cPal,
1171: ULONG *pPal);
1172:
1173: /*
1174: * Engine callbacks - error logging
1175: */
1176:
1177: VOID EngSetLastError(ULONG);
1178:
1179: /*
1180: * Engine callbacks - Surfaces
1181: */
1182:
1183: #define HOOK_BITBLT 0x00000001
1184: #define HOOK_STRETCHBLT 0x00000002
1185: #define HOOK_PLGBLT 0x00000004
1186: #define HOOK_TEXTOUT 0x00000008
1187: #define HOOK_PAINT 0x00000010
1188: #define HOOK_STROKEPATH 0x00000020
1189: #define HOOK_FILLPATH 0x00000040
1190: #define HOOK_STROKEANDFILLPATH 0x00000080
1191: #define HOOK_COPYBITS 0x00000400
1192: #define HOOK_SYNCHRONIZE 0x00001000
1193: #define HOOK_CONSOLETEXTOUT 0x00002000
1194:
1195: HSURF EngCreateSurface(DHSURF dhsurf, SIZEL sizl);
1196:
1197: HBITMAP EngCreateBitmap(
1198: SIZEL sizl,
1199: ULONG ulWidth,
1200: ULONG iFormat,
1201: FLONG fl,
1202: PVOID pvBits);
1203:
1204: HSURF EngCreateDeviceSurface(DHSURF dhsurf, SIZEL sizl, ULONG iFormatCompat);
1205: HBITMAP EngCreateDeviceBitmap(DHSURF dhsurf, SIZEL sizl, ULONG iFormatCompat);
1206:
1207: HBITMAP EngCreateEngineBitmap(
1208: DHSURF dhsurf,
1209: SIZEL sizl,
1210: LONG lDelta,
1211: ULONG iFormat,
1212: FLONG fl,
1213: PVOID pvBits);
1214:
1215: BOOL EngDeleteSurface(HSURF hsurf);
1216: SURFOBJ *EngLockSurface(HSURF hsurf);
1217: VOID EngUnlockSurface(SURFOBJ *pso);
1218:
1219: BOOL EngEraseSurface(
1220: SURFOBJ *pso,
1221: RECTL *prcl,
1222: ULONG iColor);
1223:
1224: BOOL EngAssociateSurface(
1225: HSURF hsurf,
1226: HDEV hdev,
1227: FLONG flHooks);
1228:
1229: BOOL EngPlayJournal(
1230: SURFOBJ *psoTarget,
1231: SURFOBJ *psoJournal,
1232: RECTL *prclBand);
1233:
1234: BOOL EngStartBandPage(SURFOBJ *pso);
1235:
1236: HSURF EngCreateJournal(SIZEL sizl, ULONG iFormat);
1237:
1238: BOOL EngCheckAbort(SURFOBJ *pso);
1239:
1240: /*
1241: * Engine callbacks - Paths
1242: */
1243:
1244: PATHOBJ *EngCreatePath();
1245: VOID EngDeletePath(PATHOBJ *ppo);
1246:
1247: /*
1248: * Engine callbacks - Palettes
1249: */
1250:
1251: HPALETTE EngCreatePalette(
1252: ULONG iMode,
1253: ULONG cColors,
1254: ULONG *pulColors,
1255: FLONG flRed,
1256: FLONG flGreen,
1257: FLONG flBlue);
1258:
1259: BOOL EngDeletePalette(HPALETTE hpal);
1260:
1261: /*
1262: * Engine callbacks - Clipping
1263: */
1264:
1265: CLIPOBJ *EngCreateClip();
1266: VOID EngDeleteClip(CLIPOBJ *pco);
1267:
1268: /*
1269: * Engine callbacks - DDAs
1270: */
1271:
1272: DDAOBJ *EngCreateDDA();
1273: VOID EngDeleteDDA(DDAOBJ *pdo);
1274:
1275: /*
1276: * Function prototypes
1277: */
1278:
1279: // These are the only EXPORTED functions for ANY driver
1280:
1281: BOOL DrvEnableDriver(
1282: ULONG iEngineVersion,
1283: ULONG cj,
1284: DRVENABLEDATA *pded);
1285:
1286: VOID DrvDisableDriver();
1287:
1288: /*
1289: * Driver functions
1290: */
1291:
1292: DHPDEV DrvEnablePDEV(
1293: DEVMODEW *pdm,
1294: PWSTR pwszLogAddress,
1295: ULONG cPat,
1296: HSURF *phsurfPatterns,
1297: ULONG cjCaps,
1298: ULONG *pdevcaps,
1299: ULONG cjDevInfo,
1300: DEVINFO *pdi,
1301: PWSTR pwszDataFile,
1302: PWSTR pwszDeviceName,
1303: HANDLE hDriver);
1304:
1305: #define HS_DDI_MAX 19
1306:
1307: BOOL DrvRestartPDEV(
1308: DHPDEV dhpdev,
1309: DEVMODEW *pdm,
1310: ULONG cPat,
1311: HSURF *phsurfPatterns,
1312: ULONG cjCaps,
1313: ULONG *pdevcaps,
1314: ULONG cjDevInfo,
1315: DEVINFO *pdi);
1316:
1317: VOID DrvCompletePDEV(DHPDEV dhpdev,HDEV hdev);
1318:
1319: HSURF DrvEnableSurface(DHPDEV dhpdev);
1320: VOID DrvSynchronize(DHPDEV dhpdev,RECTL *prcl);
1321: VOID DrvDisableSurface(DHPDEV dhpdev);
1322: VOID DrvDisablePDEV(DHPDEV dhpdev);
1323:
1324: /* DrvSaveScreenBits - iMode definitions */
1325:
1326: #define SS_SAVE 0
1327: #define SS_RESTORE 1
1328: #define SS_FREE 2
1329:
1330: ULONG DrvSaveScreenBits(SURFOBJ *pso,ULONG iMode,ULONG ident,RECTL *prcl);
1331:
1332: /*
1333: * Desktops
1334: */
1335:
1336: VOID DrvAssertMode(
1337: DHPDEV dhpdev,
1338: BOOL bEnable);
1339:
1340: ULONG DrvGetModes(
1341: HANDLE hDriver,
1342: ULONG cjSize,
1343: DEVMODEW *pdm);
1344:
1345: /*
1346: * Driver Info
1347: */
1348:
1349: /*
1350: * Bitmaps
1351: */
1352:
1353: HBITMAP DrvCreateDeviceBitmap (
1354: DHPDEV dhpdev,
1355: SIZEL sizl,
1356: ULONG iFormat);
1357:
1358: VOID DrvDeleteDeviceBitmap(DHSURF dhsurf);
1359:
1360: /*
1361: * Palettes
1362: */
1363:
1364: BOOL DrvSetPalette(
1365: DHPDEV dhpdev,
1366: PALOBJ *ppalo,
1367: FLONG fl,
1368: ULONG iStart,
1369: ULONG cColors);
1370:
1371: /*
1372: * Brushes
1373: */
1374:
1375: #define DM_DEFAULT 0x00000001
1376: #define DM_MONOCHROME 0x00000002
1377:
1378: BOOL EngHalftoneColor(
1379: DHPDEV dhpdev,
1380: ULONG iMode,
1381: ULONG rgb,
1382: ULONG *pul);
1383:
1384: #define DCR_SOLID 0
1385: #define DCR_DRIVER 1
1386: #define DCR_HALFTONE 2
1387:
1388: ULONG DrvDitherColor(
1389: DHPDEV dhpdev,
1390: ULONG iMode,
1391: ULONG rgb,
1392: ULONG *pul);
1393:
1394: BOOL DrvRealizeBrush(
1395: BRUSHOBJ *pbo,
1396: SURFOBJ *psoTarget,
1397: SURFOBJ *psoPattern,
1398: SURFOBJ *psoMask,
1399: XLATEOBJ *pxlo,
1400: ULONG iHatch);
1401:
1402: #define RB_DITHERCOLOR 0x80000000L
1403:
1404:
1405: /*
1406: * Fonts
1407: */
1408:
1409: PIFIMETRICS DrvQueryFont(
1410: DHPDEV dhpdev,
1411: ULONG iFile,
1412: ULONG iFace,
1413: ULONG *pid);
1414:
1415: // #define QFT_UNICODE 0L
1416: #define QFT_LIGATURES 1L
1417: #define QFT_KERNPAIRS 2L
1418: #define QFT_GLYPHSET 3L
1419:
1420: PVOID DrvQueryFontTree(
1421: DHPDEV dhpdev,
1422: ULONG iFile,
1423: ULONG iFace,
1424: ULONG iMode,
1425: ULONG *pid);
1426:
1427: #define QFD_GLYPHANDBITMAP 1L
1428: #define QFD_GLYPHANDOUTLINE 2L
1429: #define QFD_MAXEXTENTS 3L
1430: #define QFD_MAXGLYPHBITMAP 4L
1431:
1432: LONG DrvQueryFontData(
1433: DHPDEV dhpdev,
1434: FONTOBJ *pfo,
1435: ULONG iMode,
1436: HGLYPH hg,
1437: GLYPHDATA *pgd,
1438: PVOID pv,
1439: ULONG cjSize);
1440:
1441: VOID DrvFree(
1442: PVOID pv,
1443: ULONG id);
1444:
1445: VOID DrvDestroyFont(
1446: FONTOBJ *pfo);
1447:
1448: // Capability flags for DrvQueryCaps.
1449: #define QC_OUTLINES 0x00000001
1450: #define QC_1BIT 0x00000002
1451: #define QC_4BIT 0x00000004
1452: #define QC_8BIT 0x00000008
1453: #define QC_16BIT 0x00000010
1454: #define QC_24BIT 0x00000020
1455: #define QC_32BIT 0x00000040
1456:
1457: LONG DrvQueryFontCaps(
1458: ULONG culCaps,
1459: ULONG *pulCaps);
1460:
1461: ULONG DrvLoadFontFile(
1462: PWSTR pwszFontFile,
1463: PWSTR pwszScratchDir,
1464: ULONG ulLangID);
1465:
1466: BOOL DrvUnloadFontFile(
1467: ULONG iFile);
1468:
1469: LONG DrvQueryTrueTypeTable(
1470: ULONG iFile,
1471: ULONG ulFont,
1472: ULONG ulTag,
1473: PTRDIFF dpStart,
1474: ULONG cjBuf,
1475: BYTE *pjBuf);
1476:
1477: BOOL DrvQueryAdvanceWidths(
1478: DHPDEV dhpdev,
1479: FONTOBJ *pfo,
1480: ULONG iMode,
1481: HGLYPH *phg,
1482: PVOID pvWidths,
1483: ULONG cGlyphs);
1484:
1485: // Values for iMode
1486:
1487: #define QAW_GETWIDTHS 0
1488: #define QAW_GETEASYWIDTHS 1
1489:
1490: LONG DrvQueryTrueTypeOutline(
1491: DHPDEV dhpdev,
1492: FONTOBJ *pfo,
1493: HGLYPH hglyph,
1494: BOOL bMetricsOnly,
1495: GLYPHDATA *pgldt,
1496: ULONG cjBuf,
1497: TTPOLYGONHEADER *ppoly);
1498:
1499: PVOID DrvGetTrueTypeFile (
1500: ULONG iFile,
1501: ULONG *pcj);
1502:
1503: // values for ulMode:
1504:
1505: #define QFF_DESCRIPTION 1L
1506: #define QFF_NUMFACES 2L
1507:
1508: LONG DrvQueryFontFile(
1509: ULONG iFile,
1510: ULONG ulMode,
1511: ULONG cjBuf,
1512: ULONG *pulBuf);
1513:
1514: /*
1515: * BitBlt
1516: */
1517:
1518: BOOL DrvBitBlt(
1519: SURFOBJ *psoTrg,
1520: SURFOBJ *psoSrc,
1521: SURFOBJ *psoMask,
1522: CLIPOBJ *pco,
1523: XLATEOBJ *pxlo,
1524: RECTL *prclTrg,
1525: POINTL *pptlSrc,
1526: POINTL *pptlMask,
1527: BRUSHOBJ *pbo,
1528: POINTL *pptlBrush,
1529: ROP4 rop4);
1530:
1531: BOOL DrvStretchBlt(
1532: SURFOBJ *psoDest,
1533: SURFOBJ *psoSrc,
1534: SURFOBJ *psoMask,
1535: CLIPOBJ *pco,
1536: XLATEOBJ *pxlo,
1537: COLORADJUSTMENT *pca,
1538: POINTL *pptlHTOrg,
1539: RECTL *prclDest,
1540: RECTL *prclSrc,
1541: POINTL *pptlMask,
1542: ULONG iMode);
1543:
1544: BOOL DrvPlgBlt(
1545: SURFOBJ *psoDest,
1546: SURFOBJ *psoSrc,
1547: SURFOBJ *psoMask,
1548: CLIPOBJ *pco,
1549: XLATEOBJ *pxlo,
1550: COLORADJUSTMENT *pca,
1551: POINTL *pptlHTOrg,
1552: POINTFIX *pptfxDest,
1553: RECTL *prclSrc,
1554: POINTL *pptlMask,
1555: ULONG iMode);
1556:
1557: BOOL DrvCopyBits(
1558: SURFOBJ *psoDest,
1559: SURFOBJ *psoSrc,
1560: CLIPOBJ *pco,
1561: XLATEOBJ *pxlo,
1562: RECTL *prclDest,
1563: POINTL *pptlSrc);
1564:
1565: /*
1566: * Text Output
1567: */
1568:
1569: BOOL DrvTextOut(
1570: SURFOBJ *pso,
1571: STROBJ *pstro,
1572: FONTOBJ *pfo,
1573: CLIPOBJ *pco,
1574: RECTL *prclExtra,
1575: RECTL *prclOpaque,
1576: BRUSHOBJ *pboFore,
1577: BRUSHOBJ *pboOpaque,
1578: POINTL *pptlOrg,
1579: MIX mix);
1580:
1581: /*
1582: * Graphics Output
1583: */
1584:
1585: BOOL DrvStrokePath(
1586: SURFOBJ *pso,
1587: PATHOBJ *ppo,
1588: CLIPOBJ *pco,
1589: XFORMOBJ *pxo,
1590: BRUSHOBJ *pbo,
1591: POINTL *pptlBrushOrg,
1592: LINEATTRS *plineattrs,
1593: MIX mix);
1594:
1595: #define FP_ALTERNATEMODE 1L
1596: #define FP_WINDINGMODE 2L
1597:
1598: BOOL DrvFillPath(
1599: SURFOBJ *pso,
1600: PATHOBJ *ppo,
1601: CLIPOBJ *pco,
1602: BRUSHOBJ *pbo,
1603: POINTL *pptlBrushOrg,
1604: MIX mix,
1605: FLONG flOptions);
1606:
1607: BOOL DrvStrokeAndFillPath(
1608: SURFOBJ *pso,
1609: PATHOBJ *ppo,
1610: CLIPOBJ *pco,
1611: XFORMOBJ *pxo,
1612: BRUSHOBJ *pboStroke,
1613: LINEATTRS *plineattrs,
1614: BRUSHOBJ *pboFill,
1615: POINTL *pptlBrushOrg,
1616: MIX mixFill,
1617: FLONG flOptions);
1618:
1619: BOOL DrvPaint(
1620: SURFOBJ *pso,
1621: CLIPOBJ *pco,
1622: BRUSHOBJ *pbo,
1623: POINTL *pptlBrushOrg,
1624: MIX mix);
1625:
1626: /*
1627: * Object Data (LOGBRUSHs and LOGPENs)
1628: */
1629:
1630: ULONG DrvQueryObjectData(
1631: DHPDEV dhpdev,
1632: ULONG iObjectType,
1633: ULONG cObjects,
1634: PVOID pvObjects);
1635:
1636: /*
1637: * Pointers
1638: */
1639:
1640: #define SPS_ERROR 0
1641: #define SPS_DECLINE 1
1642: #define SPS_ACCEPT_NOEXCLUDE 2
1643: #define SPS_ACCEPT_EXCLUDE 3
1644:
1645: #define SPS_CHANGE 0x00000001L
1646: #define SPS_ASYNCCHANGE 0x00000002L
1647: #define SPS_ANIMATESTART 0x00000004L
1648: #define SPS_ANIMATEUPDATE 0x00000008L
1649:
1650: ULONG DrvSetPointerShape(
1651: SURFOBJ *pso,
1652: SURFOBJ *psoMask,
1653: SURFOBJ *psoColor,
1654: XLATEOBJ *pxlo,
1655: LONG xHot,
1656: LONG yHot,
1657: LONG x,
1658: LONG y,
1659: RECTL *prcl,
1660: FLONG fl);
1661:
1662: VOID DrvMovePointer(SURFOBJ *pso,LONG x,LONG y,RECTL *prcl);
1663:
1664: /*
1665: * Printing
1666: */
1667:
1668: BOOL DrvSendPage(SURFOBJ *pso);
1669: BOOL DrvStartPage(SURFOBJ *pso);
1670:
1671: ULONG DrvEscape(
1672: SURFOBJ *pso,
1673: ULONG iEsc,
1674: ULONG cjIn,
1675: PVOID pvIn,
1676: ULONG cjOut,
1677: PVOID pvOut);
1678:
1679: #define ESC_CLIPCHANGE 0x80000000
1680:
1681: ULONG DrvDrawEscape(
1682: SURFOBJ *pso,
1683: ULONG iEsc,
1684: CLIPOBJ *pco,
1685: RECTL *prcl,
1686: ULONG cjIn,
1687: PVOID pvIn);
1688:
1689: BOOL DrvStartDoc(
1690: SURFOBJ *pso,
1691: PWSTR pwszDocName,
1692: DWORD dwJobId);
1693:
1694: #define ED_ABORTDOC 1
1695:
1696: BOOL DrvEndDoc(SURFOBJ *pso, FLONG fl);
1697:
1698: ULONG DrvGetGlyphMode(DHPDEV, FONTOBJ *);
1699:
1700: ULONG DrvFontManagement(
1701: SURFOBJ *pso,
1702: FONTOBJ *pfo,
1703: ULONG iMode,
1704: ULONG cjIn,
1705: PVOID pvIn,
1706: ULONG cjOut,
1707: PVOID pvOut);
1708:
1709: /*
1710: * Function prototypes - Engine Simulations
1711: */
1712:
1713: BOOL EngBitBlt(
1714: SURFOBJ *psoTrg,
1715: SURFOBJ *psoSrc,
1716: SURFOBJ *psoMask,
1717: CLIPOBJ *pco,
1718: XLATEOBJ *pxlo,
1719: RECTL *prclTrg,
1720: POINTL *pptlSrc,
1721: POINTL *pptlMask,
1722: BRUSHOBJ *pbo,
1723: POINTL *pptlBrush,
1724: ROP4 rop4);
1725:
1726: BOOL EngStretchBlt(
1727: SURFOBJ *psoDest,
1728: SURFOBJ *psoSrc,
1729: SURFOBJ *psoMask,
1730: CLIPOBJ *pco,
1731: XLATEOBJ *pxlo,
1732: COLORADJUSTMENT *pca,
1733: POINTL *pptlHTOrg,
1734: RECTL *prclDest,
1735: RECTL *prclSrc,
1736: POINTL *pptlMask,
1737: ULONG iMode);
1738:
1739: BOOL EngPlgBlt(
1740: SURFOBJ *psoDest,
1741: SURFOBJ *psoSrc,
1742: SURFOBJ *psoMask,
1743: CLIPOBJ *pco,
1744: XLATEOBJ *pxlo,
1745: COLORADJUSTMENT *pca,
1746: POINTL *pptlHTOrg,
1747: POINTFIX *pptfxDest,
1748: RECTL *prclSrc,
1749: POINTL *pptlMask,
1750: ULONG iMode);
1751:
1752: BOOL EngTextOut(
1753: SURFOBJ *pso,
1754: STROBJ *pstro,
1755: FONTOBJ *pfo,
1756: CLIPOBJ *pco,
1757: RECTL *prclExtra,
1758: RECTL *prclOpaque,
1759: BRUSHOBJ *pboFore,
1760: BRUSHOBJ *pboOpaque,
1761: POINTL *pptlOrg,
1762: MIX mix);
1763:
1764: BOOL EngStrokePath(
1765: SURFOBJ *pso,
1766: PATHOBJ *ppo,
1767: CLIPOBJ *pco,
1768: XFORMOBJ *pxo,
1769: BRUSHOBJ *pbo,
1770: POINTL *pptlBrushOrg,
1771: LINEATTRS *plineattrs,
1772: MIX mix);
1773:
1774: BOOL EngFillPath(
1775: SURFOBJ *pso,
1776: PATHOBJ *ppo,
1777: CLIPOBJ *pco,
1778: BRUSHOBJ *pbo,
1779: POINTL *pptlBrushOrg,
1780: MIX mix,
1781: FLONG flOptions);
1782:
1783: BOOL EngStrokeAndFillPath(
1784: SURFOBJ *pso,
1785: PATHOBJ *ppo,
1786: CLIPOBJ *pco,
1787: XFORMOBJ *pxo,
1788: BRUSHOBJ *pboStroke,
1789: LINEATTRS *plineattrs,
1790: BRUSHOBJ *pboFill,
1791: POINTL *pptlBrushOrg,
1792: MIX mixFill,
1793: FLONG flOptions);
1794:
1795: BOOL EngPaint(
1796: SURFOBJ *pso,
1797: CLIPOBJ *pco,
1798: BRUSHOBJ *pbo,
1799: POINTL *pptlBrushOrg,
1800: MIX mix);
1801:
1802: BOOL EngCopyBits(
1803: SURFOBJ *psoDest,
1804: SURFOBJ *psoSrc,
1805: CLIPOBJ *pco,
1806: XLATEOBJ *pxlo,
1807: RECTL *prclDest,
1808: POINTL *pptlSrc);
1809:
1810: #define PPB_NOCLIP 0x0001
1811:
1812:
1813: //
1814: // Halftone releated APIs
1815: //
1816:
1817:
1818: LONG
1819: APIENTRY
1820: HT_ComputeRGBGammaTable(
1821: USHORT GammaTableEntries,
1822: USHORT GammaTableType,
1823: USHORT RedGamma,
1824: USHORT GreenGamma,
1825: USHORT BlueGamma,
1826: LPBYTE pGammaTable
1827: );
1828:
1829: LONG
1830: APIENTRY
1831: HT_Get8BPPFormatPalette(
1832: LPPALETTEENTRY pPaletteEntry,
1833: USHORT RedGamma,
1834: USHORT GreenGamma,
1835: USHORT BlueGamma
1836: );
1837:
1838:
1839: typedef struct _DEVHTINFO {
1840: DWORD HTFlags;
1841: DWORD HTPatternSize;
1842: DWORD DevPelsDPI;
1843: COLORINFO ColorInfo;
1844: } DEVHTINFO, *PDEVHTINFO;
1845:
1846: #define DEVHTADJF_COLOR_DEVICE 0x00000001
1847: #define DEVHTADJF_ADDITIVE_DEVICE 0x00000002
1848:
1849: typedef struct _DEVHTADJDATA {
1850: DWORD DeviceFlags;
1851: DWORD DeviceXDPI;
1852: DWORD DeviceYDPI;
1853: PDEVHTINFO pDefHTInfo;
1854: PDEVHTINFO pAdjHTInfo;
1855: } DEVHTADJDATA, *PDEVHTADJDATA;
1856:
1857: LONG
1858: APIENTRY
1859: HTUI_DeviceColorAdjustment(
1860: LPSTR pDeviceName,
1861: PDEVHTADJDATA pDevHTAdjData
1862: );
1863:
1864:
1865: #endif // _WINDDI_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.