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_FONTHASH 0x00001000 178 #define LDC_CLOCKWISE 0x00002000 179 #define LDC_NEWFONT 0x00008000 180 #define LDC_KILL_DOCUMENT 0x00010000 181 #define LDC_META_PRINT 0x00020000 182 #define LDC_DIRECT 0x00040000 183 #define LDC_RESET_BANDING 0x00080000 184 #define LDC_DOWNLOADFONTS 0x00100000 185 #define LDC_RESETDC 0x00200000 186 #define LDC_UFIMAP 0x00400000 187 #define LDC_INFODC 0x01000000 /* If CreateIC was passed. */ 188 #define LDC_DEVCAPS 0x02000000 189 #define LDC_XPS_PASS 0x08000000 // Guessing, not sure. 190 #define LDC_ATENDPAGE 0x10000000 191 #define LDC_COLORPAGE 0x20000000 192 193 #define UFIHASHTABLESIZE 64 194 195 /* DC_ATTR Xform Flags */ 196 #define METAFILE_TO_WORLD_IDENTITY 0x00000001 197 #define WORLD_TO_PAGE_IDENTITY 0x00000002 198 #define DEVICE_TO_PAGE_INVALID 0x00000008 199 #define DEVICE_TO_WORLD_INVALID 0x00000010 200 #define WORLD_TRANSFORM_SET 0x00000020 201 #define POSITIVE_Y_IS_UP 0x00000040 202 #define INVALIDATE_ATTRIBUTES 0x00000080 203 #define PTOD_EFM11_NEGATIVE 0x00000100 204 #define PTOD_EFM22_NEGATIVE 0x00000200 205 #define ISO_OR_ANISO_MAP_MODE 0x00000400 206 #define PAGE_TO_DEVICE_IDENTITY 0x00000800 207 #define PAGE_TO_DEVICE_SCALE_IDENTITY 0x00001000 208 #define PAGE_XLATE_CHANGED 0x00002000 209 #define PAGE_EXTENTS_CHANGED 0x00004000 210 #define WORLD_XFORM_CHANGED 0x00008000 211 212 /* BRUSH/RGN_ATTR Flags */ 213 #define ATTR_CACHED 0x00000001 214 #define ATTR_TO_BE_DELETED 0x00000002 215 #define ATTR_NEW_COLOR 0x00000004 216 #define ATTR_CANT_SELECT 0x00000008 217 #define ATTR_RGN_VALID 0x00000010 218 #define ATTR_RGN_DIRTY 0x00000020 219 220 /* Set/Clear Bitmap/Brush Stock Attribute */ 221 #define SC_BB_STOCKOBJ 1 222 223 /* TYPES *********************************************************************/ 224 225 typedef struct _GDI_TABLE_ENTRY 226 { 227 PVOID KernelData; /* Points to the kernel mode structure */ 228 DWORD ProcessId; /* process id that created the object, 0 for stock objects */ 229 union{ /* temp union structure. */ 230 LONG Type; /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */ 231 struct{ 232 USHORT FullUnique; /* unique */ 233 UCHAR ObjectType; /* objt */ 234 UCHAR Flags; /* Flags */ 235 };}; 236 PVOID UserData; /* pUser Points to the user mode structure, usually NULL though */ 237 } GDI_TABLE_ENTRY, *PGDI_TABLE_ENTRY; 238 239 typedef struct _ENTRY 240 { 241 union _EINFO 242 { 243 struct _BASEOBJECT *pobj; 244 HGDIOBJ hFree; 245 } einfo; 246 247 union _OBJECTOWNER 248 { 249 struct _OBJECTOWNER_S 250 { 251 unsigned Lock:1; 252 unsigned Pid_Shifted:31; 253 } Share; 254 ULONG ulObj; 255 } ObjectOwner; 256 257 USHORT FullUnique; 258 UCHAR Objt; 259 UCHAR Flags; 260 PVOID pUser; 261 } ENTRY, *PENTRY; 262 263 /* 264 * User space only structure! 265 */ 266 typedef struct __GDI_SHARED_HANDLE_TABLE /* Must match win32k/include/gdiobj.h */ 267 { 268 GDI_TABLE_ENTRY Entries[GDI_HANDLE_COUNT]; /* Handle table. */ 269 DEVCAPS DevCaps; /* Shared device capabilities. */ 270 FLONG flDeviceUniq; /* Device settings uniqueness. */ 271 PVOID pvLangPack; /* Lanuage Pack. */ 272 CFONT cfPublic[GDI_CFONT_MAX]; /* Public Fonts. */ 273 DWORD dwCFCount; 274 } GDI_SHARED_HANDLE_TABLE, *PGDI_SHARED_HANDLE_TABLE; 275 276 typedef struct _RGN_ATTR 277 { 278 ULONG AttrFlags; 279 ULONG iComplexity; /* Clipping region's complexity. NULL, SIMPLE & COMPLEXREGION */ 280 RECTL Rect; 281 } RGN_ATTR,*PRGN_ATTR; 282 283 /* Local DC structure (_DC_ATTR) PVOID pvLDC; */ 284 typedef struct _LDC 285 { 286 HDC hDC; 287 ULONG Flags; 288 INT iType; 289 PVOID pvEmfDC; /* Pointer to ENHMETAFILE structure */ 290 LPWSTR pwszPort; 291 ABORTPROC pAbortProc; /* AbortProc for Printing */ 292 DWORD CallBackTick; 293 HANDLE hPrinter; /* Local or Remote Printer driver */ 294 PDEVMODEW pdm; 295 PVOID pUMPDev; /* Ptr to User Mode Printer Device structure */ 296 PUMDHPDEV pUMdhpdev; /* Ptr to Combined UMPD and DHPDEV structure */ 297 PVOID UFIHashTable[3]; 298 UNIVERSAL_FONT_ID ufi; 299 PVOID pvEMFSpoolData; 300 ULONG cjSize; 301 LIST_ENTRY leRecords; 302 DEVCAPS DevCaps; 303 HBRUSH BrushColor; 304 HPEN PenColor; 305 // wine data 306 DWORD dwData[5]; 307 } LDC, *PLDC; 308 309 typedef struct _DC_ATTR 310 { 311 PVOID pvLDC; 312 ULONG ulDirty_; 313 HANDLE hbrush; 314 HANDLE hpen; 315 COLORREF crBackgroundClr; 316 ULONG ulBackgroundClr; 317 COLORREF crForegroundClr; 318 ULONG ulForegroundClr; 319 COLORREF crBrushClr; 320 ULONG ulBrushClr; 321 COLORREF crPenClr; 322 ULONG ulPenClr; 323 DWORD iCS_CP; 324 INT iGraphicsMode; 325 BYTE jROP2; 326 BYTE jBkMode; 327 BYTE jFillMode; 328 BYTE jStretchBltMode; 329 POINTL ptlCurrent; 330 POINTL ptfxCurrent; 331 LONG lBkMode; 332 LONG lFillMode; 333 LONG lStretchBltMode; 334 FLONG flFontMapper; 335 LONG lIcmMode; 336 HANDLE hcmXform; 337 HCOLORSPACE hColorSpace; 338 FLONG flIcmFlags; 339 INT IcmBrushColor; 340 INT IcmPenColor; 341 PVOID pvLIcm; 342 FLONG flTextAlign; 343 LONG lTextAlign; 344 LONG lTextExtra; 345 LONG lRelAbs; 346 LONG lBreakExtra; 347 LONG cBreak; 348 HANDLE hlfntNew; 349 MATRIX mxWorldToDevice; 350 MATRIX mxDeviceToWorld; 351 MATRIX mxWorldToPage; 352 FLOATOBJ efM11PtoD; 353 FLOATOBJ efM22PtoD; 354 FLOATOBJ efDxPtoD; 355 FLOATOBJ efDyPtoD; 356 INT iMapMode; 357 DWORD dwLayout; 358 LONG lWindowOrgx; 359 POINTL ptlWindowOrg; 360 SIZEL szlWindowExt; 361 POINTL ptlViewportOrg; 362 SIZEL szlViewportExt; 363 FLONG flXform; 364 SIZEL szlVirtualDevicePixel; 365 SIZEL szlVirtualDeviceMm; 366 SIZEL szlVirtualDeviceSize; 367 POINTL ptlBrushOrigin; 368 RGN_ATTR VisRectRegion; 369 } DC_ATTR, *PDC_ATTR; 370 371 typedef struct _BRUSH_ATTR /* Used with pen too. */ 372 { 373 FLONG AttrFlags; 374 COLORREF lbColor; 375 } BRUSH_ATTR, *PBRUSH_ATTR; 376 377 typedef struct _FONT_ATTR 378 { 379 BOOL bSlowWidths; 380 PCFONT pCharWidthData; 381 } FONT_ATTR, *PFONT_ATTR; 382 383 384 #endif 385