4 * Copyright 1999 Patrik Stridvall
11 #include "debugtools.h"
13 DEFAULT_DEBUG_CHANNEL(ttydrv)
15 /**********************************************************************/
17 static LONG TTYDRV_DC_GetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count);
18 static LONG TTYDRV_DC_SetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count);
20 /***********************************************************************
21 * TTYDRV_DC_AllocBitmap
23 TTYDRV_PHYSBITMAP *TTYDRV_DC_AllocBitmap(BITMAPOBJ *bitmap)
25 TTYDRV_PHYSBITMAP *physBitmap;
27 if(!(physBitmap = HeapAlloc(GetProcessHeap(), 0, sizeof(TTYDRV_PHYSBITMAP)))) {
28 ERR("Can't alloc TTYDRV_PHYSBITMAP\n");
32 bitmap->physBitmap = physBitmap;
33 bitmap->funcs = DRIVER_FindDriver("DISPLAY");
38 /***********************************************************************
39 * TTYDRV_DC_BitmapBits
41 LONG TTYDRV_DC_BitmapBits(HBITMAP hbitmap, void *bits, LONG count, WORD flags)
46 if(!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC)))
50 result = TTYDRV_DC_GetBitmapBits(bitmap, bits, count);
51 else if(flags == DDB_SET)
52 result = TTYDRV_DC_SetBitmapBits(bitmap, bits, count);
54 ERR("Unknown flags value %d\n", flags);
58 GDI_HEAP_UNLOCK(hbitmap);
62 /***********************************************************************
63 * TTYDRV_DC_CreateBitmap
65 BOOL TTYDRV_DC_CreateBitmap(HBITMAP hbitmap)
67 TTYDRV_PHYSBITMAP *physBitmap;
70 TRACE("(0x%04x)\n", hbitmap);
72 if(!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC)))
75 if(!(physBitmap = TTYDRV_DC_AllocBitmap(bitmap))) {
76 GDI_HEAP_UNLOCK(hbitmap);
81 if(bitmap->bitmap.bmBits) {
82 TTYDRV_DC_BitmapBits(hbitmap, bitmap->bitmap.bmBits,
83 bitmap->bitmap.bmHeight * bitmap->bitmap.bmWidthBytes,
87 GDI_HEAP_UNLOCK(hbitmap);
92 /***********************************************************************
93 * TTYDRV_DC_BITMAP_DeleteObject
95 BOOL TTYDRV_DC_BITMAP_DeleteObject(HBITMAP hbitmap, BITMAPOBJ *bitmap)
97 TRACE("(0x%04x, %p)\n", hbitmap, bitmap);
99 HeapFree(GetProcessHeap(), 0, bitmap->physBitmap);
100 bitmap->physBitmap = NULL;
101 bitmap->funcs = NULL;
106 /***********************************************************************
107 * TTYDRV_DC_GetBitmapBits
109 static LONG TTYDRV_DC_GetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count)
111 FIXME("(%p, %p, %ld): stub\n", bitmap, bits, count);
113 memset(bits, 0, count);
118 /***********************************************************************
119 * TTYDRV_DC_BITMAP_SelectObject
121 HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap)
123 HBITMAP hPreviousBitmap;
125 TRACE("(%p, 0x%04x, %p)\n", dc, hbitmap, bitmap);
127 if(!(dc->w.flags & DC_MEMORY))
130 /* Assure that the bitmap device dependent */
131 if(!bitmap->physBitmap && !TTYDRV_DC_CreateBitmap(hbitmap))
134 if(bitmap->funcs != dc->funcs) {
135 ERR("Trying to select a non-TTY DDB into a TTY DC\n");
139 dc->w.totalExtent.left = 0;
140 dc->w.totalExtent.top = 0;
141 dc->w.totalExtent.right = bitmap->bitmap.bmWidth;
142 dc->w.totalExtent.bottom = bitmap->bitmap.bmHeight;
144 /* FIXME: Should be done in the common code instead */
146 SetRectRgn(dc->w.hVisRgn, 0, 0,
147 bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight);
151 if(!(hrgn = CreateRectRgn(0, 0, bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight)))
154 dc->w.hVisRgn = hrgn;
157 hPreviousBitmap = dc->w.hBitmap;
158 dc->w.hBitmap = hbitmap;
160 return hPreviousBitmap;
163 /***********************************************************************
164 * TTYDRV_DC_SetBitmapBits
166 static LONG TTYDRV_DC_SetBitmapBits(BITMAPOBJ *bitmap, void *bits, LONG count)
168 FIXME("(%p, %p, %ld): semistub\n", bitmap, bits, count);