Implement NtGdiGetDCforBitmap. Q. Where to set hdc? ATM we return null.
[reactos.git] / reactos / subsystems / win32 / win32k / include / bitmaps.h
1
2 #ifndef __WIN32K_BITMAPS_H
3 #define __WIN32K_BITMAPS_H
4
5 #include "win32.h"
6 #include "gdiobj.h"
7
8 /* GDI logical bitmap object */
9 typedef struct _BITMAPOBJ
10 {
11 BASEOBJECT BaseObject;
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 HDC hDC;
27 } BITMAPOBJ, *PBITMAPOBJ;
28
29 #define BITMAPOBJ_IS_APIBITMAP 0x1
30
31 /* Internal interface */
32
33 #define BITMAPOBJ_AllocBitmap() ((PBITMAPOBJ) GDIOBJ_AllocObj(GDIObjType_SURF_TYPE))
34 #define BITMAPOBJ_AllocBitmapWithHandle() ((PBITMAPOBJ) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_BITMAP))
35 #define BITMAPOBJ_FreeBitmap(pBMObj) GDIOBJ_FreeObj((POBJ) pBMObj, GDIObjType_SURF_TYPE)
36 #define BITMAPOBJ_FreeBitmapByHandle(hBMObj) GDIOBJ_FreeObjByHandle((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP)
37
38 /* NOTE: Use shared locks! */
39 #define BITMAPOBJ_LockBitmap(hBMObj) \
40 ((PBITMAPOBJ) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
41 #define BITMAPOBJ_ShareLockBitmap(hBMObj) \
42 ((PBITMAPOBJ) GDIOBJ_ShareLockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
43 #define BITMAPOBJ_UnlockBitmap(pBMObj) \
44 GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
45 #define BITMAPOBJ_ShareUnlockBitmap(pBMObj) \
46 GDIOBJ_ShareUnlockObjByPtr ((POBJ)pBMObj)
47
48 BOOL INTERNAL_CALL BITMAP_Cleanup(PVOID ObjectBody);
49
50 BOOL INTERNAL_CALL BITMAPOBJ_InitBitsLock(BITMAPOBJ *pBMObj);
51 #define BITMAPOBJ_LockBitmapBits(pBMObj) ExEnterCriticalRegionAndAcquireFastMutexUnsafe((pBMObj)->BitsLock)
52 #define BITMAPOBJ_UnlockBitmapBits(pBMObj) ExReleaseFastMutexUnsafeAndLeaveCriticalRegion((pBMObj)->BitsLock)
53 void INTERNAL_CALL BITMAPOBJ_CleanupBitsLock(BITMAPOBJ *pBMObj);
54
55 INT FASTCALL BITMAPOBJ_GetWidthBytes (INT bmWidth, INT bpp);
56 INT FASTCALL BITMAPOBJ_GetRealBitsPixel(INT nBitsPixel);
57 HBITMAP FASTCALL BITMAPOBJ_CopyBitmap (HBITMAP hBitmap);
58 INT FASTCALL DIB_GetDIBWidthBytes (INT width, INT depth);
59 int NTAPI DIB_GetDIBImageBytes (INT width, INT height, INT depth);
60 INT FASTCALL DIB_BitmapInfoSize (const BITMAPINFO * info, WORD coloruse);
61 INT NTAPI BITMAP_GetObject(BITMAPOBJ * bmp, INT count, LPVOID buffer);
62 HBITMAP FASTCALL BitmapToSurf(PBITMAPOBJ BitmapObj, HDEV GDIDevice);
63
64 #endif
65
66