Add missing cast.
[wine] / dlls / ttydrv / bitmap.c
1 /*
2  * TTY bitmap driver
3  *
4  * Copyright 1999 Patrik Stridvall
5  */
6
7 #include "config.h"
8
9 #include <string.h>
10
11 #include "bitmap.h"
12 #include "gdi.h"
13 #include "ttydrv.h"
14 #include "winbase.h"
15 #include "debugtools.h"
16
17 DEFAULT_DEBUG_CHANNEL(ttydrv);
18
19 /**********************************************************************/
20
21 extern const DC_FUNCTIONS *TTYDRV_DC_Funcs;  /* hack */
22
23 static LONG TTYDRV_DC_GetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count);
24 static LONG TTYDRV_DC_SetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count);
25
26 /***********************************************************************
27  *              TTYDRV_DC_AllocBitmap
28  */
29 TTYDRV_PHYSBITMAP *TTYDRV_DC_AllocBitmap(BITMAPOBJ *bitmap)
30 {
31   TTYDRV_PHYSBITMAP *physBitmap;
32   
33   if(!(physBitmap = HeapAlloc(GetProcessHeap(), 0, sizeof(TTYDRV_PHYSBITMAP)))) {
34     ERR("Can't alloc TTYDRV_PHYSBITMAP\n");
35     return NULL;
36   }
37
38   bitmap->physBitmap = physBitmap;
39   bitmap->funcs = TTYDRV_DC_Funcs;
40
41   return physBitmap;
42 }
43
44 /***********************************************************************
45  *           TTYDRV_DC_BitmapBits
46  */
47 LONG TTYDRV_DC_BitmapBits(HBITMAP hbitmap, void *bits, LONG count, WORD flags)
48 {
49   BITMAPOBJ *bitmap;
50   LONG result;
51
52   if(!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC)))
53     return FALSE;
54   
55   if(flags == DDB_GET)
56     result = TTYDRV_DC_GetBitmapBits(bitmap, bits, count);
57   else if(flags == DDB_SET)
58     result = TTYDRV_DC_SetBitmapBits(bitmap, bits, count);
59   else {
60     ERR("Unknown flags value %d\n", flags);
61     result = 0;
62   }
63   
64   GDI_ReleaseObj(hbitmap);
65   return result;
66 }
67
68 /***********************************************************************
69  *              TTYDRV_DC_CreateBitmap
70  */
71 BOOL TTYDRV_DC_CreateBitmap(HBITMAP hbitmap)
72 {
73   TTYDRV_PHYSBITMAP *physBitmap;
74   BITMAPOBJ *bitmap;
75
76   TRACE("(0x%04x)\n", hbitmap);
77
78   if(!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC)))
79     return FALSE;
80   
81   if(!(physBitmap = TTYDRV_DC_AllocBitmap(bitmap))) {
82     GDI_ReleaseObj(hbitmap);
83     return FALSE;
84   }
85  
86   /* Set bitmap bits */
87   if(bitmap->bitmap.bmBits) { 
88     TTYDRV_DC_BitmapBits(hbitmap, bitmap->bitmap.bmBits,
89                          bitmap->bitmap.bmHeight * bitmap->bitmap.bmWidthBytes,
90                          DDB_SET );
91   }
92
93   GDI_ReleaseObj(hbitmap);
94   
95   return TRUE;
96 }
97
98 /***********************************************************************
99  *              TTYDRV_DC_BITMAP_DeleteObject
100  */
101 BOOL TTYDRV_DC_BITMAP_DeleteObject(HBITMAP hbitmap, BITMAPOBJ *bitmap)
102 {
103   TRACE("(0x%04x, %p)\n", hbitmap, bitmap);
104
105   HeapFree(GetProcessHeap(), 0, bitmap->physBitmap);
106   bitmap->physBitmap = NULL;
107   bitmap->funcs = NULL;
108
109   return TRUE;
110 }
111
112 /***********************************************************************
113  *              TTYDRV_DC_GetBitmapBits
114  */
115 static LONG TTYDRV_DC_GetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count)
116 {
117   FIXME("(%p, %p, %ld): stub\n", bitmap, bits, count);
118
119   memset(bits, 0, count);
120
121   return count;
122 }
123
124 /***********************************************************************
125  *              TTYDRV_DC_BITMAP_SelectObject
126  */
127 HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap)
128 {
129   HBITMAP hPreviousBitmap;
130
131   TRACE("(%p, 0x%04x, %p)\n", dc, hbitmap, bitmap);
132
133   if(!(dc->flags & DC_MEMORY)) 
134     return 0;
135
136   /* Assure that the bitmap device dependent */
137   if(!bitmap->physBitmap && !TTYDRV_DC_CreateBitmap(hbitmap))
138     return 0;
139
140   if(bitmap->funcs != dc->funcs) {
141     ERR("Trying to select a non-TTY DDB into a TTY DC\n");
142     return 0;
143   }
144
145   dc->totalExtent.left   = 0;
146   dc->totalExtent.top    = 0;
147   dc->totalExtent.right  = bitmap->bitmap.bmWidth;
148   dc->totalExtent.bottom = bitmap->bitmap.bmHeight;
149
150   /* FIXME: Should be done in the common code instead */
151   if(dc->hVisRgn) {
152     SetRectRgn(dc->hVisRgn, 0, 0,
153                bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight);
154   } else { 
155     HRGN hrgn;
156
157     if(!(hrgn = CreateRectRgn(0, 0, bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight)))
158       return 0;
159
160     dc->hVisRgn = hrgn;
161   }
162
163   hPreviousBitmap = dc->hBitmap;
164   dc->hBitmap = hbitmap;
165
166   return hPreviousBitmap;
167 }
168
169 /***********************************************************************
170  *              TTYDRV_DC_SetBitmapBits
171  */
172 static LONG TTYDRV_DC_SetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count)
173 {
174   FIXME("(%p, %p, %ld): semistub\n", bitmap, bits, count);
175
176   return count;
177 }
178
179 /***********************************************************************
180  *              TTYDRV_BITMAP_CreateDIBSection
181  */
182 HBITMAP TTYDRV_BITMAP_CreateDIBSection(
183   DC *dc, BITMAPINFO *bmi, UINT usage,
184   LPVOID *bits, HANDLE section, DWORD offset)
185 {
186   FIXME("(%p, %p, %u, %p, 0x%04x, %ld): stub\n",
187         dc, bmi, usage, bits, section, offset);
188
189   return (HBITMAP) NULL;
190 }
191
192 /***********************************************************************
193  *              TTYDRV_BITMAP_DeleteDIBSection
194  */
195 void TTYDRV_BITMAP_DeleteDIBSection(BITMAPOBJ *bmp)
196 {
197   FIXME("(%p): stub\n", bmp);
198 }
199
200 /***********************************************************************
201  *              TTYDRV_BITMAP_SetDIBColorTable
202  */
203 UINT TTYDRV_BITMAP_SetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, const RGBQUAD *colors)
204 {
205   FIXME("(%p): stub\n", bmp);
206   return 0;
207 }
208
209 /***********************************************************************
210  *              TTYDRV_BITMAP_GetDIBColorTable
211  */
212 UINT TTYDRV_BITMAP_GetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, RGBQUAD *colors)
213 {
214   FIXME("(%p): stub\n", bmp);
215   return 0;
216 }
217
218 /***********************************************************************
219  *              TTYDRV_BITMAP_Lock
220  */
221 INT TTYDRV_BITMAP_Lock(BITMAPOBJ *bmp, INT req, BOOL lossy)
222 {
223   FIXME("(%p): stub\n", bmp);
224   return DIB_Status_None;
225 }
226
227 /***********************************************************************
228  *              TTYDRV_BITMAP_Unlock
229  */
230 void TTYDRV_BITMAP_Unlock(BITMAPOBJ *bmp, BOOL commit)
231 {
232   FIXME("(%p): stub\n", bmp);
233 }
234
235 /***********************************************************************
236  *              TTYDRV_BITMAP_GetDIBits
237  */
238 INT TTYDRV_BITMAP_GetDIBits(
239   BITMAPOBJ *bmp, DC *dc, UINT startscan, UINT lines, 
240   LPVOID bits, BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap)
241 {
242   FIXME("(%p, %p, %u, %u, %p, %p, %u, 0x%04x): stub\n",
243         bmp, dc, startscan, lines, bits, info, coloruse, hbitmap);
244
245   return 0;
246 }
247
248
249 /***********************************************************************
250  *              TTYDRV_BITMAP_SetDIBits
251  */
252 INT TTYDRV_BITMAP_SetDIBits(
253   BITMAPOBJ *bmp, DC *dc, UINT startscan, UINT lines, 
254   LPCVOID bits, const BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap)
255 {
256   FIXME("(%p, %p, %u, %u, %p, %p, %u, 0x%04x): stub\n",
257         bmp, dc, startscan, lines, bits, info, coloruse, hbitmap);
258
259   return 0;
260 }
261
262 /***********************************************************************
263  *              TTYDRV_DC_SetDIBitsToDevice
264  */
265 INT TTYDRV_DC_SetDIBitsToDevice(DC *dc, INT xDest, INT yDest, DWORD cx,
266                                 DWORD cy, INT xSrc, INT ySrc,
267                                 UINT startscan, UINT lines, LPCVOID bits,
268                                 const BITMAPINFO *info, UINT coloruse)
269 {
270   FIXME("(%p, %d, %d, %ld, %ld, %d, %d, %u, %u, %p, %p, %u): stub\n",
271         dc, xDest, yDest, cx, cy, xSrc, ySrc, startscan, lines, bits, info, coloruse);
272
273   return 0;
274 }