:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[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   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 VOID 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 } XLATEGDI;
178
179 // List of GDI objects
180 // FIXME: Make more dynamic
181
182 #define MAX_GDI_BRUSHES      255
183 #define MAX_GDI_CLIPS        255
184 #define MAX_GDI_DRVFUNCTIONS  16
185 #define MAX_GDI_FLOATS       255
186 #define MAX_GDI_FONTS        255
187 #define MAX_GDI_PALS         255
188 #define MAX_GDI_PATHS        255
189 #define MAX_GDI_STRS         255
190 #define MAX_GDI_SURFS        255
191 #define MAX_GDI_XFORMS       255
192 #define MAX_GDI_XLATES       255
193
194 #endif //__ENG_OBJECTS_H