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