1 #ifndef _WIN32K_SURFACE_H
2 #define _WIN32K_SURFACE_H
7 /* GDI surface object */
8 typedef struct _SURFACE
10 BASEOBJECT BaseObject
;
15 SIZE dimension
; /* For SetBitmapDimension(), do NOT use
16 to get width/height of bitmap, use
17 bitmap.bmWidth/bitmap.bmHeight for
19 PFAST_MUTEX BitsLock
; /* You need to hold this lock before you touch
20 the actual bits in the bitmap */
22 /* For device-independent bitmaps: */
28 HDC hDC
; // Doc in "Undocumented Windows", page 546, seems to be supported with XP.
29 DWORD dsBitfields
[3]; // hack, should probably use palette instead
34 #define BITMAPOBJ_IS_APIBITMAP 0x1
36 /* Internal interface */
38 #define SURFACE_AllocSurface() ((PSURFACE) GDIOBJ_AllocObj(GDIObjType_SURF_TYPE))
39 #define SURFACE_AllocSurfaceWithHandle() ((PSURFACE) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_BITMAP))
40 #define SURFACE_FreeSurface(pBMObj) GDIOBJ_FreeObj((POBJ) pBMObj, GDIObjType_SURF_TYPE)
41 #define SURFACE_FreeSurfaceByHandle(hBMObj) GDIOBJ_FreeObjByHandle((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP)
43 /* NOTE: Use shared locks! */
44 #define SURFACE_LockSurface(hBMObj) \
45 ((PSURFACE) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
46 #define SURFACE_ShareLockSurface(hBMObj) \
47 ((PSURFACE) GDIOBJ_ShareLockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
48 #define SURFACE_UnlockSurface(pBMObj) \
49 GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
50 #define SURFACE_ShareUnlockSurface(pBMObj) \
51 GDIOBJ_ShareUnlockObjByPtr ((POBJ)pBMObj)
53 #define SURFACE_LockBitmapBits(pBMObj) ExEnterCriticalRegionAndAcquireFastMutexUnsafe((pBMObj)->BitsLock)
54 #define SURFACE_UnlockBitmapBits(pBMObj) ExReleaseFastMutexUnsafeAndLeaveCriticalRegion((pBMObj)->BitsLock)
56 BOOL INTERNAL_CALL
SURFACE_Cleanup(PVOID ObjectBody
);
57 BOOL INTERNAL_CALL
SURFACE_InitBitsLock(SURFACE
*pBMObj
);
58 void INTERNAL_CALL
SURFACE_CleanupBitsLock(SURFACE
*pBMObj
);
60 #define GDIDEV(SurfObj) ((PDEVOBJ *)((SurfObj)->hdev))
61 #define GDIDEVFUNCS(SurfObj) ((PDEVOBJ *)((SurfObj)->hdev))->DriverFunctions
63 INT FASTCALL
BitsPerFormat (ULONG Format
);
64 ULONG FASTCALL
BitmapFormat (WORD Bits
, DWORD Compression
);
66 #endif /* _WIN32K_SURFACE_H */