- Merge audio components from head
[reactos.git] / subsystems / win32 / win32k / include / surface.h
1 #pragma once
2
3 #include "win32.h"
4 #include "gdiobj.h"
5
6 #define PDEV_SURFACE 0x80000000
7
8 /* GDI surface object */
9 typedef struct _SURFACE
10 {
11 BASEOBJECT BaseObject;
12
13 SURFOBJ SurfObj;
14 FLONG flHooks;
15 FLONG flFlags;
16 struct _PALETTE *ppal;
17
18 union
19 {
20 HANDLE hSecureUMPD; // if UMPD_SURFACE set
21 HANDLE hMirrorParent;// if MIRROR_SURFACE set
22 HANDLE hDDSurface; // if DIRECTDRAW_SURFACE set
23 };
24
25 SIZEL dimension; /* For SetBitmapDimension(), do NOT use
26 to get width/height of bitmap, use
27 bitmap.bmWidth/bitmap.bmHeight for
28 that */
29
30 HDC hDC; // Doc in "Undocumented Windows", page 546, seems to be supported with XP.
31 ULONG cRef; // 0x064
32 HPALETTE hpalHint;
33
34 /* For device-independent bitmaps: */
35 HANDLE hDIBSection;
36 HANDLE hSecure;
37 DWORD dwOffset;
38
39 /* reactos specific */
40 PFAST_MUTEX BitsLock; /* You need to hold this lock before you touch
41 the actual bits in the bitmap */
42 HPALETTE hDIBPalette;
43 DWORD dsBitfields[3]; // hack, should probably use palette instead
44 DWORD biClrUsed;
45 DWORD biClrImportant;
46 } SURFACE, *PSURFACE;
47
48 #define BITMAPOBJ_IS_APIBITMAP 0x1
49
50 /* Internal interface */
51
52 #define SURFACE_AllocSurface() ((PSURFACE) GDIOBJ_AllocObj(GDIObjType_SURF_TYPE))
53 #define SURFACE_AllocSurfaceWithHandle() ((PSURFACE) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_BITMAP))
54 #define SURFACE_FreeSurface(pBMObj) GDIOBJ_FreeObj((POBJ) pBMObj, GDIObjType_SURF_TYPE)
55 #define SURFACE_FreeSurfaceByHandle(hBMObj) GDIOBJ_FreeObjByHandle((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP)
56
57 /* NOTE: Use shared locks! */
58 #define SURFACE_LockSurface(hBMObj) \
59 ((PSURFACE) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
60 #define SURFACE_ShareLockSurface(hBMObj) \
61 ((PSURFACE) GDIOBJ_ShareLockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP))
62 #define SURFACE_UnlockSurface(pBMObj) \
63 GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
64 #define SURFACE_ShareUnlockSurface(pBMObj) \
65 GDIOBJ_ShareUnlockObjByPtr ((POBJ)pBMObj)
66
67 #define SURFACE_LockBitmapBits(pBMObj) ExEnterCriticalRegionAndAcquireFastMutexUnsafe((pBMObj)->BitsLock)
68 #define SURFACE_UnlockBitmapBits(pBMObj) ExReleaseFastMutexUnsafeAndLeaveCriticalRegion((pBMObj)->BitsLock)
69
70 BOOL INTERNAL_CALL SURFACE_Cleanup(PVOID ObjectBody);
71 BOOL INTERNAL_CALL SURFACE_InitBitsLock(SURFACE *pBMObj);
72 void INTERNAL_CALL SURFACE_CleanupBitsLock(SURFACE *pBMObj);
73
74 #define GDIDEV(SurfObj) ((PDEVOBJ *)((SurfObj)->hdev))
75 #define GDIDEVFUNCS(SurfObj) ((PDEVOBJ *)((SurfObj)->hdev))->DriverFunctions
76
77 INT FASTCALL BitsPerFormat (ULONG Format);
78 ULONG FASTCALL BitmapFormat (WORD Bits, DWORD Compression);