4 * Copyright 1999 Patrik Stridvall
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #include "wine/debug.h"
28 WINE_DEFAULT_DEBUG_CHANNEL(ttydrv);
30 /***********************************************************************
33 BOOL TTYDRV_DC_Arc(DC *dc, INT left, INT top, INT right, INT bottom,
34 INT xstart, INT ystart, INT xend, INT yend)
36 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
37 dc, left, top, right, bottom, xstart, ystart, xend, yend);
42 /***********************************************************************
45 BOOL TTYDRV_DC_Chord(DC *dc, INT left, INT top, INT right, INT bottom,
46 INT xstart, INT ystart, INT xend, INT yend)
48 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
49 dc, left, top, right, bottom, xstart, ystart, xend, yend);
54 /***********************************************************************
57 BOOL TTYDRV_DC_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom)
59 FIXME("(%p, %d, %d, %d, %d): stub\n",
60 dc, left, top, right, bottom);
65 /***********************************************************************
66 * TTYDRV_DC_ExtFloodFill
68 BOOL TTYDRV_DC_ExtFloodFill(DC *dc, INT x, INT y,
69 COLORREF color, UINT fillType)
71 FIXME("(%p, %d, %d, 0x%08lx, %u): stub\n", dc, x, y, color, fillType);
76 /***********************************************************************
79 COLORREF TTYDRV_DC_GetPixel(DC *dc, INT x, INT y)
81 FIXME("(%p, %d, %d): stub\n", dc, x, y);
83 return RGB(0,0,0); /* FIXME: Always returns black */
86 /***********************************************************************
89 BOOL TTYDRV_DC_LineTo(DC *dc, INT x, INT y)
92 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
93 INT row1, col1, row2, col2;
95 TRACE("(%p, %d, %d)\n", dc, x, y);
100 row1 = (dc->DCOrgY + XLPTODP(dc, dc->CursPosY)) / physDev->cellHeight;
101 col1 = (dc->DCOrgX + XLPTODP(dc, dc->CursPosX)) / physDev->cellWidth;
102 row2 = (dc->DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
103 col2 = (dc->DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
117 wmove(physDev->window, row1, col1);
119 wvline(physDev->window, ACS_VLINE, row2-row1);
120 } else if(row1 == row2) {
121 whline(physDev->window, ACS_HLINE, col2-col1);
123 FIXME("Diagonal line drawing not yet supported\n");
125 wrefresh(physDev->window);
128 #else /* defined(WINE_CURSES) */
129 FIXME("(%p, %d, %d): stub\n", dc, x, y);
132 #endif /* defined(WINE_CURSES) */
135 /***********************************************************************
138 BOOL TTYDRV_DC_PaintRgn(DC *dc, HRGN hrgn)
140 FIXME("(%p, 0x%04x): stub\n", dc, hrgn);
145 /***********************************************************************
148 BOOL TTYDRV_DC_Pie(DC *dc, INT left, INT top, INT right, INT bottom,
149 INT xstart, INT ystart, INT xend, INT yend)
151 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
152 dc, left, top, right, bottom, xstart, ystart, xend, yend);
157 /***********************************************************************
160 BOOL TTYDRV_DC_Polygon(DC *dc, const POINT* pt, INT count)
162 FIXME("(%p, %p, %d): stub\n", dc, pt, count);
167 /***********************************************************************
170 BOOL TTYDRV_DC_Polyline(DC *dc, const POINT* pt, INT count)
172 FIXME("(%p, %p, %d): stub\n", dc, pt, count);
177 /***********************************************************************
178 * TTYDRV_DC_PolyPolygon
180 BOOL TTYDRV_DC_PolyPolygon(DC *dc, const POINT* pt, const INT* counts, UINT polygons)
182 FIXME("(%p, %p, %p, %u): stub\n", dc, pt, counts, polygons);
187 /***********************************************************************
188 * TTYDRV_DC_PolyPolyline
190 BOOL TTYDRV_DC_PolyPolyline(DC *dc, const POINT* pt, const DWORD* counts, DWORD polylines)
192 FIXME("(%p, %p, %p, %lu): stub\n", dc, pt, counts, polylines);
197 /***********************************************************************
198 * TTYDRV_DC_Rectangle
200 BOOL TTYDRV_DC_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
203 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
204 INT row1, col1, row2, col2;
206 TRACE("(%p, %d, %d, %d, %d)\n", dc, left, top, right, bottom);
211 row1 = (dc->DCOrgY + XLPTODP(dc, top)) / physDev->cellHeight;
212 col1 = (dc->DCOrgX + XLPTODP(dc, left)) / physDev->cellWidth;
213 row2 = (dc->DCOrgY + XLPTODP(dc, bottom)) / physDev->cellHeight;
214 col2 = (dc->DCOrgX + XLPTODP(dc, right)) / physDev->cellWidth;
227 wmove(physDev->window, row1, col1);
228 whline(physDev->window, ACS_HLINE, col2-col1);
230 wmove(physDev->window, row1, col2);
231 wvline(physDev->window, ACS_VLINE, row2-row1);
233 wmove(physDev->window, row2, col1);
234 whline(physDev->window, ACS_HLINE, col2-col1);
236 wmove(physDev->window, row1, col1);
237 wvline(physDev->window, ACS_VLINE, row2-row1);
239 mvwaddch(physDev->window, row1, col1, ACS_ULCORNER);
240 mvwaddch(physDev->window, row1, col2, ACS_URCORNER);
241 mvwaddch(physDev->window, row2, col2, ACS_LRCORNER);
242 mvwaddch(physDev->window, row2, col1, ACS_LLCORNER);
244 wrefresh(physDev->window);
247 #else /* defined(WINE_CURSES) */
248 FIXME("(%p, %d, %d, %d, %d): stub\n", dc, left, top, right, bottom);
251 #endif /* defined(WINE_CURSES) */
254 /***********************************************************************
255 * TTYDRV_DC_RoundRect
257 BOOL TTYDRV_DC_RoundRect(DC *dc, INT left, INT top, INT right,
258 INT bottom, INT ell_width, INT ell_height)
260 FIXME("(%p, %d, %d, %d, %d, %d, %d): stub\n",
261 dc, left, top, right, bottom, ell_width, ell_height);
266 /***********************************************************************
267 * TTYDRV_DC_SetBkColor
269 COLORREF TTYDRV_DC_SetBkColor(DC *dc, COLORREF color)
273 TRACE("(%p, 0x%08lx)\n", dc, color);
275 oldColor = dc->backgroundColor;
276 dc->backgroundColor = color;
281 /***********************************************************************
284 COLORREF TTYDRV_DC_SetPixel(DC *dc, INT x, INT y, COLORREF color)
287 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
290 TRACE("(%p, %d, %d, 0x%08lx)\n", dc, x, y, color);
295 row = (dc->DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
296 col = (dc->DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
298 mvwaddch(physDev->window, row, col, ACS_BULLET);
299 wrefresh(physDev->window);
301 return RGB(0,0,0); /* FIXME: Always returns black */
302 #else /* defined(WINE_CURSES) */
303 FIXME("(%p, %d, %d, 0x%08lx): stub\n", dc, x, y, color);
305 return RGB(0,0,0); /* FIXME: Always returns black */
306 #endif /* defined(WINE_CURSES) */
309 /***********************************************************************
310 * TTYDRV_DC_SetTextColor
312 COLORREF TTYDRV_DC_SetTextColor(DC *dc, COLORREF color)
316 TRACE("(%p, 0x%08lx)\n", dc, color);
318 oldColor = dc->textColor;
319 dc->textColor = color;
325 /***********************************************************************
328 BOOL TTYDRV_DC_BitBlt(DC *dcDst, INT xDst, INT yDst,
329 INT width, INT height, DC *dcSrc,
330 INT xSrc, INT ySrc, DWORD rop)
332 FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %lu): stub\n",
333 dcDst, xDst, yDst, width, height,
334 dcSrc, xSrc, ySrc, rop
340 /***********************************************************************
343 BOOL TTYDRV_DC_PatBlt(DC *dc, INT left, INT top,
344 INT width, INT height, DWORD rop)
346 FIXME("(%p, %d, %d, %d, %d, %lu): stub\n",
347 dc, left, top, width, height, rop
354 /***********************************************************************
355 * TTYDRV_DC_StretchBlt
357 BOOL TTYDRV_DC_StretchBlt(DC *dcDst, INT xDst, INT yDst,
358 INT widthDst, INT heightDst,
359 DC *dcSrc, INT xSrc, INT ySrc,
360 INT widthSrc, INT heightSrc, DWORD rop)
362 FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %d, %d, %lu): stub\n",
363 dcDst, xDst, yDst, widthDst, heightDst,
364 dcSrc, xSrc, ySrc, widthSrc, heightSrc, rop
370 /***********************************************************************
371 * TTYDRV_DC_ExtTextOut
373 BOOL TTYDRV_DC_ExtTextOut(DC *dc, INT x, INT y, UINT flags,
374 const RECT *lpRect, LPCWSTR str, UINT count,
378 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
383 TRACE("(%p, %d, %d, 0x%08x, %p, %s, %d, %p)\n",
384 dc, x, y, flags, lpRect, debugstr_wn(str, count), count, lpDx);
389 /* FIXME: Is this really correct? */
390 if(dc->textAlign & TA_UPDATECP) {
398 row = (dc->DCOrgY + y) / physDev->cellHeight;
399 col = (dc->DCOrgX + x) / physDev->cellWidth;
400 len = WideCharToMultiByte( CP_ACP, 0, str, count, NULL, 0, NULL, NULL );
401 ascii = HeapAlloc( GetProcessHeap(), 0, len );
402 WideCharToMultiByte( CP_ACP, 0, str, count, ascii, len, NULL, NULL );
403 mvwaddnstr(physDev->window, row, col, ascii, len);
404 HeapFree( GetProcessHeap(), 0, ascii );
405 wrefresh(physDev->window);
407 if(dc->textAlign & TA_UPDATECP) {
408 dc->CursPosX += count * physDev->cellWidth;
409 dc->CursPosY += physDev->cellHeight;
413 #else /* defined(WINE_CURSES) */
414 FIXME("(%p, %d, %d, 0x%08x, %p, %s, %d, %p): stub\n",
415 dc, x, y, flags, lpRect, debugstr_wn(str,count), count, lpDx);
418 #endif /* defined(WINE_CURSES) */
421 /***********************************************************************
422 * TTYDRV_DC_GetCharWidth
424 BOOL TTYDRV_DC_GetCharWidth(DC *dc, UINT firstChar, UINT lastChar,
428 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
430 FIXME("(%p, %u, %u, %p): semistub\n", dc, firstChar, lastChar, buffer);
432 for(c=firstChar; c<=lastChar; c++) {
433 buffer[c-firstChar] = physDev->cellWidth;
439 /***********************************************************************
440 * TTYDRV_DC_GetTextExtentPoint
442 BOOL TTYDRV_DC_GetTextExtentPoint(DC *dc, LPCWSTR str, INT count,
445 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
447 TRACE("(%p, %s, %d, %p)\n", dc, debugstr_wn(str, count), count, size);
449 size->cx = count * physDev->cellWidth;
450 size->cy = physDev->cellHeight;
455 /***********************************************************************
456 * TTYDRV_DC_GetTextMetrics
458 BOOL TTYDRV_DC_GetTextMetrics(DC *dc, LPTEXTMETRICW lptm)
460 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
462 TRACE("(%p, %p)\n", dc, lptm);
464 lptm->tmHeight = physDev->cellHeight;
467 lptm->tmInternalLeading = 0;
468 lptm->tmExternalLeading = 0;
469 lptm->tmAveCharWidth = physDev->cellWidth;
470 lptm->tmMaxCharWidth = physDev->cellWidth;
471 lptm->tmWeight = FW_MEDIUM;
472 lptm->tmOverhang = 0;
473 lptm->tmDigitizedAspectX = physDev->cellWidth;
474 lptm->tmDigitizedAspectY = physDev->cellHeight;
475 lptm->tmFirstChar = 32;
476 lptm->tmLastChar = 255;
477 lptm->tmDefaultChar = 0;
478 lptm->tmBreakChar = 32;
479 lptm->tmItalic = FALSE;
480 lptm->tmUnderlined = FALSE;
481 lptm->tmStruckOut = FALSE;
482 lptm->tmPitchAndFamily = TMPF_FIXED_PITCH|TMPF_DEVICE;
483 lptm->tmCharSet = ANSI_CHARSET;