4 * Copyright 1999 Patrik Stridvall
15 #include "debugtools.h"
17 DEFAULT_DEBUG_CHANNEL(ttydrv);
19 /**********************************************************************/
21 extern const DC_FUNCTIONS *TTYDRV_DC_Funcs; /* hack */
23 static LONG TTYDRV_DC_GetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count);
24 static LONG TTYDRV_DC_SetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count);
26 /***********************************************************************
27 * TTYDRV_DC_AllocBitmap
29 TTYDRV_PHYSBITMAP *TTYDRV_DC_AllocBitmap(BITMAPOBJ *bitmap)
31 TTYDRV_PHYSBITMAP *physBitmap;
33 if(!(physBitmap = HeapAlloc(GetProcessHeap(), 0, sizeof(TTYDRV_PHYSBITMAP)))) {
34 ERR("Can't alloc TTYDRV_PHYSBITMAP\n");
38 bitmap->physBitmap = physBitmap;
39 bitmap->funcs = TTYDRV_DC_Funcs;
44 /***********************************************************************
45 * TTYDRV_DC_BitmapBits
47 LONG TTYDRV_DC_BitmapBits(HBITMAP hbitmap, void *bits, LONG count, WORD flags)
52 if(!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC)))
56 result = TTYDRV_DC_GetBitmapBits(bitmap, bits, count);
57 else if(flags == DDB_SET)
58 result = TTYDRV_DC_SetBitmapBits(bitmap, bits, count);
60 ERR("Unknown flags value %d\n", flags);
64 GDI_ReleaseObj(hbitmap);
68 /***********************************************************************
69 * TTYDRV_DC_CreateBitmap
71 BOOL TTYDRV_DC_CreateBitmap(HBITMAP hbitmap)
73 TTYDRV_PHYSBITMAP *physBitmap;
76 TRACE("(0x%04x)\n", hbitmap);
78 if(!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC)))
81 if(!(physBitmap = TTYDRV_DC_AllocBitmap(bitmap))) {
82 GDI_ReleaseObj(hbitmap);
87 if(bitmap->bitmap.bmBits) {
88 TTYDRV_DC_BitmapBits(hbitmap, bitmap->bitmap.bmBits,
89 bitmap->bitmap.bmHeight * bitmap->bitmap.bmWidthBytes,
93 GDI_ReleaseObj(hbitmap);
98 /***********************************************************************
99 * TTYDRV_DC_BITMAP_DeleteObject
101 BOOL TTYDRV_DC_BITMAP_DeleteObject(HBITMAP hbitmap, BITMAPOBJ *bitmap)
103 TRACE("(0x%04x, %p)\n", hbitmap, bitmap);
105 HeapFree(GetProcessHeap(), 0, bitmap->physBitmap);
106 bitmap->physBitmap = NULL;
107 bitmap->funcs = NULL;
112 /***********************************************************************
113 * TTYDRV_DC_GetBitmapBits
115 static LONG TTYDRV_DC_GetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count)
117 FIXME("(%p, %p, %ld): stub\n", bitmap, bits, count);
119 memset(bits, 0, count);
124 /***********************************************************************
125 * TTYDRV_DC_BITMAP_SelectObject
127 HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap)
129 HBITMAP hPreviousBitmap;
131 TRACE("(%p, 0x%04x, %p)\n", dc, hbitmap, bitmap);
133 if(!(dc->flags & DC_MEMORY))
136 /* Assure that the bitmap device dependent */
137 if(!bitmap->physBitmap && !TTYDRV_DC_CreateBitmap(hbitmap))
140 if(bitmap->funcs != dc->funcs) {
141 ERR("Trying to select a non-TTY DDB into a TTY DC\n");
145 dc->totalExtent.left = 0;
146 dc->totalExtent.top = 0;
147 dc->totalExtent.right = bitmap->bitmap.bmWidth;
148 dc->totalExtent.bottom = bitmap->bitmap.bmHeight;
150 /* FIXME: Should be done in the common code instead */
152 SetRectRgn(dc->hVisRgn, 0, 0,
153 bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight);
157 if(!(hrgn = CreateRectRgn(0, 0, bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight)))
163 hPreviousBitmap = dc->hBitmap;
164 dc->hBitmap = hbitmap;
166 return hPreviousBitmap;
169 /***********************************************************************
170 * TTYDRV_DC_SetBitmapBits
172 static LONG TTYDRV_DC_SetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count)
174 FIXME("(%p, %p, %ld): semistub\n", bitmap, bits, count);
179 /***********************************************************************
180 * TTYDRV_BITMAP_CreateDIBSection
182 HBITMAP TTYDRV_BITMAP_CreateDIBSection(
183 DC *dc, BITMAPINFO *bmi, UINT usage,
184 LPVOID *bits, HANDLE section, DWORD offset)
186 FIXME("(%p, %p, %u, %p, 0x%04x, %ld): stub\n",
187 dc, bmi, usage, bits, section, offset);
189 return (HBITMAP) NULL;
192 /***********************************************************************
193 * TTYDRV_BITMAP_DeleteDIBSection
195 void TTYDRV_BITMAP_DeleteDIBSection(BITMAPOBJ *bmp)
197 FIXME("(%p): stub\n", bmp);
200 /***********************************************************************
201 * TTYDRV_BITMAP_SetDIBColorTable
203 UINT TTYDRV_BITMAP_SetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, const RGBQUAD *colors)
205 FIXME("(%p): stub\n", bmp);
209 /***********************************************************************
210 * TTYDRV_BITMAP_GetDIBColorTable
212 UINT TTYDRV_BITMAP_GetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, RGBQUAD *colors)
214 FIXME("(%p): stub\n", bmp);
218 /***********************************************************************
221 INT TTYDRV_BITMAP_Lock(BITMAPOBJ *bmp, INT req, BOOL lossy)
223 FIXME("(%p): stub\n", bmp);
224 return DIB_Status_None;
227 /***********************************************************************
228 * TTYDRV_BITMAP_Unlock
230 void TTYDRV_BITMAP_Unlock(BITMAPOBJ *bmp, BOOL commit)
232 FIXME("(%p): stub\n", bmp);
235 /***********************************************************************
236 * TTYDRV_BITMAP_GetDIBits
238 INT TTYDRV_BITMAP_GetDIBits(
239 BITMAPOBJ *bmp, DC *dc, UINT startscan, UINT lines,
240 LPVOID bits, BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap)
242 FIXME("(%p, %p, %u, %u, %p, %p, %u, 0x%04x): stub\n",
243 bmp, dc, startscan, lines, bits, info, coloruse, hbitmap);
249 /***********************************************************************
250 * TTYDRV_BITMAP_SetDIBits
252 INT TTYDRV_BITMAP_SetDIBits(
253 BITMAPOBJ *bmp, DC *dc, UINT startscan, UINT lines,
254 LPCVOID bits, const BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap)
256 FIXME("(%p, %p, %u, %u, %p, %p, %u, 0x%04x): stub\n",
257 bmp, dc, startscan, lines, bits, info, coloruse, hbitmap);
262 /***********************************************************************
263 * TTYDRV_DC_SetDIBitsToDevice
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)
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);