Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / win32ss / include / ntgdihdl.h
diff --git a/win32ss/include/ntgdihdl.h b/win32ss/include/ntgdihdl.h
new file mode 100644 (file)
index 0000000..647acb3
--- /dev/null
@@ -0,0 +1,363 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS Win32 Graphical Subsystem (WIN32K)
+ * FILE:            win32ss/include/ntgdihdl.h
+ * PURPOSE:         Win32 Shared GDI Handle/Object Types
+ * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#ifndef _NTGDIHDL_
+#define _NTGDIHDL_
+
+#include <winddi.h>
+
+/* DEFINES *******************************************************************/
+
+/* GDI handle table can hold 0x10000 handles */
+#define GDI_HANDLE_COUNT 0x10000
+#define GDI_CFONT_MAX 16
+
+/* Handle Masks and shifts */
+#define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1)
+#define GDI_HANDLE_TYPE_MASK  0x007f0000
+#define GDI_HANDLE_BASETYPE_MASK 0x001f0000
+#define GDI_HANDLE_EXTYPE_MASK 0x00600000
+#define GDI_HANDLE_STOCK_MASK 0x00800000
+#define GDI_HANDLE_REUSE_MASK 0xff000000
+#define GDI_HANDLE_UPPER_MASK (GDI_HANDLE_TYPE_MASK|GDI_HANDLE_STOCK_MASK|GDI_HANDLE_REUSE_MASK)
+#define GDI_HANDLE_REUSECNT_SHIFT 24
+#define GDI_HANDLE_BASETYPE_SHIFT 16
+
+#define GDI_ENTRY_STOCK_MASK 0x00000080
+#define GDI_ENTRY_BASETYPE_MASK 0x001f0000
+#define GDI_ENTRY_UPPER_SHIFT 16
+
+/* GDI Entry Flags */
+#define GDI_ENTRY_UNDELETABLE  1    /* Mark Object as nonremovable */
+#define GDI_ENTRY_DELETING     2    /* Used when deleting Font Objects */
+#define GDI_ENTRY_VALIDATE_VIS 4    /* Validating Visible region data */
+#define GDI_ENTRY_ALLOCATE_LAL 0x80 /* Object Allocated with Look aside List */
+
+/*! \defgroup GDI object types
+ *
+ *  GDI object types
+ *
+ */
+/*@{*/
+#define GDI_OBJECT_TYPE_DC            0x00010000
+#define GDI_OBJECT_TYPE_DD_SURFACE    0x00030000 /* Should be moved away from gdi objects */
+#define GDI_OBJECT_TYPE_REGION        0x00040000
+#define GDI_OBJECT_TYPE_BITMAP        0x00050000
+#define GDI_OBJECT_TYPE_CLIOBJ        0x00060000
+#define GDI_OBJECT_TYPE_PATH          0x00070000
+#define GDI_OBJECT_TYPE_PALETTE       0x00080000
+#define GDI_OBJECT_TYPE_COLORSPACE    0x00090000
+#define GDI_OBJECT_TYPE_FONT          0x000a0000
+
+#define GDI_OBJECT_TYPE_BRUSH         0x00100000
+#define GDI_OBJECT_TYPE_DD_VIDEOPORT  0x00120000 /* Should be moved away from gdi objects */
+#define GDI_OBJECT_TYPE_DD_MOTIONCOMP 0x00140000 /* Should be moved away from gdi objects */
+#define GDI_OBJECT_TYPE_ENUMFONT      0x00160000
+#define GDI_OBJECT_TYPE_DRIVEROBJ     0x001C0000
+
+/* Confrim on XP value is taken from NtGdiCreateDirectDrawObject */
+#define GDI_OBJECT_TYPE_DIRECTDRAW  0x00200000
+
+/* Following object types are derived types from the above base types
+   use 0x001f0000 as mask to get the base type */
+#define GDI_OBJECT_TYPE_EMF         0x00210000
+
+#define GDI_OBJECT_TYPE_METAFILE    0x00260000
+#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000
+#define GDI_OBJECT_TYPE_PEN         0x00300000
+#define GDI_OBJECT_TYPE_EXTPEN      0x00500000
+#define GDI_OBJECT_TYPE_METADC      0x00660000
+/*#define GDI_OBJECT_TYPE_DD_PALETTE    0x00630000 unused at the moment, other value required */
+/*#define GDI_OBJECT_TYPE_DD_CLIPPER    0x00640000 unused at the moment, other value required  */
+
+/* Following object types made up for ROS */
+#define GDI_OBJECT_TYPE_DONTCARE    0x007f0000
+/** Not really an object type. Forces GDI_FreeObj to be silent. */
+#define GDI_OBJECT_TYPE_SILENT      0x80000000
+/*@}*/
+
+/* Handle macros */
+#define GDI_HANDLE_CREATE(i, t)    \
+    ((HANDLE)(((i) & GDI_HANDLE_INDEX_MASK) | ((t) & GDI_HANDLE_TYPE_MASK)))
+
+#define GDI_HANDLE_GET_INDEX(h)    \
+    (((ULONG_PTR)(h)) & GDI_HANDLE_INDEX_MASK)
+
+#define GDI_HANDLE_GET_TYPE(h)     \
+    (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK)
+
+#define GDI_HANDLE_IS_TYPE(h, t)   \
+    ((t) == (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK))
+
+#define GDI_HANDLE_IS_STOCKOBJ(h)  \
+    (0 != (((ULONG_PTR)(h)) & GDI_HANDLE_STOCK_MASK))
+
+#define GDI_HANDLE_SET_STOCKOBJ(h) \
+    ((h) = (HANDLE)(((ULONG_PTR)(h)) | GDI_HANDLE_STOCK_MASK))
+
+#define GDI_HANDLE_GET_UPPER(h)     \
+    (((ULONG_PTR)(h)) & GDI_HANDLE_UPPER_MASK)
+
+#define GDI_HANDLE_GET_REUSECNT(h)     \
+    (((ULONG_PTR)(h)) >> GDI_HANDLE_REUSECNT_SHIFT)
+
+#define GDI_OBJECT_GET_TYPE_INDEX(t) \
+    ((t & GDI_HANDLE_BASETYPE_MASK) >> GDI_HANDLE_BASETYPE_SHIFT)
+
+/* Gdi Object Handle Managment Pid lock masking sets. */
+/* Ref: used with DxEngSetDCOwner */
+#define GDI_OBJ_HMGR_PUBLIC     0          /* Public owner, Open access? */
+#define GDI_OBJ_HMGR_POWNED     0x80000002 /* Set to current owner. */
+#define GDI_OBJ_HMGR_NONE       0x80000012 /* No owner, Open access? */
+#define GDI_OBJ_HMGR_RESTRICTED 0x80000022 /* Restricted? */
+
+
+/* DC OBJ Types */
+#define DC_TYPE_DIRECT 0  /* normal device context */
+#define DC_TYPE_MEMORY 1  /* memory device context */
+#define DC_TYPE_INFO   2  /* information context */
+
+/* DC OBJ Flags */
+#define DC_FLAG_DISPLAY            0x0001
+#define DC_FLAG_DIRECT             0x0002
+#define DC_FLAG_CANCELLED          0x0004
+#define DC_FLAG_PERMANENT          0x0008
+#define DC_FLAG_DIRTY_RAO          0x0010
+#define DC_FLAG_ACCUM_WMGR         0x0020
+#define DC_FLAG_ACCUM_APP          0x0040
+#define DC_FLAG_RESET              0x0080
+#define DC_FLAG_SYNCHRONIZEACCESS  0x0100
+#define DC_FLAG_EPSPRINTINGESCAPE  0x0200
+#define DC_FLAG_TEMPINFODC         0x0400
+#define DC_FLAG_FULLSCREEN         0x0800
+#define DC_FLAG_IN_CLONEPDEV       0x1000
+#define DC_FLAG_REDIRECTION        0x2000
+#define DC_FLAG_SHAREACCESS        0x4000
+
+/* DC_ATTR Dirty Flags */
+#define DIRTY_FILL                          0x00000001
+#define DIRTY_LINE                          0x00000002
+#define DIRTY_TEXT                          0x00000004
+#define DIRTY_BACKGROUND                    0x00000008
+#define DIRTY_CHARSET                       0x00000010
+#define SLOW_WIDTHS                         0x00000020
+#define DC_CACHED_TM_VALID                  0x00000040
+#define DISPLAY_DC                          0x00000080
+#define DIRTY_PTLCURRENT                    0x00000100
+#define DIRTY_PTFXCURRENT                   0x00000200
+#define DIRTY_STYLESTATE                    0x00000400
+#define DC_PLAYMETAFILE                     0x00000800
+#define DC_BRUSH_DIRTY                      0x00001000
+#define DC_PEN_DIRTY                        0x00002000
+#define DC_DIBSECTION                       0x00004000
+#define DC_LAST_CLIPRGN_VALID               0x00008000
+#define DC_PRIMARY_DISPLAY                  0x00010000
+#define DC_ICM_NOT_CALIBRATED               0x00020000
+#define DC_ICM_BRUSH_DIRTY                  0x00040000
+#define DC_ICM_PEN_DIRTY                    0x00080000
+#define DC_ICM_NOT_SET                      0x00100000
+#define DC_MODE_DIRTY                       0x00200000
+#define DC_FONTTEXT_DIRTY                   0x00400000
+
+/* DC_ATTR LCD Flags */
+#define LDC_LDC           0x00000001 /* (init) local DC other than a normal DC */
+#define LDC_EMFLDC        0x00000002 /* Enhance Meta File local DC */
+#define LDC_SAPCALLBACK   0x00000020
+#define LDC_INIT_DOCUMENT 0x00000040
+#define LDC_INIT_PAGE     0x00000080
+#define LDC_STARTPAGE     0x00000100
+#define LDC_PLAY_MFDC     0x00000800
+#define LDC_CLOCKWISE     0x00002000
+#define LDC_KILL_DOCUMENT 0x00010000
+#define LDC_META_PRINT    0x00020000
+#define LDC_INFODC        0x01000000 /* If CreateIC was passed. */
+#define LDC_DEVCAPS       0x02000000
+#define LDC_ATENDPAGE     0x10000000
+
+/* DC_ATTR Xform Flags */
+#define METAFILE_TO_WORLD_IDENTITY          0x00000001
+#define WORLD_TO_PAGE_IDENTITY              0x00000002
+#define DEVICE_TO_PAGE_INVALID              0x00000008
+#define DEVICE_TO_WORLD_INVALID             0x00000010
+#define WORLD_TRANSFORM_SET                 0x00000020
+#define POSITIVE_Y_IS_UP                    0x00000040
+#define INVALIDATE_ATTRIBUTES               0x00000080
+#define PTOD_EFM11_NEGATIVE                 0x00000100
+#define PTOD_EFM22_NEGATIVE                 0x00000200
+#define ISO_OR_ANISO_MAP_MODE               0x00000400
+#define PAGE_TO_DEVICE_IDENTITY             0x00000800
+#define PAGE_TO_DEVICE_SCALE_IDENTITY       0x00001000
+#define PAGE_XLATE_CHANGED                  0x00002000
+#define PAGE_EXTENTS_CHANGED                0x00004000
+#define WORLD_XFORM_CHANGED                 0x00008000
+
+/* BRUSH/RGN_ATTR Flags */
+#define ATTR_CACHED                         0x00000001
+#define ATTR_TO_BE_DELETED                  0x00000002
+#define ATTR_NEW_COLOR                      0x00000004
+#define ATTR_CANT_SELECT                    0x00000008
+#define ATTR_RGN_VALID                      0x00000010
+#define ATTR_RGN_DIRTY                      0x00000020
+
+
+/* TYPES *********************************************************************/
+
+typedef struct _GDI_TABLE_ENTRY
+{
+    PVOID KernelData; /* Points to the kernel mode structure */
+    DWORD ProcessId;  /* process id that created the object, 0 for stock objects */
+    union{            /* temp union structure. */
+    LONG  Type;       /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */
+    struct{
+    USHORT FullUnique; /* unique */
+    UCHAR  ObjectType; /* objt */
+    UCHAR  Flags;      /* Flags */
+    };};
+    PVOID UserData;   /* pUser Points to the user mode structure, usually NULL though */
+} GDI_TABLE_ENTRY, *PGDI_TABLE_ENTRY;
+
+typedef struct _ENTRY
+{
+    union _EINFO
+    {
+        struct _BASEOBJECT *pobj;
+        HGDIOBJ hFree;
+    } einfo;
+
+    union _OBJECTOWNER
+    {
+        struct _OBJECTOWNER_S
+        {
+            unsigned Lock:1;
+            unsigned Pid_Shifted:31;
+        } Share;
+        ULONG ulObj;
+    } ObjectOwner;
+
+    USHORT FullUnique;
+    UCHAR Objt;
+    UCHAR Flags;
+    PVOID pUser;
+} ENTRY, *PENTRY;
+
+/*
+ * User space only structure!
+ */
+typedef struct __GDI_SHARED_HANDLE_TABLE /* Must match win32k/include/gdiobj.h */
+{
+    GDI_TABLE_ENTRY Entries[GDI_HANDLE_COUNT]; /* Handle table. */
+    DEVCAPS         DevCaps;                   /* Shared device capabilities. */
+    FLONG           flDeviceUniq;              /* Device settings uniqueness. */
+    PVOID           pvLangPack;                /* Lanuage Pack. */
+    CFONT           cfPublic[GDI_CFONT_MAX];   /* Public Fonts. */
+    DWORD           dwCFCount;
+} GDI_SHARED_HANDLE_TABLE, *PGDI_SHARED_HANDLE_TABLE;
+
+typedef struct _RGN_ATTR
+{
+    ULONG AttrFlags;
+    ULONG iComplexity;     /* Clipping region's complexity. NULL, SIMPLE & COMPLEXREGION */
+    RECTL Rect;
+} RGN_ATTR,*PRGN_ATTR;
+
+/* Local DC structure (_DC_ATTR) PVOID pvLDC; */
+typedef struct _LDC
+{
+    HDC hDC;
+    ULONG Flags;
+    INT iType;
+    PVOID pvEmfDC;        /* Pointer to ENHMETAFILE structure */
+    LPWSTR pwszPort;
+    ABORTPROC pAbortProc; /* AbortProc for Printing */
+    DWORD CallBackTick;
+    HANDLE hPrinter;      /* Local or Remote Printer driver */
+    PVOID pUMPDev;
+    PUMDHPDEV pUMdhpdev;
+    DEVCAPS DevCaps;
+    HBRUSH BrushColor;
+    HPEN PenColor;
+} LDC, *PLDC;
+
+typedef struct _DC_ATTR
+{
+    PVOID pvLDC;
+    ULONG ulDirty_;
+    HANDLE hbrush;
+    HANDLE hpen;
+    COLORREF crBackgroundClr;
+    ULONG ulBackgroundClr;
+    COLORREF crForegroundClr;
+    ULONG ulForegroundClr;
+    COLORREF crBrushClr;
+    ULONG ulBrushClr;
+    COLORREF crPenClr;
+    ULONG ulPenClr;
+    DWORD iCS_CP;
+    INT iGraphicsMode;
+    BYTE jROP2;
+    BYTE jBkMode;
+    BYTE jFillMode;
+    BYTE jStretchBltMode;
+    POINTL ptlCurrent;
+    POINTL ptfxCurrent;
+    LONG lBkMode;
+    LONG lFillMode;
+    LONG lStretchBltMode;
+    FLONG flFontMapper;
+    LONG lIcmMode;
+    HANDLE hcmXform;
+    HCOLORSPACE hColorSpace;
+    FLONG flIcmFlags;
+    INT IcmBrushColor;
+    INT IcmPenColor;
+    PVOID pvLIcm;
+    FLONG flTextAlign;
+    LONG lTextAlign;
+    LONG lTextExtra;
+    LONG lRelAbs;
+    LONG lBreakExtra;
+    LONG cBreak;
+    HANDLE hlfntNew;
+    MATRIX mxWorldToDevice;
+    MATRIX mxDeviceToWorld;
+    MATRIX mxWorldToPage;
+    FLOATOBJ efM11PtoD;
+    FLOATOBJ efM22PtoD;
+    FLOATOBJ efDxPtoD;
+    FLOATOBJ efDyPtoD;
+    INT iMapMode;
+    DWORD dwLayout;
+    LONG lWindowOrgx;
+    POINTL ptlWindowOrg;
+    SIZEL szlWindowExt;
+    POINTL ptlViewportOrg;
+    SIZEL szlViewportExt;
+    FLONG flXform;
+    SIZEL szlVirtualDevicePixel;
+    SIZEL szlVirtualDeviceMm;
+    SIZEL szlVirtualDeviceSize;
+    POINTL ptlBrushOrigin;
+    RGN_ATTR VisRectRegion;
+} DC_ATTR, *PDC_ATTR;
+
+typedef struct _BRUSH_ATTR /* Used with pen too. */
+{
+    FLONG    AttrFlags;
+    COLORREF lbColor;
+} BRUSH_ATTR, *PBRUSH_ATTR;
+
+typedef struct _FONT_ATTR
+{
+    BOOL    bSlowWidths;
+    PCFONT  pCharWidthData;
+} FONT_ATTR, *PFONT_ATTR;
+
+
+#endif