No longer directly accessing debuggee memory.
[wine] / graphics / ttydrv / graphics.c
1 /*
2  * TTY DC graphics
3  *
4  * Copyright 1999 Patrik Stridvall
5  */
6
7 #include "config.h"
8
9 #include "dc.h"
10 #include "debugtools.h"
11 #include "ttydrv.h"
12
13 DEFAULT_DEBUG_CHANNEL(ttydrv)
14
15 /***********************************************************************
16  *              TTYDRV_DC_Arc
17  */
18 BOOL TTYDRV_DC_Arc(DC *dc, INT left, INT top, INT right, INT bottom,
19                    INT xstart, INT ystart, INT xend, INT yend)
20 {
21   FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
22         dc, left, top, right, bottom, xstart, ystart, xend, yend);
23
24   return TRUE;
25 }
26
27 /***********************************************************************
28  *              TTYDRV_DC_Chord
29  */
30 BOOL TTYDRV_DC_Chord(DC *dc, INT left, INT top, INT right, INT bottom,
31                      INT xstart, INT ystart, INT xend, INT yend)
32 {
33   FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
34         dc, left, top, right, bottom, xstart, ystart, xend, yend);
35
36   return TRUE;
37 }
38
39 /***********************************************************************
40  *              TTYDRV_DC_Ellipse
41  */
42 BOOL TTYDRV_DC_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom)
43 {
44   FIXME("(%p, %d, %d, %d, %d): stub\n",
45         dc, left, top, right, bottom);
46
47   return TRUE;
48 }
49
50 /***********************************************************************
51  *              TTYDRV_DC_ExtFloodFill
52  */
53 BOOL TTYDRV_DC_ExtFloodFill(DC *dc, INT x, INT y,
54                             COLORREF color, UINT fillType)
55 {
56   FIXME("(%p, %d, %d, 0x%08lx, %u): stub\n", dc, x, y, color, fillType);
57
58   return TRUE;
59 }
60
61 /***********************************************************************
62  *              TTYDRV_DC_GetPixel
63  */
64 COLORREF TTYDRV_DC_GetPixel(DC *dc, INT x, INT y)
65 {
66   FIXME("(%p, %d, %d): stub\n", dc, x, y);
67
68   return RGB(0,0,0); /* FIXME: Always returns black */
69 }
70
71 /***********************************************************************
72  *              TTYDRV_DC_LineTo
73  */
74 BOOL TTYDRV_DC_LineTo(DC *dc, INT x, INT y)
75 {
76 #ifdef HAVE_LIBCURSES
77   TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
78   INT row1, col1, row2, col2;
79
80   TRACE("(%p, %d, %d)\n", dc, x, y);
81
82   if(!physDev->window)
83     return FALSE;
84
85   row1 = (dc->w.DCOrgY + XLPTODP(dc, dc->w.CursPosY)) / physDev->cellHeight;
86   col1 = (dc->w.DCOrgX + XLPTODP(dc, dc->w.CursPosX)) / physDev->cellWidth;
87   row2 = (dc->w.DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
88   col2 = (dc->w.DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
89
90   if(row1 > row2) {
91     INT tmp = row1;
92     row1 = row2;
93     row2 = tmp; 
94   } 
95
96   if(col1 > col2) {
97     INT tmp = col1;
98     col1 = col2;
99     col2 = tmp; 
100   } 
101
102   wmove(physDev->window, row1, col1);
103   if(col1 == col2) {
104     wvline(physDev->window, ACS_VLINE, row2-row1);
105   } else if(row1 == row2) {
106     whline(physDev->window, ACS_HLINE, col2-col1);
107   } else {
108     FIXME("Diagonal line drawing not yet supported\n");
109   }
110   wrefresh(physDev->window);
111
112   return TRUE;
113 #else /* defined(HAVE_LIBCURSES) */
114   FIXME("(%p, %d, %d): stub\n", dc, x, y);
115
116   return TRUE;
117 #endif /* defined(HAVE_LIBCURSES) */
118 }
119
120 /***********************************************************************
121  *              TTYDRV_DC_PaintRgn
122  */
123 BOOL TTYDRV_DC_PaintRgn(DC *dc, HRGN hrgn)
124 {
125   FIXME("(%p, 0x%04x): stub\n", dc, hrgn);
126
127   return TRUE;
128 }
129
130 /***********************************************************************
131  *              TTYDRV_DC_Pie
132  */
133 BOOL TTYDRV_DC_Pie(DC *dc, INT left, INT top, INT right, INT bottom,
134                    INT xstart, INT ystart, INT xend, INT yend)
135 {
136   FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
137         dc, left, top, right, bottom, xstart, ystart, xend, yend);
138
139   return TRUE;
140 }
141
142 /***********************************************************************
143  *              TTYDRV_DC_Polygon
144  */
145 BOOL TTYDRV_DC_Polygon(DC *dc, const POINT* pt, INT count)
146 {
147   FIXME("(%p, %p, %d): stub\n", dc, pt, count);
148
149   return TRUE;
150 }
151
152 /***********************************************************************
153  *              TTYDRV_DC_Polyline
154  */
155 BOOL TTYDRV_DC_Polyline(DC *dc, const POINT* pt, INT count)
156 {
157   FIXME("(%p, %p, %d): stub\n", dc, pt, count);
158
159   return TRUE;
160 }
161
162 /***********************************************************************
163  *              TTYDRV_DC_PolyPolygon
164  */
165 BOOL TTYDRV_DC_PolyPolygon(DC *dc, const POINT* pt, const INT* counts, UINT polygons)
166 {
167   FIXME("(%p, %p, %p, %u): stub\n", dc, pt, counts, polygons);
168
169   return TRUE;
170 }
171
172 /***********************************************************************
173  *              TTYDRV_DC_PolyPolyline
174  */
175 BOOL TTYDRV_DC_PolyPolyline(DC *dc, const POINT* pt, const DWORD* counts, DWORD polylines)
176 {
177   FIXME("(%p, %p, %p, %lu): stub\n", dc, pt, counts, polylines);
178   
179   return TRUE;
180 }
181
182 /***********************************************************************
183  *              TTYDRV_DC_Rectangle
184  */
185 BOOL TTYDRV_DC_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
186 {
187 #ifdef HAVE_LIBCURSES
188   TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
189   INT row1, col1, row2, col2;
190
191   TRACE("(%p, %d, %d, %d, %d)\n", dc, left, top, right, bottom);
192
193   if(!physDev->window)
194     return FALSE;
195
196   row1 = (dc->w.DCOrgY + XLPTODP(dc, top)) / physDev->cellHeight;
197   col1 = (dc->w.DCOrgX + XLPTODP(dc, left)) / physDev->cellWidth;
198   row2 = (dc->w.DCOrgY + XLPTODP(dc, bottom)) / physDev->cellHeight;
199   col2 = (dc->w.DCOrgX + XLPTODP(dc, right)) / physDev->cellWidth;
200
201   if(row1 > row2) {
202     INT tmp = row1;
203     row1 = row2;
204     row2 = tmp; 
205   } 
206   if(col1 > col2) {
207     INT tmp = col1;
208     col1 = col2;
209     col2 = tmp; 
210   } 
211
212   wmove(physDev->window, row1, col1);
213   whline(physDev->window, ACS_HLINE, col2-col1);
214
215   wmove(physDev->window, row1, col2);
216   wvline(physDev->window, ACS_VLINE, row2-row1);
217
218   wmove(physDev->window, row2, col1);
219   whline(physDev->window, ACS_HLINE, col2-col1);
220
221   wmove(physDev->window, row1, col1);
222   wvline(physDev->window, ACS_VLINE, row2-row1);
223
224   mvwaddch(physDev->window, row1, col1, ACS_ULCORNER);
225   mvwaddch(physDev->window, row1, col2, ACS_URCORNER);
226   mvwaddch(physDev->window, row2, col2, ACS_LRCORNER);
227   mvwaddch(physDev->window, row2, col1, ACS_LLCORNER);
228
229   wrefresh(physDev->window);
230
231   return TRUE;
232 #else /* defined(HAVE_LIBCURSES) */
233   FIXME("(%p, %d, %d, %d, %d): stub\n", dc, left, top, right, bottom);
234
235   return TRUE;
236 #endif /* defined(HAVE_LIBCURSES) */
237 }
238
239 /***********************************************************************
240  *              TTYDRV_DC_RoundRect
241  */
242 BOOL TTYDRV_DC_RoundRect(DC *dc, INT left, INT top, INT right,
243                          INT bottom, INT ell_width, INT ell_height)
244 {
245   FIXME("(%p, %d, %d, %d, %d, %d, %d): stub\n", 
246         dc, left, top, right, bottom, ell_width, ell_height);
247   
248   return TRUE;
249 }
250
251 /***********************************************************************
252  *              TTYDRV_DC_SetBkColor
253  */
254 COLORREF TTYDRV_DC_SetBkColor(DC *dc, COLORREF color)
255 {
256   COLORREF oldColor;
257
258   TRACE("(%p, 0x%08lx)\n", dc, color);  
259
260   oldColor = dc->w.backgroundColor;
261   dc->w.backgroundColor = color;
262
263   return oldColor;
264 }
265
266 /***********************************************************************
267  *              TTYDRV_DC_SetPixel
268  */
269 COLORREF TTYDRV_DC_SetPixel(DC *dc, INT x, INT y, COLORREF color)
270 {
271 #ifdef HAVE_LIBCURSES
272   TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
273   INT row, col;
274
275   TRACE("(%p, %d, %d, 0x%08lx)\n", dc, x, y, color);
276
277   if(!physDev->window)
278     return FALSE;
279
280   row = (dc->w.DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
281   col = (dc->w.DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
282
283   mvwaddch(physDev->window, row, col, ACS_BULLET);
284   wrefresh(physDev->window);
285
286   return RGB(0,0,0); /* FIXME: Always returns black */
287 #else /* defined(HAVE_LIBCURSES) */
288   FIXME("(%p, %d, %d, 0x%08lx): stub\n", dc, x, y, color);
289
290   return RGB(0,0,0); /* FIXME: Always returns black */
291 #endif /* defined(HAVE_LIBCURSES) */
292 }
293
294 /***********************************************************************
295  *              TTYDRV_DC_SetTextColor
296  */
297 COLORREF TTYDRV_DC_SetTextColor(DC *dc, COLORREF color)
298 {
299   COLORREF oldColor;
300
301   TRACE("(%p, 0x%08lx)\n", dc, color);
302   
303   oldColor = dc->w.textColor;
304   dc->w.textColor = color;
305   
306   return oldColor;
307 }
308