- Reimplement Fast Mutex implementation in HAL/NT to be compatible with the real...
[reactos.git] / reactos / include / win32k / bitmaps.h
1 #ifndef __WIN32K_BITMAPS_H
2 #define __WIN32K_BITMAPS_H
3
4 /* GDI logical bitmap object */
5 typedef struct _BITMAPOBJ
6 {
7 SURFOBJ SurfObj;
8 FLONG flHooks;
9 FLONG flFlags;
10 SIZE dimension; /* For SetBitmapDimension(), do NOT use
11 to get width/height of bitmap, use
12 bitmap.bmWidth/bitmap.bmHeight for
13 that */
14 #ifdef NTOS_MODE_USER
15 PVOID BitsLock;
16 #else
17 PFAST_MUTEX BitsLock; /* You need to hold this lock before you touch
18 the actual bits in the bitmap */
19 #endif
20
21 /* For device-independent bitmaps: */
22 DIBSECTION *dib;
23 HPALETTE hDIBPalette;
24 } BITMAPOBJ, *PBITMAPOBJ;
25
26 #define BITMAPOBJ_IS_APIBITMAP 0x1
27
28 /* Internal interface */
29
30 #define BITMAPOBJ_AllocBitmap() \
31 ((HBITMAP) GDIOBJ_AllocObj (GDI_OBJECT_TYPE_BITMAP))
32 #define BITMAPOBJ_FreeBitmap(hBMObj) \
33 GDIOBJ_FreeObj((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_BITMAP)
34 /* NOTE: Use shared locks! */
35 #define BITMAPOBJ_LockBitmap(hBMObj) (PBITMAPOBJ)EngLockSurface((HSURF)hBMObj)
36 #define BITMAPOBJ_UnlockBitmap(pBMObj) EngUnlockSurface(&pBMObj->SurfObj)
37 BOOL INTERNAL_CALL BITMAP_Cleanup(PVOID ObjectBody);
38
39 BOOL INTERNAL_CALL BITMAPOBJ_InitBitsLock(BITMAPOBJ *pBMObj);
40 #define BITMAPOBJ_LockBitmapBits(pBMObj) ExEnterCriticalRegionAndAcquireFastMutexUnsafe((pBMObj)->BitsLock)
41 #define BITMAPOBJ_UnlockBitmapBits(pBMObj) ExReleaseFastMutexUnsafeAndLeaveCriticalRegion((pBMObj)->BitsLock)
42 void INTERNAL_CALL BITMAPOBJ_CleanupBitsLock(BITMAPOBJ *pBMObj);
43
44 INT FASTCALL BITMAPOBJ_GetWidthBytes (INT bmWidth, INT bpp);
45 HBITMAP FASTCALL BITMAPOBJ_CopyBitmap (HBITMAP hBitmap);
46 INT FASTCALL DIB_GetDIBWidthBytes (INT width, INT depth);
47 int STDCALL DIB_GetDIBImageBytes (INT width, INT height, INT depth);
48 INT FASTCALL DIB_BitmapInfoSize (const BITMAPINFO * info, WORD coloruse);
49 INT STDCALL BITMAP_GetObject(BITMAPOBJ * bmp, INT count, LPVOID buffer);
50 HBITMAP FASTCALL BitmapToSurf(PBITMAPOBJ BitmapObj, HDEV GDIDevice);
51
52 HBITMAP FASTCALL IntCreateCompatibleBitmap(PDC Dc, INT Width, INT Height);
53
54 /* User Entry Points */
55 BOOL
56 STDCALL
57 NtGdiAlphaBlend(
58 HDC hDCDest,
59 INT XOriginDest,
60 INT YOriginDest,
61 INT WidthDest,
62 INT HeightDest,
63 HDC hDCSrc,
64 INT XOriginSrc,
65 INT YOriginSrc,
66 INT WidthSrc,
67 INT HeightSrc,
68 BLENDFUNCTION BlendFunc);
69
70 BOOL
71 STDCALL
72 NtGdiBitBlt (
73 HDC hDCDest,
74 INT XDest,
75 INT YDest,
76 INT Width,
77 INT Height,
78 HDC hDCSrc,
79 INT XSrc,
80 INT YSrc,
81 DWORD ROP
82 );
83 HBITMAP
84 STDCALL
85 NtGdiCreateBitmap (
86 INT Width,
87 INT Height,
88 UINT Planes,
89 UINT BitsPerPel,
90 CONST VOID * Bits
91 );
92 HBITMAP
93 STDCALL
94 NtGdiCreateCompatibleBitmap (
95 HDC hDC,
96 INT Width,
97 INT Height
98 );
99 HBITMAP
100 STDCALL
101 NtGdiCreateBitmapIndirect (
102 CONST BITMAP * BM
103 );
104 HBITMAP
105 STDCALL
106 NtGdiCreateDIBitmap (
107 HDC hDC,
108 CONST BITMAPINFOHEADER * bmih,
109 DWORD Init,
110 CONST VOID * bInit,
111 CONST BITMAPINFO * bmi,
112 UINT Usage
113 );
114 HBITMAP
115 STDCALL
116 NtGdiCreateDIBSection (
117 HDC hDC,
118 CONST BITMAPINFO * bmi,
119 UINT Usage,
120 VOID * Bits,
121 HANDLE hSection,
122 DWORD dwOffset
123 );
124 HBITMAP
125 STDCALL
126 NtGdiCreateDiscardableBitmap (
127 HDC hDC,
128 INT Width,
129 INT Height
130 );
131 BOOL
132 STDCALL
133 NtGdiExtFloodFill (
134 HDC hDC,
135 INT XStart,
136 INT YStart,
137 COLORREF Color,
138 UINT FillType
139 );
140 BOOL
141 STDCALL
142 NtGdiFloodFill (
143 HDC hDC,
144 INT XStart,
145 INT YStart,
146 COLORREF Fill
147 );
148 LONG
149 STDCALL
150 NtGdiGetBitmapBits (
151 HBITMAP hBitmap,
152 LONG Buffer,
153 LPVOID Bits
154 );
155 BOOL
156 STDCALL
157 NtGdiGetBitmapDimensionEx (
158 HBITMAP hBitmap,
159 LPSIZE Dimension
160 );
161 UINT
162 STDCALL
163 NtGdiGetDIBColorTable (
164 HDC hDC,
165 UINT StartIndex,
166 UINT Entries,
167 RGBQUAD * Colors
168 );
169 INT
170 STDCALL
171 NtGdiGetDIBits (
172 HDC hDC,
173 HBITMAP hBitmap,
174 UINT StartScan,
175 UINT ScanLines,
176 LPVOID Bits,
177 LPBITMAPINFO bi,
178 UINT Usage
179 );
180 COLORREF
181 STDCALL
182 NtGdiGetPixel (
183 HDC hDC,
184 INT XPos,
185 INT YPos
186 );
187 BOOL
188 STDCALL
189 NtGdiGradientFill (
190 HDC hdc,
191 PTRIVERTEX pVertex,
192 ULONG uVertex,
193 PVOID pMesh,
194 ULONG uMesh,
195 ULONG ulMode
196 );
197 BOOL
198 STDCALL
199 NtGdiMaskBlt (
200 HDC hDCDest,
201 INT XDest,
202 INT YDest,
203 INT Width,
204 INT Height,
205 HDC hDCSrc,
206 INT XSrc,
207 INT YSrc,
208 HBITMAP hMaskBitmap,
209 INT xMask,
210 INT yMask,
211 DWORD ROP
212 );
213 BOOL
214 STDCALL
215 NtGdiPlgBlt (
216 HDC hDCDest,
217 CONST POINT * Point,
218 HDC hDCSrc,
219 INT XSrc,
220 INT YSrc,
221 INT Width,
222 INT Height,
223 HBITMAP hMaskBitmap,
224 INT xMask,
225 INT yMask
226 );
227 LONG
228 STDCALL
229 NtGdiSetBitmapBits (
230 HBITMAP hBitmap,
231 DWORD Bytes,
232 CONST VOID * Bits
233 );
234 BOOL
235 STDCALL
236 NtGdiSetBitmapDimensionEx (
237 HBITMAP hBitmap,
238 INT Width,
239 INT Height,
240 LPSIZE Size
241 );
242 UINT
243 STDCALL
244 NtGdiSetDIBColorTable (
245 HDC hDC,
246 UINT StartIndex,
247 UINT Entries,
248 CONST RGBQUAD * Colors
249 );
250 INT
251 STDCALL
252 NtGdiSetDIBits (
253 HDC hDC,
254 HBITMAP hBitmap,
255 UINT StartScan,
256 UINT ScanLines,
257 CONST VOID * Bits,
258 CONST BITMAPINFO * bmi,
259 UINT ColorUse
260 );
261 INT
262 STDCALL
263 NtGdiSetDIBitsToDevice (
264 HDC hDC,
265 INT XDest,
266 INT YDest,
267 DWORD Width,
268 DWORD Height,
269 INT XSrc,
270 INT YSrc,
271 UINT StartScan,
272 UINT ScanLines,
273 CONST VOID * Bits,
274 CONST BITMAPINFO * bmi,
275 UINT ColorUse
276 );
277 COLORREF
278 STDCALL
279 NtGdiSetPixel (
280 HDC hDC,
281 INT X,
282 INT Y,
283 COLORREF Color
284 );
285 BOOL
286 STDCALL
287 NtGdiSetPixelV (
288 HDC hDC,
289 INT X,
290 INT Y,
291 COLORREF Color
292 );
293 BOOL
294 STDCALL
295 NtGdiStretchBlt (
296 HDC hDCDest,
297 INT XOriginDest,
298 INT YOriginDest,
299 INT WidthDest,
300 INT HeightDest,
301 HDC hDCSrc,
302 INT XOriginSrc,
303 INT YOriginSrc,
304 INT WidthSrc,
305 INT HeightSrc,
306 DWORD ROP
307 );
308 INT
309 STDCALL
310 NtGdiStretchDIBits (
311 HDC hDC,
312 INT XDest,
313 INT YDest,
314 INT DestWidth,
315 INT DestHeight,
316 INT XSrc,
317 INT YSrc,
318 INT SrcWidth,
319 INT SrcHeight,
320 CONST VOID * Bits,
321 CONST BITMAPINFO * BitsInfo,
322 UINT Usage,
323 DWORD ROP
324 );
325
326 BOOL
327 STDCALL
328 NtGdiTransparentBlt(
329 HDC hdcDst,
330 INT xDst,
331 INT yDst,
332 INT cxDst,
333 INT cyDst,
334 HDC hdcSrc,
335 INT xSrc,
336 INT ySrc,
337 INT cxSrc,
338 INT cySrc,
339 COLORREF TransColor
340 );
341
342 #endif
343