update for HEAD-2003050101
[reactos.git] / 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   TEXTMETRICW 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 /* Forward declare (circular reference) */
142 typedef struct _SURFGDI *PSURFGDI;
143
144 typedef VOID    (*PFN_DIB_PutPixel)(PSURFOBJ, LONG, LONG, ULONG);
145 typedef ULONG   (*PFN_DIB_GetPixel)(PSURFOBJ, LONG, LONG);
146 typedef VOID    (*PFN_DIB_HLine)   (PSURFOBJ, LONG, LONG, LONG, ULONG);
147 typedef VOID    (*PFN_DIB_VLine)   (PSURFOBJ, LONG, LONG, LONG, ULONG);
148 typedef BOOLEAN (*PFN_DIB_BitBlt)  (PSURFOBJ DestSurf, PSURFOBJ SourceSurf,
149                                     PSURFGDI DestGDI,  PSURFGDI SourceGDI,
150                                     PRECTL   DestRect, PPOINTL  SourcePoint,
151                                     XLATEOBJ *ColorTranslation);
152
153 typedef struct _SURFGDI {
154   ENGOBJ                Header;
155   SURFOBJ               SurfObj;
156
157   INT BitsPerPixel;
158
159   /* Driver functions */
160   PFN_BitBlt BitBlt;
161   PFN_TransparentBlt TransparentBlt;
162   PFN_StretchBlt StretchBlt;
163   PFN_TextOut TextOut;
164   PFN_Paint Paint;
165   PFN_StrokePath StrokePath;
166   PFN_FillPath FillPath;
167   PFN_StrokeAndFillPath StrokeAndFillPath;
168   PFN_LineTo LineTo;
169   PFN_CopyBits CopyBits;
170   PFN_Synchronize Synchronize;
171   BOOL SynchronizeAccess;
172   PFN_CreateDeviceBitmap CreateDeviceBitmap;
173   PFN_SetPalette SetPalette;
174   PFN_MovePointer MovePointer;
175   PFN_SetPointerShape SetPointerShape;
176
177   /* DIB functions */
178   PFN_DIB_PutPixel DIB_PutPixel;
179   PFN_DIB_HLine    DIB_HLine;
180   PFN_DIB_VLine    DIB_VLine;
181   PFN_DIB_BitBlt   DIB_BitBlt;
182 } SURFGDI;
183
184 typedef struct _XFORMGDI {
185   ENGOBJ                Header;
186   /* XFORMOBJ has no public members */
187 } XFORMGDI;
188
189 typedef struct _XLATEGDI {
190   ENGOBJ                Header;
191   XLATEOBJ              XlateObj;
192   HPALETTE DestPal;
193   HPALETTE SourcePal;
194
195   ULONG *translationTable;
196
197   ULONG RedMask;
198   ULONG GreenMask;
199   ULONG BlueMask;
200   INT RedShift;
201   INT GreenShift;
202   INT BlueShift;
203   BOOL UseShiftAndMask;
204 } XLATEGDI;
205
206 // List of GDI objects
207 // FIXME: Make more dynamic
208
209 #define MAX_GDI_BRUSHES      255
210 #define MAX_GDI_CLIPS        255
211 #define MAX_GDI_DRVFUNCTIONS  16
212 #define MAX_GDI_FLOATS       255
213 #define MAX_GDI_FONTS        255
214 #define MAX_GDI_PALS         255
215 #define MAX_GDI_PATHS        255
216 #define MAX_GDI_STRS         255
217 #define MAX_GDI_SURFS        255
218 #define MAX_GDI_XFORMS       255
219 #define MAX_GDI_XLATES       255
220
221 #endif //__ENG_OBJECTS_H