Updated.
[wine] / dlls / ttydrv / wnd.c
1 /*
2  * TTY window driver
3  *
4  * Copyright 1998,1999 Patrik Stridvall
5  */
6
7 #include "config.h"
8
9 #include "gdi.h"
10 #include "ttydrv.h"
11 #include "win.h"
12 #include "debugtools.h"
13
14 DEFAULT_DEBUG_CHANNEL(ttydrv);
15
16 WND_DRIVER TTYDRV_WND_Driver =
17 {
18   TTYDRV_WND_Initialize,
19   TTYDRV_WND_Finalize,
20   TTYDRV_WND_CreateDesktopWindow,
21   TTYDRV_WND_CreateWindow,
22   TTYDRV_WND_DestroyWindow,
23   TTYDRV_WND_SetParent,
24   TTYDRV_WND_ForceWindowRaise,
25   TTYDRV_WND_SetWindowPos,
26   TTYDRV_WND_SetText,
27   TTYDRV_WND_SetFocus,
28   TTYDRV_WND_PreSizeMove,
29   TTYDRV_WND_PostSizeMove,
30   TTYDRV_WND_ScrollWindow,
31   TTYDRV_WND_SetDrawable,
32   TTYDRV_WND_SetHostAttr,
33   TTYDRV_WND_IsSelfClipping,
34   TTYDRV_WND_SetWindowRgn
35 };
36
37
38 /***********************************************************************
39  *              TTYDRV_WND_GetCursesWindow
40  *
41  * Return the Curses window associated to a window.
42  */
43 WINDOW *TTYDRV_WND_GetCursesWindow(WND *wndPtr)
44 {
45     return wndPtr && wndPtr->pDriverData ? 
46       ((TTYDRV_WND_DATA *) wndPtr->pDriverData)->window : 0;
47 }
48
49 /**********************************************************************
50  *              TTYDRV_WND_Initialize
51  */
52 void TTYDRV_WND_Initialize(WND *wndPtr)
53 {
54   TTYDRV_WND_DATA *pWndDriverData = HeapAlloc(GetProcessHeap(), 0, sizeof(TTYDRV_WND_DATA));
55
56   TRACE("(%p)\n", wndPtr);
57
58   wndPtr->pDriverData = (void *) pWndDriverData;
59
60   pWndDriverData->window = NULL;
61 }
62
63 /**********************************************************************
64  *              TTYDRV_WND_Finalize
65  */
66 void TTYDRV_WND_Finalize(WND *wndPtr)
67 {
68   TTYDRV_WND_DATA *pWndDriverData =
69     (TTYDRV_WND_DATA *) wndPtr->pDriverData;
70
71   TRACE("(%p)\n", wndPtr);
72
73   if(!pWndDriverData) {
74     ERR("WND already destroyed\n");
75     return;
76   }
77
78   if(pWndDriverData->window) {
79     ERR("WND destroyed without destroying the associated Curses Windows");
80   }
81
82   HeapFree(GetProcessHeap(), 0, pWndDriverData);
83   wndPtr->pDriverData = NULL;
84 }
85
86 /**********************************************************************
87  *              TTYDRV_WND_CreateDesktopWindow
88  */
89 BOOL TTYDRV_WND_CreateDesktopWindow(WND *wndPtr)
90 {
91   TTYDRV_WND_DATA *pWndDriverData =
92     (TTYDRV_WND_DATA *) wndPtr->pDriverData;
93
94   TRACE("(%p)\n", wndPtr);
95
96   if(!pWndDriverData) { ERR("WND never initialized\n"); return FALSE; }
97
98   pWndDriverData->window = TTYDRV_GetRootWindow();
99   return TRUE;
100 }
101
102 /**********************************************************************
103  *              TTYDRV_WND_CreateWindow
104  */
105 BOOL TTYDRV_WND_CreateWindow(WND *wndPtr, CREATESTRUCTA *cs, BOOL bUnicode)
106 {
107 #ifdef WINE_CURSES
108   WINDOW *window;
109   INT cellWidth=8, cellHeight=8; /* FIXME: Hardcoded */
110
111   TRACE("(%p, %p, %d)\n", wndPtr, cs, bUnicode);
112
113   /* Only create top-level windows */
114   if(cs->style & WS_CHILD)
115     return TRUE;
116
117   window = subwin(TTYDRV_GetRootWindow(), cs->cy/cellHeight, cs->cx/cellWidth,
118                   cs->y/cellHeight, cs->x/cellWidth);
119   werase(window);
120   wrefresh(window);
121                   
122   return TRUE;
123 #else /* defined(WINE_CURSES) */
124   FIXME("(%p, %p, %p, %d): stub\n", wndPtr, cs, bUnicode);
125
126   return TRUE;
127 #endif /* defined(WINE_CURSES) */
128 }
129
130 /***********************************************************************
131  *              TTYDRV_WND_DestroyWindow
132  */
133 BOOL TTYDRV_WND_DestroyWindow(WND *wndPtr)
134 {
135 #ifdef WINE_CURSES
136   WINDOW *window;
137
138   TRACE("(%p)\n", wndPtr);
139
140   window = TTYDRV_WND_GetCursesWindow(wndPtr);
141   if(window && window != TTYDRV_GetRootWindow()) {
142     delwin(window);
143   }
144
145   return TRUE;
146 #else /* defined(WINE_CURSES) */
147   FIXME("(%p): stub\n", wndPtr);
148
149   return TRUE;
150 #endif /* defined(WINE_CURSES) */
151 }
152
153 /*****************************************************************
154  *              TTYDRV_WND_SetParent
155  */
156 WND *TTYDRV_WND_SetParent(WND *wndPtr, WND *pWndParent)
157 {
158   FIXME("(%p, %p): stub\n", wndPtr, pWndParent);
159
160   return NULL;
161 }
162
163 /***********************************************************************
164  *              TTYDRV_WND_ForceWindowRaise
165  */
166 void TTYDRV_WND_ForceWindowRaise(WND *wndPtr)
167 {
168   FIXME("(%p): stub\n", wndPtr);
169 }
170
171 /***********************************************************************
172  *           TTYDRV_WINPOS_SetWindowPos
173  */
174 void TTYDRV_WND_SetWindowPos(WND *wndPtr, const WINDOWPOS *winpos, BOOL bSMC_SETXPOS)
175 {
176   FIXME("(%p, %p, %d): stub\n", wndPtr, winpos, bSMC_SETXPOS);
177 }
178
179 /*****************************************************************
180  *              TTYDRV_WND_SetText
181  */
182 void TTYDRV_WND_SetText(WND *wndPtr, LPCWSTR text)
183 {
184   FIXME("(%p, %s): stub\n", wndPtr, debugstr_w(text));
185 }
186
187 /*****************************************************************
188  *              TTYDRV_WND_SetFocus
189  */
190 void TTYDRV_WND_SetFocus(WND *wndPtr)
191 {
192   FIXME("(%p): stub\n", wndPtr);
193 }
194
195 /*****************************************************************
196  *              TTYDRV_WND_PreSizeMove
197  */
198 void TTYDRV_WND_PreSizeMove(WND *wndPtr)
199 {
200   FIXME("(%p): stub\n", wndPtr);
201 }
202
203 /*****************************************************************
204  *               TTYDRV_WND_PostSizeMove
205  */
206 void TTYDRV_WND_PostSizeMove(WND *wndPtr)
207 {
208   FIXME("(%p): stub\n", wndPtr);
209 }
210
211 /*****************************************************************
212  *               TTYDRV_WND_ScrollWindow
213  */
214 void TTYDRV_WND_ScrollWindow( WND *wndPtr, HDC hdc, INT dx, INT dy, 
215                               const RECT *clipRect, BOOL bUpdate)
216 {
217   FIXME("(%p, %x, %d, %d, %p, %d): stub\n", 
218         wndPtr, hdc, dx, dy, clipRect, bUpdate);
219 }
220
221 /***********************************************************************
222  *              TTYDRV_WND_SetDrawable
223  */
224 void TTYDRV_WND_SetDrawable(WND *wndPtr, HDC hdc, WORD flags, BOOL bSetClipOrigin)
225 {
226     DC *dc = DC_GetDCPtr( hdc );
227     if (!dc) return;
228     TRACE("(%p, %p, %d, %d)\n", wndPtr, dc, flags, bSetClipOrigin);
229
230     /* FIXME: Should be done in the common code instead */
231     if(!wndPtr)  {
232         dc->DCOrgX = 0;
233         dc->DCOrgY = 0;
234     } else {
235         if(flags & DCX_WINDOW) {
236             dc->DCOrgX = wndPtr->rectWindow.left;
237             dc->DCOrgY = wndPtr->rectWindow.top;
238         } else {
239             dc->DCOrgX = wndPtr->rectClient.left;
240             dc->DCOrgY = wndPtr->rectClient.top;
241         }
242     }
243     GDI_ReleaseObj( hdc );
244 }
245
246 /***********************************************************************
247  *              TTYDRV_WND_SetHostAttr
248  */
249 BOOL TTYDRV_WND_SetHostAttr(WND *wndPtr, INT attr, INT value)
250 {
251   FIXME("(%p): stub\n", wndPtr);
252
253   return TRUE;
254 }
255
256 /***********************************************************************
257  *              TTYDRV_WND_IsSelfClipping
258  */
259 BOOL TTYDRV_WND_IsSelfClipping(WND *wndPtr)
260 {
261   FIXME("(%p): semistub\n", wndPtr);
262
263   return FALSE;
264 }
265
266 /***********************************************************************
267  *              TTYDRV_WND_SetWindowRgn
268  */
269 void TTYDRV_WND_SetWindowRgn(struct tagWND *wndPtr, HRGN hrgnWnd)
270 {
271 }
272