Improved the TTY driver.
[wine.git] / graphics / ttydrv / dc.c
blob63948dce68b09aa1a317a5bfcf2ad29c4c7dd6f0
1 /*
2 * TTY DC driver
4 * Copyright 1999 Patrik Stridvall
5 */
7 #include "config.h"
9 #include "gdi.h"
10 #include "bitmap.h"
11 #include "dc.h"
12 #include "monitor.h"
13 #include "ttydrv.h"
14 #include "winbase.h"
15 #include "debugtools.h"
17 DEFAULT_DEBUG_CHANNEL(ttydrv)
19 /**********************************************************************/
21 extern DeviceCaps TTYDRV_DC_DevCaps;
23 /***********************************************************************
24 * TTYDRV_DC_CreateDC
26 BOOL TTYDRV_DC_CreateDC(DC *dc, LPCSTR driver, LPCSTR device,
27 LPCSTR output, const DEVMODEA *initData)
29 TTYDRV_PDEVICE *physDev;
30 BITMAPOBJ *bmp;
32 TRACE("(%p, %s, %s, %s, %p)\n",
33 dc, debugstr_a(driver), debugstr_a(device),
34 debugstr_a(output), initData);
36 dc->physDev = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
37 sizeof(TTYDRV_PDEVICE));
38 if(!dc->physDev) {
39 ERR("Can't allocate physDev\n");
40 return FALSE;
42 physDev = (TTYDRV_PDEVICE *) dc->physDev;
44 dc->w.devCaps = &TTYDRV_DC_DevCaps;
46 if(dc->w.flags & DC_MEMORY){
47 #ifdef HAVE_LIBCURSES
48 physDev->window = NULL;
49 #endif /* defined(HAVE_LIBCURSES) */
50 physDev->cellWidth = 1;
51 physDev->cellHeight = 1;
53 TTYDRV_DC_CreateBitmap(dc->w.hBitmap);
54 bmp = (BITMAPOBJ *) GDI_GetObjPtr(dc->w.hBitmap, BITMAP_MAGIC);
56 dc->w.bitsPerPixel = bmp->bitmap.bmBitsPixel;
58 dc->w.totalExtent.left = 0;
59 dc->w.totalExtent.top = 0;
60 dc->w.totalExtent.right = bmp->bitmap.bmWidth;
61 dc->w.totalExtent.bottom = bmp->bitmap.bmHeight;
62 dc->w.hVisRgn = CreateRectRgnIndirect( &dc->w.totalExtent );
64 GDI_HEAP_UNLOCK( dc->w.hBitmap );
65 } else {
66 #ifdef HAVE_LIBCURSES
67 physDev->window = TTYDRV_MONITOR_GetCursesRootWindow(&MONITOR_PrimaryMonitor);
68 #endif /* defined(HAVE_LIBCURSES) */
69 physDev->cellWidth = TTYDRV_MONITOR_GetCellWidth(&MONITOR_PrimaryMonitor);
70 physDev->cellHeight = TTYDRV_MONITOR_GetCellHeight(&MONITOR_PrimaryMonitor);
72 dc->w.bitsPerPixel = MONITOR_GetDepth(&MONITOR_PrimaryMonitor);
74 dc->w.totalExtent.left = 0;
75 dc->w.totalExtent.top = 0;
76 dc->w.totalExtent.right = MONITOR_GetWidth(&MONITOR_PrimaryMonitor);
77 dc->w.totalExtent.bottom = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
78 dc->w.hVisRgn = CreateRectRgnIndirect( &dc->w.totalExtent );
81 return TRUE;
84 /***********************************************************************
85 * TTYDRV_DC_DeleteDC
87 BOOL TTYDRV_DC_DeleteDC(DC *dc)
89 TRACE("(%p)\n", dc);
91 HeapFree( GetProcessHeap(), 0, dc->physDev );
92 dc->physDev = NULL;
94 return TRUE;
97 /***********************************************************************
98 * TTYDRV_DC_Escape
100 INT TTYDRV_DC_Escape(DC *dc, INT nEscape, INT cbInput,
101 SEGPTR lpInData, SEGPTR lpOutData)
103 return 0;