6 /* GDI surface object */
7 typedef struct _SURFACE
14 struct _PALETTE
*ppal
;
18 HANDLE hSecureUMPD
; // if UMPD_SURFACE set
19 HANDLE hMirrorParent
;// if MIRROR_SURFACE set
20 HANDLE hDDSurface
; // if DIRECTDRAW_SURFACE set
23 SIZEL dimension
; /* For SetBitmapDimension(), do NOT use
24 to get width/height of bitmap, use
25 bitmap.bmWidth/bitmap.bmHeight for
28 HDC hDC
; // Doc in "Undocumented Windows", page 546, seems to be supported with XP.
32 /* For device-independent bitmaps: */
37 /* reactos specific */
38 PFAST_MUTEX BitsLock
; /* You need to hold this lock before you touch
39 the actual bits in the bitmap */
41 DWORD dsBitfields
[3]; // hack, should probably use palette instead
46 #define BITMAPOBJ_IS_APIBITMAP 0x1
48 /* Internal interface */
50 #define SURFACE_AllocSurface() ((PSURFACE) GDIOBJ_AllocObj(GDIObjType_SURF_TYPE))
51 #define SURFACE_AllocSurfaceWithHandle() ((PSURFACE) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_BITMAP))
52 #define SURFACE_FreeSurface(pBMObj) GDIOBJ_FreeObj((POBJ) pBMObj, GDIObjType_SURF_TYPE)
53 #define SURFACE_FreeSurfaceByHandle(hBMObj) GDIOBJ_FreeObjByHandle((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP)
55 /* NOTE: Use shared locks! */
56 #define SURFACE_LockSurface(hBMObj) \
57 ((PSURFACE) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
58 #define SURFACE_ShareLockSurface(hBMObj) \
59 ((PSURFACE) GDIOBJ_ShareLockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
60 #define SURFACE_UnlockSurface(pBMObj) \
61 GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
62 #define SURFACE_ShareUnlockSurface(pBMObj) \
63 GDIOBJ_ShareUnlockObjByPtr ((POBJ)pBMObj)
65 #define SURFACE_LockBitmapBits(pBMObj) ExEnterCriticalRegionAndAcquireFastMutexUnsafe((pBMObj)->BitsLock)
66 #define SURFACE_UnlockBitmapBits(pBMObj) ExReleaseFastMutexUnsafeAndLeaveCriticalRegion((pBMObj)->BitsLock)
68 BOOL INTERNAL_CALL
SURFACE_Cleanup(PVOID ObjectBody
);
69 BOOL INTERNAL_CALL
SURFACE_InitBitsLock(SURFACE
*pBMObj
);
70 void INTERNAL_CALL
SURFACE_CleanupBitsLock(SURFACE
*pBMObj
);
72 #define GDIDEV(SurfObj) ((PDEVOBJ *)((SurfObj)->hdev))
73 #define GDIDEVFUNCS(SurfObj) ((PDEVOBJ *)((SurfObj)->hdev))->DriverFunctions
75 INT FASTCALL
BitsPerFormat (ULONG Format
);
76 ULONG FASTCALL
BitmapFormat (WORD Bits
, DWORD Compression
);