Support for VMware video drivers
[reactos.git] / reactos / subsys / win32k / eng / objects.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: GDI Internal Objects
5 * FILE: subsys/win32k/eng/objects.h
6 * PROGRAMER: Jason Filby
7 * REVISION HISTORY:
8 * 21/8/1999: Created
9 */
10 #ifndef __ENG_OBJECTS_H
11 #define __ENG_OBJECTS_H
12
13 #include <freetype/freetype.h>
14
15 /* Structure of internal gdi objects that win32k manages for ddi engine:
16 |---------------------------------|
17 | EngObj |
18 |---------------------------------|
19 | Public part |
20 | accessed from engine |
21 |---------------------------------|
22 | Private part |
23 | managed by gdi |
24 |_________________________________|
25
26 ---------------------------------------------------------------------------*/
27
28 typedef struct _ENGOBJ {
29 ULONG hObj;
30 ULONG InternalSize;
31 ULONG UserSize;
32 }ENGOBJ, *PENGOBJ;
33
34
35
36 typedef struct _BRUSHGDI {
37 ENGOBJ Header;
38 BRUSHOBJ BrushObj;
39 } BRUSHGDI;
40
41 typedef struct _CLIPGDI {
42 ENGOBJ Header;
43 CLIPOBJ ClipObj;
44 /* ei what were these for?
45 ULONG NumRegionRects;
46 ULONG NumIntersectRects;
47 RECTL *RegionRects;
48 RECTL *IntersectRects;
49 */
50 ULONG EnumPos;
51 ULONG EnumOrder;
52 ULONG EnumMax;
53 ENUMRECTS EnumRects;
54 } CLIPGDI, *PCLIPGDI;
55
56 /*ei What is this for? */
57 typedef struct _DRVFUNCTIONSGDI {
58 HDEV hdev;
59 DRVFN Functions[INDEX_LAST];
60 } DRVFUNCTIONSGDI;
61
62 typedef struct _FLOATGDI {
63
64 } FLOATGDI;
65
66 typedef struct _FONTGDI {
67 ENGOBJ Header;
68 FONTOBJ FontObj;
69
70 LPCWSTR Filename;
71 FT_Face face;
72 TEXTMETRIC TextMetric;
73 } FONTGDI, *PFONTGDI;
74
75 typedef struct _PALGDI {
76 ENGOBJ Header;
77 PALOBJ PalObj;
78
79 ULONG Mode; // PAL_INDEXED, PAL_BITFIELDS, PAL_RGB, PAL_BGR
80 ULONG NumColors;
81 ULONG *IndexedColors;
82 ULONG RedMask;
83 ULONG GreenMask;
84 ULONG BlueMask;
85 } PALGDI, *PPALGDI;
86
87 typedef struct _PATHGDI {
88 ENGOBJ Header;
89 PATHOBJ PathObj;
90 } PATHGDI;
91
92 /*ei Fixme! Fix STROBJ */
93 typedef struct _STRGDI {
94 ENGOBJ Header;
95 //STROBJ StrObj;
96 } STRGDI;
97
98 typedef BOOL STDCALL (*PFN_BitBlt)(PSURFOBJ, PSURFOBJ, PSURFOBJ, PCLIPOBJ,
99 PXLATEOBJ, PRECTL, PPOINTL, PPOINTL,
100 PBRUSHOBJ, PPOINTL, ROP4);
101
102 typedef BOOL STDCALL (*PFN_TransparentBlt)(PSURFOBJ, PSURFOBJ, PCLIPOBJ, PXLATEOBJ, PRECTL, PRECTL, ULONG, ULONG);
103
104 typedef BOOL STDCALL (*PFN_StretchBlt)(PSURFOBJ, PSURFOBJ, PSURFOBJ, PCLIPOBJ,
105 PXLATEOBJ, PCOLORADJUSTMENT, PPOINTL,
106 PRECTL, PRECTL, PPOINT, ULONG);
107
108 typedef BOOL STDCALL (*PFN_TextOut)(PSURFOBJ, PSTROBJ, PFONTOBJ, PCLIPOBJ,
109 PRECTL, PRECTL, PBRUSHOBJ, PBRUSHOBJ,
110 PPOINTL, MIX);
111
112 typedef BOOL STDCALL (*PFN_Paint)(PSURFOBJ, PCLIPOBJ, PBRUSHOBJ, PPOINTL, MIX);
113
114 typedef BOOL STDCALL (*PFN_StrokePath)(PSURFOBJ, PPATHOBJ, PCLIPOBJ, PXFORMOBJ,
115 PBRUSHOBJ, PPOINTL, PLINEATTRS, MIX);
116
117 typedef BOOL STDCALL (*PFN_FillPath)(PSURFOBJ, PPATHOBJ, PCLIPOBJ, PBRUSHOBJ,
118 PPOINTL, MIX, ULONG);
119
120 typedef BOOL STDCALL (*PFN_StrokeAndFillPath)(PSURFOBJ, PPATHOBJ, PCLIPOBJ,
121 PXFORMOBJ, PBRUSHOBJ, PLINEATTRS, PBRUSHOBJ,
122 PPOINTL, MIX, ULONG);
123
124 typedef BOOL STDCALL (*PFN_LineTo)(PSURFOBJ, PCLIPOBJ, PBRUSHOBJ,
125 LONG, LONG, LONG, LONG, PRECTL, MIX);
126
127 typedef BOOL STDCALL (*PFN_CopyBits)(PSURFOBJ, PSURFOBJ, PCLIPOBJ,
128 PXLATEOBJ, PRECTL, PPOINTL);
129
130 typedef VOID STDCALL (*PFN_Synchronize)(DHPDEV, PRECTL);
131
132 typedef VOID STDCALL (*PFN_MovePointer)(PSURFOBJ, LONG, LONG, PRECTL);
133
134 typedef ULONG STDCALL (*PFN_SetPointerShape)(PSURFOBJ, PSURFOBJ, PSURFOBJ, PXLATEOBJ,
135 LONG, LONG, LONG, LONG, PRECTL, ULONG);
136
137 typedef HBITMAP STDCALL (*PFN_CreateDeviceBitmap)(DHPDEV, SIZEL, ULONG);
138
139 typedef BOOL STDCALL (*PFN_SetPalette)(DHPDEV, PALOBJ*, ULONG, ULONG, ULONG);
140
141 typedef struct _SURFGDI {
142 ENGOBJ Header;
143 SURFOBJ SurfObj;
144
145 INT BitsPerPixel;
146
147 PFN_BitBlt BitBlt;
148 PFN_TransparentBlt TransparentBlt;
149 PFN_StretchBlt StretchBlt;
150 PFN_TextOut TextOut;
151 PFN_Paint Paint;
152 PFN_StrokePath StrokePath;
153 PFN_FillPath FillPath;
154 PFN_StrokeAndFillPath StrokeAndFillPath;
155 PFN_LineTo LineTo;
156 PFN_CopyBits CopyBits;
157 PFN_Synchronize Synchronize;
158 BOOL SynchronizeAccess;
159 PFN_CreateDeviceBitmap CreateDeviceBitmap;
160 PFN_SetPalette SetPalette;
161 PFN_MovePointer MovePointer;
162 PFN_SetPointerShape SetPointerShape;
163 } SURFGDI, *PSURFGDI;
164
165 typedef struct _XFORMGDI {
166 ENGOBJ Header;
167 /* XFORMOBJ has no public members */
168 } XFORMGDI;
169
170 typedef struct _XLATEGDI {
171 ENGOBJ Header;
172 XLATEOBJ XlateObj;
173 HPALETTE DestPal;
174 HPALETTE SourcePal;
175
176 ULONG *translationTable;
177
178 ULONG RedMask;
179 ULONG GreenMask;
180 ULONG BlueMask;
181 INT RedShift;
182 INT GreenShift;
183 INT BlueShift;
184 BOOL UseShiftAndMask;
185 } XLATEGDI;
186
187 // List of GDI objects
188 // FIXME: Make more dynamic
189
190 #define MAX_GDI_BRUSHES 255
191 #define MAX_GDI_CLIPS 255
192 #define MAX_GDI_DRVFUNCTIONS 16
193 #define MAX_GDI_FLOATS 255
194 #define MAX_GDI_FONTS 255
195 #define MAX_GDI_PALS 255
196 #define MAX_GDI_PATHS 255
197 #define MAX_GDI_STRS 255
198 #define MAX_GDI_SURFS 255
199 #define MAX_GDI_XFORMS 255
200 #define MAX_GDI_XLATES 255
201
202 #endif //__ENG_OBJECTS_H