Visual C++ backend for rbuild (for now just a hacked mingw backend) and related compi...
[reactos.git] / subsystems / win32 / win32k / include / gdiobj.h
1 /*
2 * GDI object common header definition
3 *
4 */
5
6 #ifndef __WIN32K_GDIOBJ_H
7 #define __WIN32K_GDIOBJ_H
8
9 /* Public GDI Object/Handle definitions */
10 #include <win32k/ntgdihdl.h>
11 #include "win32.h"
12
13 typedef struct _GDI_HANDLE_TABLE
14 {
15 /* The table must be located at the beginning of this structure so it can be
16 * properly mapped!
17 */
18 //////////////////////////////////////////////////////////////////////////////
19 GDI_TABLE_ENTRY Entries[GDI_HANDLE_COUNT];
20 DEVCAPS DevCaps; // Device Capabilities.
21 FLONG flDeviceUniq; // Device settings uniqueness.
22 PVOID pvLangPack; // Language Pack.
23 CFONT cfPublic[GDI_CFONT_MAX]; // Public Fonts.
24 DWORD dwCsbSupported1; // OEM code-page bitfield.
25 //////////////////////////////////////////////////////////////////////////////
26 PPAGED_LOOKASIDE_LIST LookasideLists;
27
28 ULONG FirstFree;
29 ULONG FirstUnused;
30
31 } GDI_HANDLE_TABLE, *PGDI_HANDLE_TABLE;
32
33 extern PGDI_HANDLE_TABLE GdiHandleTable;
34
35 typedef PVOID PGDIOBJ;
36
37 typedef BOOL (INTERNAL_CALL *GDICLEANUPPROC)(PVOID ObjectBody);
38
39 /* Every GDI Object must have this standard type of header.
40 * It's for thread locking. */
41 typedef struct _BASEOBJECT
42 {
43 HGDIOBJ hHmgr;
44 ULONG ulShareCount;
45 USHORT cExclusiveLock;
46 USHORT BaseFlags;
47 PW32THREAD Tid;
48 } BASEOBJECT, *POBJ;
49
50 typedef struct _CLIENTOBJ
51 {
52 BASEOBJECT BaseObject;
53 } CLIENTOBJ, *PCLIENTOBJ;
54
55 enum BASEFLAGS
56 {
57 BASEFLAG_LOOKASIDE = 0x80
58 };
59
60 BOOL INTERNAL_CALL GDIOBJ_OwnedByCurrentProcess(HGDIOBJ ObjectHandle);
61 BOOL INTERNAL_CALL GDIOBJ_SetOwnership(HGDIOBJ ObjectHandle, PEPROCESS Owner);
62 BOOL INTERNAL_CALL GDIOBJ_CopyOwnership(HGDIOBJ CopyFrom, HGDIOBJ CopyTo);
63 BOOL INTERNAL_CALL GDIOBJ_ConvertToStockObj(HGDIOBJ *hObj);
64 VOID INTERNAL_CALL GDIOBJ_UnlockObjByPtr(POBJ Object);
65 VOID INTERNAL_CALL GDIOBJ_ShareUnlockObjByPtr(POBJ Object);
66 BOOL INTERNAL_CALL GDIOBJ_ValidateHandle(HGDIOBJ hObj, ULONG ObjectType);
67 POBJ INTERNAL_CALL GDIOBJ_AllocObj(UCHAR ObjectType);
68 POBJ INTERNAL_CALL GDIOBJ_AllocObjWithHandle(ULONG ObjectType);
69 VOID INTERNAL_CALL GDIOBJ_FreeObj (POBJ pObj, UCHAR ObjectType);
70 BOOL INTERNAL_CALL GDIOBJ_FreeObjByHandle (HGDIOBJ hObj, DWORD ObjectType);
71 PGDIOBJ INTERNAL_CALL GDIOBJ_LockObj (HGDIOBJ hObj, DWORD ObjectType);
72 PGDIOBJ INTERNAL_CALL GDIOBJ_ShareLockObj (HGDIOBJ hObj, DWORD ObjectType);
73
74 PVOID INTERNAL_CALL GDI_MapHandleTable(PSECTION_OBJECT SectionObject, PEPROCESS Process);
75
76 #define GDIOBJ_GetObjectType(Handle) \
77 GDI_HANDLE_GET_TYPE(Handle)
78
79 #define GDIOBJFLAG_DEFAULT (0x0)
80 #define GDIOBJFLAG_IGNOREPID (0x1)
81 #define GDIOBJFLAG_IGNORELOCK (0x2)
82
83 BOOL FASTCALL NtGdiDeleteObject(HGDIOBJ hObject);
84 BOOL FASTCALL IsObjectDead(HGDIOBJ);
85 BOOL FASTCALL IntGdiSetDCOwnerEx( HDC, DWORD, BOOL);
86
87 #endif