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
29 #include "wine/debug.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(ttydrv);
34 /***********************************************************************
37 BOOL TTYDRV_DC_Arc(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
38 INT xstart, INT ystart, INT xend, INT yend)
40 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
41 physDev->hdc, left, top, right, bottom, xstart, ystart, xend, yend);
45 /***********************************************************************
48 BOOL TTYDRV_DC_Chord(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
49 INT xstart, INT ystart, INT xend, INT yend)
51 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
52 physDev->hdc, left, top, right, bottom, xstart, ystart, xend, yend);
56 /***********************************************************************
59 BOOL TTYDRV_DC_Ellipse(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom)
61 FIXME("(%p, %d, %d, %d, %d): stub\n", physDev->hdc, left, top, right, bottom);
65 /***********************************************************************
66 * TTYDRV_DC_ExtFloodFill
68 BOOL TTYDRV_DC_ExtFloodFill(TTYDRV_PDEVICE *physDev, INT x, INT y,
69 COLORREF color, UINT fillType)
71 FIXME("(%p, %d, %d, 0x%08lx, %u): stub\n", physDev->hdc, x, y, color, fillType);
75 /***********************************************************************
78 COLORREF TTYDRV_DC_GetPixel(TTYDRV_PDEVICE *physDev, INT x, INT y)
80 FIXME("(%p, %d, %d): stub\n", physDev->hdc, x, y);
81 return RGB(0,0,0); /* FIXME: Always returns black */
84 /***********************************************************************
87 BOOL TTYDRV_DC_LineTo(TTYDRV_PDEVICE *physDev, INT x, INT y)
90 INT row1, col1, row2, col2;
93 TRACE("(%p, %d, %d)\n", physDev->hdc, x, y);
98 GetCurrentPositionEx( physDev->hdc, &pt[0] );
101 LPtoDP( physDev->hdc, pt, 2 );
103 row1 = (physDev->org.y + pt[0].y) / physDev->cellHeight;
104 col1 = (physDev->org.x + pt[0].x) / physDev->cellWidth;
105 row2 = (physDev->org.y + pt[1].y) / physDev->cellHeight;
106 col2 = (physDev->org.x + pt[1].x) / physDev->cellWidth;
120 wmove(physDev->window, row1, col1);
122 wvline(physDev->window, ACS_VLINE, row2-row1);
123 } else if(row1 == row2) {
124 whline(physDev->window, ACS_HLINE, col2-col1);
126 FIXME("Diagonal line drawing not yet supported\n");
128 wrefresh(physDev->window);
131 #else /* defined(WINE_CURSES) */
132 FIXME("(%x, %d, %d): stub\n", physDev->hdc, x, y);
135 #endif /* defined(WINE_CURSES) */
138 /***********************************************************************
141 BOOL TTYDRV_DC_PaintRgn(TTYDRV_PDEVICE *physDev, HRGN hrgn)
143 FIXME("(%p, %p): stub\n", physDev->hdc, hrgn);
147 /***********************************************************************
150 BOOL TTYDRV_DC_Pie(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
151 INT xstart, INT ystart, INT xend, INT yend)
153 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
154 physDev->hdc, left, top, right, bottom, xstart, ystart, xend, yend);
158 /***********************************************************************
161 BOOL TTYDRV_DC_Polygon(TTYDRV_PDEVICE *physDev, const POINT* pt, INT count)
163 FIXME("(%p, %p, %d): stub\n", physDev->hdc, pt, count);
167 /***********************************************************************
170 BOOL TTYDRV_DC_Polyline(TTYDRV_PDEVICE *physDev, const POINT* pt, INT count)
172 FIXME("(%p, %p, %d): stub\n", physDev->hdc, pt, count);
176 /***********************************************************************
177 * TTYDRV_DC_PolyPolygon
179 BOOL TTYDRV_DC_PolyPolygon(TTYDRV_PDEVICE *physDev, const POINT* pt, const INT* counts, UINT polygons)
181 FIXME("(%p, %p, %p, %u): stub\n", physDev->hdc, pt, counts, polygons);
185 /***********************************************************************
186 * TTYDRV_DC_PolyPolyline
188 BOOL TTYDRV_DC_PolyPolyline(TTYDRV_PDEVICE *physDev, const POINT* pt, const DWORD* counts, DWORD polylines)
190 FIXME("(%p, %p, %p, %lu): stub\n", physDev->hdc, pt, counts, polylines);
195 /***********************************************************************
196 * TTYDRV_DC_Rectangle
198 BOOL TTYDRV_DC_Rectangle(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom)
201 INT row1, col1, row2, col2;
204 TRACE("(%p, %d, %d, %d, %d)\n", physDev->hdc, left, top, right, bottom);
212 rect.bottom = bottom;
213 LPtoDP( physDev->hdc, (POINT *)&rect, 2 );
214 row1 = (physDev->org.y + rect.top) / physDev->cellHeight;
215 col1 = (physDev->org.x + rect.left) / physDev->cellWidth;
216 row2 = (physDev->org.y + rect.bottom) / physDev->cellHeight;
217 col2 = (physDev->org.x + rect.right) / physDev->cellWidth;
230 wmove(physDev->window, row1, col1);
231 whline(physDev->window, ACS_HLINE, col2-col1);
233 wmove(physDev->window, row1, col2);
234 wvline(physDev->window, ACS_VLINE, row2-row1);
236 wmove(physDev->window, row2, col1);
237 whline(physDev->window, ACS_HLINE, col2-col1);
239 wmove(physDev->window, row1, col1);
240 wvline(physDev->window, ACS_VLINE, row2-row1);
242 mvwaddch(physDev->window, row1, col1, ACS_ULCORNER);
243 mvwaddch(physDev->window, row1, col2, ACS_URCORNER);
244 mvwaddch(physDev->window, row2, col2, ACS_LRCORNER);
245 mvwaddch(physDev->window, row2, col1, ACS_LLCORNER);
247 wrefresh(physDev->window);
250 #else /* defined(WINE_CURSES) */
251 FIXME("(%x, %d, %d, %d, %d): stub\n", physDev->hdc, left, top, right, bottom);
254 #endif /* defined(WINE_CURSES) */
257 /***********************************************************************
258 * TTYDRV_DC_RoundRect
260 BOOL TTYDRV_DC_RoundRect(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right,
261 INT bottom, INT ell_width, INT ell_height)
263 FIXME("(%p, %d, %d, %d, %d, %d, %d): stub\n",
264 physDev->hdc, left, top, right, bottom, ell_width, ell_height);
269 /***********************************************************************
272 COLORREF TTYDRV_DC_SetPixel(TTYDRV_PDEVICE *physDev, INT x, INT y, COLORREF color)
278 TRACE("(%p, %d, %d, 0x%08lx)\n", physDev->hdc, x, y, color);
285 LPtoDP( physDev->hdc, &pt, 1 );
286 row = (physDev->org.y + pt.y) / physDev->cellHeight;
287 col = (physDev->org.x + pt.x) / physDev->cellWidth;
289 mvwaddch(physDev->window, row, col, ACS_BULLET);
290 wrefresh(physDev->window);
292 return RGB(0,0,0); /* FIXME: Always returns black */
293 #else /* defined(WINE_CURSES) */
294 FIXME("(%x, %d, %d, 0x%08lx): stub\n", physDev->hdc, x, y, color);
296 return RGB(0,0,0); /* FIXME: Always returns black */
297 #endif /* defined(WINE_CURSES) */
300 /***********************************************************************
303 BOOL TTYDRV_DC_BitBlt(TTYDRV_PDEVICE *physDevDst, INT xDst, INT yDst,
304 INT width, INT height, TTYDRV_PDEVICE *physDevSrc,
305 INT xSrc, INT ySrc, DWORD rop)
307 FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %lu): stub\n",
308 physDevDst->hdc, xDst, yDst, width, height, physDevSrc->hdc, xSrc, ySrc, rop );
312 /***********************************************************************
315 BOOL TTYDRV_DC_PatBlt(TTYDRV_PDEVICE *physDev, INT left, INT top,
316 INT width, INT height, DWORD rop)
318 FIXME("(%p, %d, %d, %d, %d, %lu): stub\n", physDev->hdc, left, top, width, height, rop );
322 /***********************************************************************
323 * TTYDRV_DC_StretchBlt
325 BOOL TTYDRV_DC_StretchBlt(TTYDRV_PDEVICE *physDevDst, INT xDst, INT yDst,
326 INT widthDst, INT heightDst,
327 TTYDRV_PDEVICE *physDevSrc, INT xSrc, INT ySrc,
328 INT widthSrc, INT heightSrc, DWORD rop)
330 FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %d, %d, %lu): stub\n",
331 physDevDst->hdc, xDst, yDst, widthDst, heightDst,
332 physDevSrc->hdc, xSrc, ySrc, widthSrc, heightSrc, rop );
337 /***********************************************************************
338 * TTYDRV_DC_ExtTextOut
340 BOOL TTYDRV_DC_ExtTextOut(TTYDRV_PDEVICE *physDev, INT x, INT y, UINT flags,
341 const RECT *lpRect, LPCWSTR str, UINT count,
349 UINT text_align = GetTextAlign( physDev->hdc );
351 TRACE("(%p, %d, %d, 0x%08x, %p, %s, %d, %p)\n",
352 physDev->hdc, x, y, flags, lpRect, debugstr_wn(str, count), count, lpDx);
359 /* FIXME: Is this really correct? */
360 if(text_align & TA_UPDATECP) GetCurrentPositionEx( physDev->hdc, &pt );
362 LPtoDP( physDev->hdc, &pt, 1 );
363 row = (physDev->org.y + pt.y) / physDev->cellHeight;
364 col = (physDev->org.x + pt.x) / physDev->cellWidth;
365 len = WideCharToMultiByte( CP_ACP, 0, str, count, NULL, 0, NULL, NULL );
366 ascii = HeapAlloc( GetProcessHeap(), 0, len );
367 WideCharToMultiByte( CP_ACP, 0, str, count, ascii, len, NULL, NULL );
368 mvwaddnstr(physDev->window, row, col, ascii, len);
369 HeapFree( GetProcessHeap(), 0, ascii );
370 wrefresh(physDev->window);
372 if(text_align & TA_UPDATECP)
374 pt.x += count * physDev->cellWidth;
375 pt.y += physDev->cellHeight;
376 DPtoLP( physDev->hdc, &pt, 1 );
377 MoveToEx( physDev->hdc, pt.x, pt.y, NULL );
381 #else /* defined(WINE_CURSES) */
382 FIXME("(%x, %d, %d, 0x%08x, %p, %s, %d, %p): stub\n",
383 physDev->hdc, x, y, flags, lpRect, debugstr_wn(str,count), count, lpDx);
386 #endif /* defined(WINE_CURSES) */
389 /***********************************************************************
390 * TTYDRV_DC_GetCharWidth
392 BOOL TTYDRV_DC_GetCharWidth(TTYDRV_PDEVICE *physDev, UINT firstChar, UINT lastChar,
397 FIXME("(%p, %u, %u, %p): semistub\n", physDev->hdc, firstChar, lastChar, buffer);
399 for(c=firstChar; c<=lastChar; c++) {
400 buffer[c-firstChar] = physDev->cellWidth;
406 /***********************************************************************
407 * TTYDRV_DC_GetTextExtentPoint
409 BOOL TTYDRV_DC_GetTextExtentPoint(TTYDRV_PDEVICE *physDev, LPCWSTR str, INT count,
412 TRACE("(%p, %s, %d, %p)\n", physDev->hdc, debugstr_wn(str, count), count, size);
414 size->cx = count * physDev->cellWidth;
415 size->cy = physDev->cellHeight;
420 /***********************************************************************
421 * TTYDRV_DC_GetTextMetrics
423 BOOL TTYDRV_DC_GetTextMetrics(TTYDRV_PDEVICE *physDev, LPTEXTMETRICW lptm)
425 TRACE("(%p, %p)\n", physDev->hdc, lptm);
427 lptm->tmHeight = physDev->cellHeight;
430 lptm->tmInternalLeading = 0;
431 lptm->tmExternalLeading = 0;
432 lptm->tmAveCharWidth = physDev->cellWidth;
433 lptm->tmMaxCharWidth = physDev->cellWidth;
434 lptm->tmWeight = FW_MEDIUM;
435 lptm->tmOverhang = 0;
436 lptm->tmDigitizedAspectX = physDev->cellWidth;
437 lptm->tmDigitizedAspectY = physDev->cellHeight;
438 lptm->tmFirstChar = 32;
439 lptm->tmLastChar = 255;
440 lptm->tmDefaultChar = 0;
441 lptm->tmBreakChar = 32;
442 lptm->tmItalic = FALSE;
443 lptm->tmUnderlined = FALSE;
444 lptm->tmStruckOut = FALSE;
445 lptm->tmPitchAndFamily = TMPF_FIXED_PITCH|TMPF_DEVICE;
446 lptm->tmCharSet = ANSI_CHARSET;