blob: 057968a4ba2d552e435bd06d65f6cf5aaa31e42a [file] [log] [blame]
Patrik Stridvallf638aef1998-12-07 09:36:13 +00001/*
2 * TTY window driver
3 *
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +00004 * Copyright 1998,1999 Patrik Stridvall
Patrik Stridvallf638aef1998-12-07 09:36:13 +00005 */
6
Patrik Stridvall4d715fd1999-11-23 23:43:29 +00007#include "config.h"
8
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +00009#include "class.h"
10#include "dc.h"
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000011#include "heap.h"
Patrik Stridvallf638aef1998-12-07 09:36:13 +000012#include "ttydrv.h"
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +000013#include "win.h"
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000014#include "debugtools.h"
15
16DEFAULT_DEBUG_CHANNEL(ttydrv)
17
18/***********************************************************************
19 * TTYDRV_WND_GetCursesWindow
20 *
21 * Return the Curses window associated to a window.
22 */
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000023WINDOW *TTYDRV_WND_GetCursesWindow(WND *wndPtr)
24{
25 return wndPtr && wndPtr->pDriverData ?
26 ((TTYDRV_WND_DATA *) wndPtr->pDriverData)->window : 0;
27}
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000028
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +000029/**********************************************************************
30 * TTYDRV_WND_Initialize
31 */
32void TTYDRV_WND_Initialize(WND *wndPtr)
33{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000034 TTYDRV_WND_DATA *pWndDriverData =
35 (TTYDRV_WND_DATA *) HeapAlloc(SystemHeap, 0, sizeof(TTYDRV_WND_DATA));
36
37 TRACE("(%p)\n", wndPtr);
38
39 wndPtr->pDriverData = (void *) pWndDriverData;
40
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000041 pWndDriverData->window = NULL;
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +000042}
43
44/**********************************************************************
45 * TTYDRV_WND_Finalize
46 */
47void TTYDRV_WND_Finalize(WND *wndPtr)
48{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000049 TTYDRV_WND_DATA *pWndDriverData =
50 (TTYDRV_WND_DATA *) wndPtr->pDriverData;
51
52 TRACE("(%p)\n", wndPtr);
53
54 if(!pWndDriverData) {
55 ERR("WND already destroyed\n");
56 return;
57 }
58
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000059 if(pWndDriverData->window) {
60 ERR("WND destroyed without destroying the associated Curses Windows");
61 }
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000062
63 HeapFree(SystemHeap, 0, pWndDriverData);
64 wndPtr->pDriverData = NULL;
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +000065}
66
67/**********************************************************************
68 * TTYDRV_WND_CreateDesktopWindow
69 */
Alexandre Julliarda3960291999-02-26 11:11:13 +000070BOOL TTYDRV_WND_CreateDesktopWindow(WND *wndPtr, CLASS *classPtr, BOOL bUnicode)
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +000071{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000072 TTYDRV_WND_DATA *pWndDriverData =
73 (TTYDRV_WND_DATA *) wndPtr->pDriverData;
74
75 TRACE("(%p, %p, %d)\n", wndPtr, classPtr, bUnicode);
76
77 if(!pWndDriverData) { ERR("WND never initialized\n"); return FALSE; }
78
Alexandre Julliardf64c4042000-03-30 19:26:44 +000079 pWndDriverData->window = TTYDRV_GetRootWindow();
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000080 return TRUE;
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +000081}
82
83/**********************************************************************
84 * TTYDRV_WND_CreateWindow
85 */
Alexandre Julliarda3960291999-02-26 11:11:13 +000086BOOL TTYDRV_WND_CreateWindow(WND *wndPtr, CLASS *classPtr, CREATESTRUCTA *cs, BOOL bUnicode)
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +000087{
Alexandre Julliardf64c4042000-03-30 19:26:44 +000088#ifdef WINE_CURSES
89 WINDOW *window;
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000090 INT cellWidth=8, cellHeight=8; /* FIXME: Hardcoded */
91
92 TRACE("(%p, %p, %p, %d)\n", wndPtr, classPtr, cs, bUnicode);
93
94 /* Only create top-level windows */
95 if(cs->style & WS_CHILD)
96 return TRUE;
97
Alexandre Julliardf64c4042000-03-30 19:26:44 +000098 window = subwin(TTYDRV_GetRootWindow(), cs->cy/cellHeight, cs->cx/cellWidth,
Patrik Stridvall4d715fd1999-11-23 23:43:29 +000099 cs->y/cellHeight, cs->x/cellWidth);
100 werase(window);
101 wrefresh(window);
102
103 return TRUE;
Alexandre Julliardf64c4042000-03-30 19:26:44 +0000104#else /* defined(WINE_CURSES) */
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000105 FIXME("(%p, %p, %p, %d): stub\n", wndPtr, classPtr, cs, bUnicode);
106
107 return TRUE;
Alexandre Julliardf64c4042000-03-30 19:26:44 +0000108#endif /* defined(WINE_CURSES) */
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000109}
110
111/***********************************************************************
112 * TTYDRV_WND_DestroyWindow
113 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000114BOOL TTYDRV_WND_DestroyWindow(WND *wndPtr)
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000115{
Alexandre Julliardf64c4042000-03-30 19:26:44 +0000116#ifdef WINE_CURSES
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000117 WINDOW *window;
118
119 TRACE("(%p)\n", wndPtr);
120
121 window = TTYDRV_WND_GetCursesWindow(wndPtr);
Alexandre Julliardf64c4042000-03-30 19:26:44 +0000122 if(window && window != TTYDRV_GetRootWindow()) {
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000123 delwin(window);
124 }
125
126 return TRUE;
Alexandre Julliardf64c4042000-03-30 19:26:44 +0000127#else /* defined(WINE_CURSES) */
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000128 FIXME("(%p): stub\n", wndPtr);
129
130 return TRUE;
Alexandre Julliardf64c4042000-03-30 19:26:44 +0000131#endif /* defined(WINE_CURSES) */
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000132}
133
134/*****************************************************************
Patrik Stridvallb87fe2e1999-04-01 08:16:08 +0000135 * TTYDRV_WND_SetParent
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000136 */
137WND *TTYDRV_WND_SetParent(WND *wndPtr, WND *pWndParent)
138{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000139 FIXME("(%p, %p): stub\n", wndPtr, pWndParent);
140
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000141 return NULL;
142}
143
144/***********************************************************************
145 * TTYDRV_WND_ForceWindowRaise
146 */
147void TTYDRV_WND_ForceWindowRaise(WND *wndPtr)
148{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000149 FIXME("(%p): stub\n", wndPtr);
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000150}
151
152/***********************************************************************
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000153 * TTYDRV_WINPOS_SetWindowPos
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000154 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000155void TTYDRV_WND_SetWindowPos(WND *wndPtr, const WINDOWPOS *winpos, BOOL bSMC_SETXPOS)
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000156{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000157 FIXME("(%p, %p, %d): stub\n", wndPtr, winpos, bSMC_SETXPOS);
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000158}
159
160/*****************************************************************
161 * TTYDRV_WND_SetText
162 */
163void TTYDRV_WND_SetText(WND *wndPtr, LPCSTR text)
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000164{
165 FIXME("(%p, %s): stub\n", wndPtr, debugstr_a(text));
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000166}
167
168/*****************************************************************
169 * TTYDRV_WND_SetFocus
170 */
171void TTYDRV_WND_SetFocus(WND *wndPtr)
172{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000173 FIXME("(%p): stub\n", wndPtr);
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000174}
175
176/*****************************************************************
177 * TTYDRV_WND_PreSizeMove
178 */
179void TTYDRV_WND_PreSizeMove(WND *wndPtr)
180{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000181 FIXME("(%p): stub\n", wndPtr);
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000182}
183
184/*****************************************************************
185 * TTYDRV_WND_PostSizeMove
186 */
187void TTYDRV_WND_PostSizeMove(WND *wndPtr)
188{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000189 FIXME("(%p): stub\n", wndPtr);
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000190}
191
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000192/*****************************************************************
193 * TTYDRV_WND_ScrollWindow
194 */
195void TTYDRV_WND_ScrollWindow(
Alexandre Julliarda3960291999-02-26 11:11:13 +0000196 WND *wndPtr, DC *dcPtr, INT dx, INT dy,
197 const RECT *clipRect, BOOL bUpdate)
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000198{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000199 FIXME("(%p, %p, %d, %d, %p, %d): stub\n",
200 wndPtr, dcPtr, dx, dy, clipRect, bUpdate);
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000201}
202
203/***********************************************************************
204 * TTYDRV_WND_SetDrawable
205 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000206void TTYDRV_WND_SetDrawable(WND *wndPtr, DC *dc, WORD flags, BOOL bSetClipOrigin)
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000207{
Patrik Stridvallcf844341999-12-11 23:08:48 +0000208 TRACE("(%p, %p, %d, %d)\n", wndPtr, dc, flags, bSetClipOrigin);
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000209
Patrik Stridvallcf844341999-12-11 23:08:48 +0000210 /* FIXME: Should be done in the common code instead */
211 if(!wndPtr) {
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000212 dc->w.DCOrgX = 0;
213 dc->w.DCOrgY = 0;
214 } else {
Patrik Stridvallcf844341999-12-11 23:08:48 +0000215 if(flags & DCX_WINDOW) {
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000216 dc->w.DCOrgX = wndPtr->rectWindow.left;
217 dc->w.DCOrgY = wndPtr->rectWindow.top;
218 } else {
219 dc->w.DCOrgX = wndPtr->rectClient.left;
220 dc->w.DCOrgY = wndPtr->rectClient.top;
221 }
222 }
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000223}
224
225/***********************************************************************
Alex Korobka4f1ac051999-03-28 09:37:57 +0000226 * TTYDRV_WND_SetHostAttr
227 */
228BOOL TTYDRV_WND_SetHostAttr(WND *wndPtr, INT attr, INT value)
229{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000230 FIXME("(%p): stub\n", wndPtr);
231
232 return TRUE;
Alex Korobka4f1ac051999-03-28 09:37:57 +0000233}
234
235/***********************************************************************
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000236 * TTYDRV_WND_IsSelfClipping
237 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000238BOOL TTYDRV_WND_IsSelfClipping(WND *wndPtr)
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000239{
Patrik Stridvall4d715fd1999-11-23 23:43:29 +0000240 FIXME("(%p): semistub\n", wndPtr);
241
Patrik Stridvallc6e6a9a1999-02-04 13:14:42 +0000242 return FALSE;
243}