4 * Copyright 1999 Patrik Stridvall
12 #include "debugtools.h"
14 DEFAULT_DEBUG_CHANNEL(ttydrv);
16 /**********************************************************************/
18 extern const DC_FUNCTIONS *TTYDRV_DC_Funcs; /* hack */
20 static LONG TTYDRV_DC_GetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count);
21 static LONG TTYDRV_DC_SetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count);
23 /***********************************************************************
24 * TTYDRV_DC_AllocBitmap
26 TTYDRV_PHYSBITMAP *TTYDRV_DC_AllocBitmap(BITMAPOBJ *bitmap)
28 TTYDRV_PHYSBITMAP *physBitmap;
30 if(!(physBitmap = HeapAlloc(GetProcessHeap(), 0, sizeof(TTYDRV_PHYSBITMAP)))) {
31 ERR("Can't alloc TTYDRV_PHYSBITMAP\n");
35 bitmap->physBitmap = physBitmap;
36 bitmap->funcs = TTYDRV_DC_Funcs;
41 /***********************************************************************
42 * TTYDRV_DC_BitmapBits
44 LONG TTYDRV_DC_BitmapBits(HBITMAP hbitmap, void *bits, LONG count, WORD flags)
49 if(!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC)))
53 result = TTYDRV_DC_GetBitmapBits(bitmap, bits, count);
54 else if(flags == DDB_SET)
55 result = TTYDRV_DC_SetBitmapBits(bitmap, bits, count);
57 ERR("Unknown flags value %d\n", flags);
61 GDI_ReleaseObj(hbitmap);
65 /***********************************************************************
66 * TTYDRV_DC_CreateBitmap
68 BOOL TTYDRV_DC_CreateBitmap(HBITMAP hbitmap)
70 TTYDRV_PHYSBITMAP *physBitmap;
73 TRACE("(0x%04x)\n", hbitmap);
75 if(!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC)))
78 if(!(physBitmap = TTYDRV_DC_AllocBitmap(bitmap))) {
79 GDI_ReleaseObj(hbitmap);
84 if(bitmap->bitmap.bmBits) {
85 TTYDRV_DC_BitmapBits(hbitmap, bitmap->bitmap.bmBits,
86 bitmap->bitmap.bmHeight * bitmap->bitmap.bmWidthBytes,
90 GDI_ReleaseObj(hbitmap);
95 /***********************************************************************
96 * TTYDRV_DC_BITMAP_DeleteObject
98 BOOL TTYDRV_DC_BITMAP_DeleteObject(HBITMAP hbitmap, BITMAPOBJ *bitmap)
100 TRACE("(0x%04x, %p)\n", hbitmap, bitmap);
102 HeapFree(GetProcessHeap(), 0, bitmap->physBitmap);
103 bitmap->physBitmap = NULL;
104 bitmap->funcs = NULL;
109 /***********************************************************************
110 * TTYDRV_DC_GetBitmapBits
112 static LONG TTYDRV_DC_GetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count)
114 FIXME("(%p, %p, %ld): stub\n", bitmap, bits, count);
116 memset(bits, 0, count);
121 /***********************************************************************
122 * TTYDRV_DC_BITMAP_SelectObject
124 HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap)
126 HBITMAP hPreviousBitmap;
128 TRACE("(%p, 0x%04x, %p)\n", dc, hbitmap, bitmap);
130 if(!(dc->flags & DC_MEMORY))
133 /* Assure that the bitmap device dependent */
134 if(!bitmap->physBitmap && !TTYDRV_DC_CreateBitmap(hbitmap))
137 if(bitmap->funcs != dc->funcs) {
138 ERR("Trying to select a non-TTY DDB into a TTY DC\n");
142 dc->totalExtent.left = 0;
143 dc->totalExtent.top = 0;
144 dc->totalExtent.right = bitmap->bitmap.bmWidth;
145 dc->totalExtent.bottom = bitmap->bitmap.bmHeight;
147 /* FIXME: Should be done in the common code instead */
149 SetRectRgn(dc->hVisRgn, 0, 0,
150 bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight);
154 if(!(hrgn = CreateRectRgn(0, 0, bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight)))
160 hPreviousBitmap = dc->hBitmap;
161 dc->hBitmap = hbitmap;
163 return hPreviousBitmap;
166 /***********************************************************************
167 * TTYDRV_DC_SetBitmapBits
169 static LONG TTYDRV_DC_SetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count)
171 FIXME("(%p, %p, %ld): semistub\n", bitmap, bits, count);
176 /***********************************************************************
177 * TTYDRV_BITMAP_CreateDIBSection
179 HBITMAP TTYDRV_BITMAP_CreateDIBSection(
180 DC *dc, BITMAPINFO *bmi, UINT usage,
181 LPVOID *bits, HANDLE section, DWORD offset)
183 FIXME("(%p, %p, %u, %p, 0x%04x, %ld): stub\n",
184 dc, bmi, usage, bits, section, offset);
186 return (HBITMAP) NULL;
189 /***********************************************************************
190 * TTYDRV_BITMAP_DeleteDIBSection
192 void TTYDRV_BITMAP_DeleteDIBSection(BITMAPOBJ *bmp)
194 FIXME("(%p): stub\n", bmp);
197 /***********************************************************************
198 * TTYDRV_BITMAP_SetDIBColorTable
200 UINT TTYDRV_BITMAP_SetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, const RGBQUAD *colors)
202 FIXME("(%p): stub\n", bmp);
206 /***********************************************************************
207 * TTYDRV_BITMAP_GetDIBColorTable
209 UINT TTYDRV_BITMAP_GetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, RGBQUAD *colors)
211 FIXME("(%p): stub\n", bmp);
215 /***********************************************************************
218 INT TTYDRV_BITMAP_Lock(BITMAPOBJ *bmp, INT req, BOOL lossy)
220 FIXME("(%p): stub\n", bmp);
221 return DIB_Status_None;
224 /***********************************************************************
225 * TTYDRV_BITMAP_Unlock
227 void TTYDRV_BITMAP_Unlock(BITMAPOBJ *bmp, BOOL commit)
229 FIXME("(%p): stub\n", bmp);
232 /***********************************************************************
233 * TTYDRV_BITMAP_GetDIBits
235 INT TTYDRV_BITMAP_GetDIBits(
236 BITMAPOBJ *bmp, DC *dc, UINT startscan, UINT lines,
237 LPVOID bits, BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap)
239 FIXME("(%p, %p, %u, %u, %p, %p, %u, 0x%04x): stub\n",
240 bmp, dc, startscan, lines, bits, info, coloruse, hbitmap);
246 /***********************************************************************
247 * TTYDRV_BITMAP_SetDIBits
249 INT TTYDRV_BITMAP_SetDIBits(
250 BITMAPOBJ *bmp, DC *dc, UINT startscan, UINT lines,
251 LPCVOID bits, const BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap)
253 FIXME("(%p, %p, %u, %u, %p, %p, %u, 0x%04x): stub\n",
254 bmp, dc, startscan, lines, bits, info, coloruse, hbitmap);
259 /***********************************************************************
260 * TTYDRV_DC_SetDIBitsToDevice
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)
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);