- Sync up Mm interface with WinLdr branch (introduce the concept of a memory type...
[reactos.git] / reactos / subsystems / win32 / win32k / include / bitmaps.h
1
2 #ifndef __WIN32K_BITMAPS_H
3 #define __WIN32K_BITMAPS_H
4
5 /* GDI logical bitmap object */
6 typedef struct _BITMAPOBJ
7 {
8 // HGDIOBJ hHmgr;
9 // PVOID pvEntry;
10 // ULONG lucExcLock;
11 // ULONG Tid;
12
13 SURFOBJ SurfObj;
14 FLONG flHooks;
15 FLONG flFlags;
16 SIZE dimension; /* For SetBitmapDimension(), do NOT use
17 to get width/height of bitmap, use
18 bitmap.bmWidth/bitmap.bmHeight for
19 that */
20 PFAST_MUTEX BitsLock; /* You need to hold this lock before you touch
21 the actual bits in the bitmap */
22
23 /* For device-independent bitmaps: */
24 DIBSECTION *dib;
25 HPALETTE hDIBPalette;
26 } BITMAPOBJ, *PBITMAPOBJ;
27
28 #define BITMAPOBJ_IS_APIBITMAP 0x1
29
30 /* Internal interface */
31
32 #define BITMAPOBJ_AllocBitmap() \
33 ((HBITMAP) GDIOBJ_AllocObj (GdiHandleTable, GDI_OBJECT_TYPE_BITMAP))
34 #define BITMAPOBJ_FreeBitmap(hBMObj) \
35 GDIOBJ_FreeObj(GdiHandleTable, (HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP)
36 /* NOTE: Use shared locks! */
37 #define BITMAPOBJ_LockBitmap(hBMObj) (PBITMAPOBJ)EngLockSurface((HSURF)hBMObj)
38 #define BITMAPOBJ_UnlockBitmap(pBMObj) EngUnlockSurface(&pBMObj->SurfObj)
39 BOOL INTERNAL_CALL BITMAP_Cleanup(PVOID ObjectBody);
40
41 BOOL INTERNAL_CALL BITMAPOBJ_InitBitsLock(BITMAPOBJ *pBMObj);
42 #define BITMAPOBJ_LockBitmapBits(pBMObj) ExEnterCriticalRegionAndAcquireFastMutexUnsafe((pBMObj)->BitsLock)
43 #define BITMAPOBJ_UnlockBitmapBits(pBMObj) ExReleaseFastMutexUnsafeAndLeaveCriticalRegion((pBMObj)->BitsLock)
44 void INTERNAL_CALL BITMAPOBJ_CleanupBitsLock(BITMAPOBJ *pBMObj);
45
46 INT FASTCALL BITMAPOBJ_GetWidthBytes (INT bmWidth, INT bpp);
47 INT FASTCALL BITMAPOBJ_GetRealBitsPixel(INT nBitsPixel);
48 HBITMAP FASTCALL BITMAPOBJ_CopyBitmap (HBITMAP hBitmap);
49 INT FASTCALL DIB_GetDIBWidthBytes (INT width, INT depth);
50 int NTAPI DIB_GetDIBImageBytes (INT width, INT height, INT depth);
51 INT FASTCALL DIB_BitmapInfoSize (const BITMAPINFO * info, WORD coloruse);
52 INT NTAPI BITMAP_GetObject(BITMAPOBJ * bmp, INT count, LPVOID buffer);
53 HBITMAP FASTCALL BitmapToSurf(PBITMAPOBJ BitmapObj, HDEV GDIDevice);
54
55 #endif
56