1 /* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS Win32 Graphical Subsystem (WIN32K) 4 * FILE: win32ss/include/ntgdihdl.h 5 * PURPOSE: Win32 Shared GDI Handle/Object Types 6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net) 7 */ 8 9 /* INCLUDES ******************************************************************/ 10 11 #ifndef _NTGDIHDL_ 12 #define _NTGDIHDL_ 13 14 #include <winddi.h> 15 16 /* DEFINES *******************************************************************/ 17 18 /* GDI handle table can hold 0x10000 handles */ 19 #define GDI_HANDLE_COUNT 0x10000 20 #define GDI_CFONT_MAX 16 21 22 /* Handle Masks and shifts */ 23 #define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1) 24 #define GDI_HANDLE_TYPE_MASK 0x007f0000 25 #define GDI_HANDLE_BASETYPE_MASK 0x001f0000 26 #define GDI_HANDLE_EXTYPE_MASK 0x00600000 27 #define GDI_HANDLE_STOCK_MASK 0x00800000 28 #define GDI_HANDLE_REUSE_MASK 0xff000000 29 #define GDI_HANDLE_UPPER_MASK (GDI_HANDLE_TYPE_MASK|GDI_HANDLE_STOCK_MASK|GDI_HANDLE_REUSE_MASK) 30 #define GDI_HANDLE_REUSECNT_SHIFT 24 31 #define GDI_HANDLE_BASETYPE_SHIFT 16 32 33 #define GDI_ENTRY_STOCK_MASK 0x00000080 34 #define GDI_ENTRY_BASETYPE_MASK 0x001f0000 35 #define GDI_ENTRY_UPPER_SHIFT 16 36 37 /* GDI Entry Flags */ 38 #define GDI_ENTRY_UNDELETABLE 1 /* Mark Object as nonremovable */ 39 #define GDI_ENTRY_DELETING 2 /* Used when deleting Font Objects */ 40 #define GDI_ENTRY_VALIDATE_VIS 4 /* Validating Visible region data */ 41 #define GDI_ENTRY_ALLOCATE_LAL 0x80 /* Object Allocated with Look aside List */ 42 43 /*! \defgroup GDI object types 44 * 45 * GDI object types 46 * 47 */ 48 /*@{*/ 49 #define GDI_OBJECT_TYPE_DC 0x00010000 50 #define GDI_OBJECT_TYPE_DD_SURFACE 0x00030000 /* Should be moved away from gdi objects */ 51 #define GDI_OBJECT_TYPE_REGION 0x00040000 52 #define GDI_OBJECT_TYPE_BITMAP 0x00050000 53 #define GDI_OBJECT_TYPE_CLIOBJ 0x00060000 54 #define GDI_OBJECT_TYPE_PATH 0x00070000 55 #define GDI_OBJECT_TYPE_PALETTE 0x00080000 56 #define GDI_OBJECT_TYPE_COLORSPACE 0x00090000 57 #define GDI_OBJECT_TYPE_FONT 0x000a0000 58 59 #define GDI_OBJECT_TYPE_BRUSH 0x00100000 60 #define GDI_OBJECT_TYPE_DD_VIDEOPORT 0x00120000 /* Should be moved away from gdi objects */ 61 #define GDI_OBJECT_TYPE_DD_MOTIONCOMP 0x00140000 /* Should be moved away from gdi objects */ 62 #define GDI_OBJECT_TYPE_ENUMFONT 0x00160000 63 #define GDI_OBJECT_TYPE_DRIVEROBJ 0x001C0000 64 65 /* Confrim on XP value is taken from NtGdiCreateDirectDrawObject */ 66 #define GDI_OBJECT_TYPE_DIRECTDRAW 0x00200000 67 68 /* Following object types are derived types from the above base types 69 use 0x001f0000 as mask to get the base type */ 70 #define GDI_OBJECT_TYPE_EMF 0x00210000 71 72 #define GDI_OBJECT_TYPE_METAFILE 0x00260000 73 #define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000 74 #define GDI_OBJECT_TYPE_PEN 0x00300000 75 #define GDI_OBJECT_TYPE_EXTPEN 0x00500000 76 #define GDI_OBJECT_TYPE_METADC 0x00660000 77 /*#define GDI_OBJECT_TYPE_DD_PALETTE 0x00630000 unused at the moment, other value required */ 78 /*#define GDI_OBJECT_TYPE_DD_CLIPPER 0x00640000 unused at the moment, other value required */ 79 80 /* Following object types made up for ROS */ 81 #define GDI_OBJECT_TYPE_DONTCARE 0x007f0000 82 /** Not really an object type. Forces GDI_FreeObj to be silent. */ 83 #define GDI_OBJECT_TYPE_SILENT 0x80000000 84 /*@}*/ 85 86 /* Handle macros */ 87 #define GDI_HANDLE_CREATE(i, t) \ 88 ((HANDLE)(((i) & GDI_HANDLE_INDEX_MASK) | ((t) & GDI_HANDLE_TYPE_MASK))) 89 90 #define GDI_HANDLE_GET_INDEX(h) \ 91 (((ULONG_PTR)(h)) & GDI_HANDLE_INDEX_MASK) 92 93 #define GDI_HANDLE_GET_TYPE(h) \ 94 (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK) 95 96 #define GDI_HANDLE_IS_TYPE(h, t) \ 97 ((t) == (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK)) 98 99 #define GDI_HANDLE_IS_STOCKOBJ(h) \ 100 (0 != (((ULONG_PTR)(h)) & GDI_HANDLE_STOCK_MASK)) 101 102 #define GDI_HANDLE_SET_STOCKOBJ(h) \ 103 ((h) = (HANDLE)(((ULONG_PTR)(h)) | GDI_HANDLE_STOCK_MASK)) 104 105 #define GDI_HANDLE_GET_UPPER(h) \ 106 (((ULONG_PTR)(h)) & GDI_HANDLE_UPPER_MASK) 107 108 #define GDI_HANDLE_GET_REUSECNT(h) \ 109 (((ULONG_PTR)(h)) >> GDI_HANDLE_REUSECNT_SHIFT) 110 111 #define GDI_OBJECT_GET_TYPE_INDEX(t) \ 112 ((t & GDI_HANDLE_BASETYPE_MASK) >> GDI_HANDLE_BASETYPE_SHIFT) 113 114 /* Gdi Object Handle Managment Pid lock masking sets. */ 115 /* Ref: used with DxEngSetDCOwner */ 116 #define GDI_OBJ_HMGR_PUBLIC 0 /* Public owner, Open access? */ 117 #define GDI_OBJ_HMGR_POWNED 0x80000002 /* Set to current owner. */ 118 #define GDI_OBJ_HMGR_NONE 0x80000012 /* No owner, Open access? */ 119 #define GDI_OBJ_HMGR_RESTRICTED 0x80000022 /* Restricted? */ 120 121 122 /* DC OBJ Types */ 123 #define DC_TYPE_DIRECT 0 /* normal device context */ 124 #define DC_TYPE_MEMORY 1 /* memory device context */ 125 #define DC_TYPE_INFO 2 /* information context */ 126 127 /* DC OBJ Flags */ 128 #define DC_FLAG_DISPLAY 0x0001 129 #define DC_FLAG_DIRECT 0x0002 130 #define DC_FLAG_CANCELLED 0x0004 131 #define DC_FLAG_PERMANENT 0x0008 132 #define DC_FLAG_DIRTY_RAO 0x0010 133 #define DC_FLAG_ACCUM_WMGR 0x0020 134 #define DC_FLAG_ACCUM_APP 0x0040 135 #define DC_FLAG_RESET 0x0080 136 #define DC_FLAG_SYNCHRONIZEACCESS 0x0100 137 #define DC_FLAG_EPSPRINTINGESCAPE 0x0200 138 #define DC_FLAG_TEMPINFODC 0x0400 139 #define DC_FLAG_FULLSCREEN 0x0800 140 #define DC_FLAG_IN_CLONEPDEV 0x1000 141 #define DC_FLAG_REDIRECTION 0x2000 142 #define DC_FLAG_SHAREACCESS 0x4000 143 144 /* DC_ATTR Dirty Flags */ 145 #define DIRTY_FILL 0x00000001 146 #define DIRTY_LINE 0x00000002 147 #define DIRTY_TEXT 0x00000004 148 #define DIRTY_BACKGROUND 0x00000008 149 #define DIRTY_CHARSET 0x00000010 150 #define SLOW_WIDTHS 0x00000020 151 #define DC_CACHED_TM_VALID 0x00000040 152 #define DISPLAY_DC 0x00000080 153 #define DIRTY_PTLCURRENT 0x00000100 154 #define DIRTY_PTFXCURRENT 0x00000200 155 #define DIRTY_STYLESTATE 0x00000400 156 #define DC_PLAYMETAFILE 0x00000800 157 #define DC_BRUSH_DIRTY 0x00001000 158 #define DC_PEN_DIRTY 0x00002000 159 #define DC_DIBSECTION 0x00004000 160 #define DC_LAST_CLIPRGN_VALID 0x00008000 161 #define DC_PRIMARY_DISPLAY 0x00010000 162 #define DC_ICM_NOT_CALIBRATED 0x00020000 163 #define DC_ICM_BRUSH_DIRTY 0x00040000 164 #define DC_ICM_PEN_DIRTY 0x00080000 165 #define DC_ICM_NOT_SET 0x00100000 166 #define DC_MODE_DIRTY 0x00200000 167 #define DC_FONTTEXT_DIRTY 0x00400000 168 169 /* DC_ATTR LCD Flags */ 170 #define LDC_LDC 0x00000001 /* (init) local DC other than a normal DC */ 171 #define LDC_EMFLDC 0x00000002 /* Enhance Meta File local DC */ 172 #define LDC_SAPCALLBACK 0x00000020 173 #define LDC_INIT_DOCUMENT 0x00000040 174 #define LDC_INIT_PAGE 0x00000080 175 #define LDC_STARTPAGE 0x00000100 176 #define LDC_NEXTBAND 0x00000200 177 #define LDC_CLOCKWISE 0x00002000 178 #define LDC_KILL_DOCUMENT 0x00010000 179 #define LDC_META_PRINT 0x00020000 180 #define LDC_DIRECT 0x00040000 181 #define LDC_RESET_BANDING 0x00080000 182 #define LDC_RESETDC 0x00200000 183 #define LDC_UFIMAP 0x00400000 184 #define LDC_INFODC 0x01000000 /* If CreateIC was passed. */ 185 #define LDC_DEVCAPS 0x02000000 186 #define LDC_ATENDPAGE 0x10000000 187 188 /* DC_ATTR Xform Flags */ 189 #define METAFILE_TO_WORLD_IDENTITY 0x00000001 190 #define WORLD_TO_PAGE_IDENTITY 0x00000002 191 #define DEVICE_TO_PAGE_INVALID 0x00000008 192 #define DEVICE_TO_WORLD_INVALID 0x00000010 193 #define WORLD_TRANSFORM_SET 0x00000020 194 #define POSITIVE_Y_IS_UP 0x00000040 195 #define INVALIDATE_ATTRIBUTES 0x00000080 196 #define PTOD_EFM11_NEGATIVE 0x00000100 197 #define PTOD_EFM22_NEGATIVE 0x00000200 198 #define ISO_OR_ANISO_MAP_MODE 0x00000400 199 #define PAGE_TO_DEVICE_IDENTITY 0x00000800 200 #define PAGE_TO_DEVICE_SCALE_IDENTITY 0x00001000 201 #define PAGE_XLATE_CHANGED 0x00002000 202 #define PAGE_EXTENTS_CHANGED 0x00004000 203 #define WORLD_XFORM_CHANGED 0x00008000 204 205 /* BRUSH/RGN_ATTR Flags */ 206 #define ATTR_CACHED 0x00000001 207 #define ATTR_TO_BE_DELETED 0x00000002 208 #define ATTR_NEW_COLOR 0x00000004 209 #define ATTR_CANT_SELECT 0x00000008 210 #define ATTR_RGN_VALID 0x00000010 211 #define ATTR_RGN_DIRTY 0x00000020 212 213 214 /* TYPES *********************************************************************/ 215 216 typedef struct _GDI_TABLE_ENTRY 217 { 218 PVOID KernelData; /* Points to the kernel mode structure */ 219 DWORD ProcessId; /* process id that created the object, 0 for stock objects */ 220 union{ /* temp union structure. */ 221 LONG Type; /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */ 222 struct{ 223 USHORT FullUnique; /* unique */ 224 UCHAR ObjectType; /* objt */ 225 UCHAR Flags; /* Flags */ 226 };}; 227 PVOID UserData; /* pUser Points to the user mode structure, usually NULL though */ 228 } GDI_TABLE_ENTRY, *PGDI_TABLE_ENTRY; 229 230 typedef struct _ENTRY 231 { 232 union _EINFO 233 { 234 struct _BASEOBJECT *pobj; 235 HGDIOBJ hFree; 236 } einfo; 237 238 union _OBJECTOWNER 239 { 240 struct _OBJECTOWNER_S 241 { 242 unsigned Lock:1; 243 unsigned Pid_Shifted:31; 244 } Share; 245 ULONG ulObj; 246 } ObjectOwner; 247 248 USHORT FullUnique; 249 UCHAR Objt; 250 UCHAR Flags; 251 PVOID pUser; 252 } ENTRY, *PENTRY; 253 254 /* 255 * User space only structure! 256 */ 257 typedef struct __GDI_SHARED_HANDLE_TABLE /* Must match win32k/include/gdiobj.h */ 258 { 259 GDI_TABLE_ENTRY Entries[GDI_HANDLE_COUNT]; /* Handle table. */ 260 DEVCAPS DevCaps; /* Shared device capabilities. */ 261 FLONG flDeviceUniq; /* Device settings uniqueness. */ 262 PVOID pvLangPack; /* Lanuage Pack. */ 263 CFONT cfPublic[GDI_CFONT_MAX]; /* Public Fonts. */ 264 DWORD dwCFCount; 265 } GDI_SHARED_HANDLE_TABLE, *PGDI_SHARED_HANDLE_TABLE; 266 267 typedef struct _RGN_ATTR 268 { 269 ULONG AttrFlags; 270 ULONG iComplexity; /* Clipping region's complexity. NULL, SIMPLE & COMPLEXREGION */ 271 RECTL Rect; 272 } RGN_ATTR,*PRGN_ATTR; 273 274 /* Local DC structure (_DC_ATTR) PVOID pvLDC; */ 275 typedef struct _LDC 276 { 277 HDC hDC; 278 ULONG Flags; 279 INT iType; 280 PVOID pvEmfDC; /* Pointer to ENHMETAFILE structure */ 281 LPWSTR pwszPort; 282 ABORTPROC pAbortProc; /* AbortProc for Printing */ 283 DWORD CallBackTick; 284 HANDLE hPrinter; /* Local or Remote Printer driver */ 285 PDEVMODEW pdm; 286 PVOID pUMPDev; /* Ptr to User Mode Printer Device structure */ 287 PUMDHPDEV pUMdhpdev; /* Ptr to Combined UMPD and DHPDEV structure */ 288 DEVCAPS DevCaps; 289 HBRUSH BrushColor; 290 HPEN PenColor; 291 // wine data 292 DWORD dwData[7]; 293 } LDC, *PLDC; 294 295 typedef struct _DC_ATTR 296 { 297 PVOID pvLDC; 298 ULONG ulDirty_; 299 HANDLE hbrush; 300 HANDLE hpen; 301 COLORREF crBackgroundClr; 302 ULONG ulBackgroundClr; 303 COLORREF crForegroundClr; 304 ULONG ulForegroundClr; 305 COLORREF crBrushClr; 306 ULONG ulBrushClr; 307 COLORREF crPenClr; 308 ULONG ulPenClr; 309 DWORD iCS_CP; 310 INT iGraphicsMode; 311 BYTE jROP2; 312 BYTE jBkMode; 313 BYTE jFillMode; 314 BYTE jStretchBltMode; 315 POINTL ptlCurrent; 316 POINTL ptfxCurrent; 317 LONG lBkMode; 318 LONG lFillMode; 319 LONG lStretchBltMode; 320 FLONG flFontMapper; 321 LONG lIcmMode; 322 HANDLE hcmXform; 323 HCOLORSPACE hColorSpace; 324 FLONG flIcmFlags; 325 INT IcmBrushColor; 326 INT IcmPenColor; 327 PVOID pvLIcm; 328 FLONG flTextAlign; 329 LONG lTextAlign; 330 LONG lTextExtra; 331 LONG lRelAbs; 332 LONG lBreakExtra; 333 LONG cBreak; 334 HANDLE hlfntNew; 335 MATRIX mxWorldToDevice; 336 MATRIX mxDeviceToWorld; 337 MATRIX mxWorldToPage; 338 FLOATOBJ efM11PtoD; 339 FLOATOBJ efM22PtoD; 340 FLOATOBJ efDxPtoD; 341 FLOATOBJ efDyPtoD; 342 INT iMapMode; 343 DWORD dwLayout; 344 LONG lWindowOrgx; 345 POINTL ptlWindowOrg; 346 SIZEL szlWindowExt; 347 POINTL ptlViewportOrg; 348 SIZEL szlViewportExt; 349 FLONG flXform; 350 SIZEL szlVirtualDevicePixel; 351 SIZEL szlVirtualDeviceMm; 352 SIZEL szlVirtualDeviceSize; 353 POINTL ptlBrushOrigin; 354 RGN_ATTR VisRectRegion; 355 } DC_ATTR, *PDC_ATTR; 356 357 typedef struct _BRUSH_ATTR /* Used with pen too. */ 358 { 359 FLONG AttrFlags; 360 COLORREF lbColor; 361 } BRUSH_ATTR, *PBRUSH_ATTR; 362 363 typedef struct _FONT_ATTR 364 { 365 BOOL bSlowWidths; 366 PCFONT pCharWidthData; 367 } FONT_ATTR, *PFONT_ATTR; 368 369 370 #endif 371