4 * Copyright 1999 Patrik Stridvall
11 #include "debugtools.h"
14 DEFAULT_DEBUG_CHANNEL(ttydrv);
16 /***********************************************************************
19 BOOL TTYDRV_DC_Arc(DC *dc, INT left, INT top, INT right, INT bottom,
20 INT xstart, INT ystart, INT xend, INT yend)
22 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
23 dc, left, top, right, bottom, xstart, ystart, xend, yend);
28 /***********************************************************************
31 BOOL TTYDRV_DC_Chord(DC *dc, INT left, INT top, INT right, INT bottom,
32 INT xstart, INT ystart, INT xend, INT yend)
34 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
35 dc, left, top, right, bottom, xstart, ystart, xend, yend);
40 /***********************************************************************
43 BOOL TTYDRV_DC_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom)
45 FIXME("(%p, %d, %d, %d, %d): stub\n",
46 dc, left, top, right, bottom);
51 /***********************************************************************
52 * TTYDRV_DC_ExtFloodFill
54 BOOL TTYDRV_DC_ExtFloodFill(DC *dc, INT x, INT y,
55 COLORREF color, UINT fillType)
57 FIXME("(%p, %d, %d, 0x%08lx, %u): stub\n", dc, x, y, color, fillType);
62 /***********************************************************************
65 COLORREF TTYDRV_DC_GetPixel(DC *dc, INT x, INT y)
67 FIXME("(%p, %d, %d): stub\n", dc, x, y);
69 return RGB(0,0,0); /* FIXME: Always returns black */
72 /***********************************************************************
75 BOOL TTYDRV_DC_LineTo(DC *dc, INT x, INT y)
78 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
79 INT row1, col1, row2, col2;
81 TRACE("(%p, %d, %d)\n", dc, x, y);
86 row1 = (dc->DCOrgY + XLPTODP(dc, dc->CursPosY)) / physDev->cellHeight;
87 col1 = (dc->DCOrgX + XLPTODP(dc, dc->CursPosX)) / physDev->cellWidth;
88 row2 = (dc->DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
89 col2 = (dc->DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
103 wmove(physDev->window, row1, col1);
105 wvline(physDev->window, ACS_VLINE, row2-row1);
106 } else if(row1 == row2) {
107 whline(physDev->window, ACS_HLINE, col2-col1);
109 FIXME("Diagonal line drawing not yet supported\n");
111 wrefresh(physDev->window);
114 #else /* defined(WINE_CURSES) */
115 FIXME("(%p, %d, %d): stub\n", dc, x, y);
118 #endif /* defined(WINE_CURSES) */
121 /***********************************************************************
124 BOOL TTYDRV_DC_PaintRgn(DC *dc, HRGN hrgn)
126 FIXME("(%p, 0x%04x): stub\n", dc, hrgn);
131 /***********************************************************************
134 BOOL TTYDRV_DC_Pie(DC *dc, INT left, INT top, INT right, INT bottom,
135 INT xstart, INT ystart, INT xend, INT yend)
137 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
138 dc, left, top, right, bottom, xstart, ystart, xend, yend);
143 /***********************************************************************
146 BOOL TTYDRV_DC_Polygon(DC *dc, const POINT* pt, INT count)
148 FIXME("(%p, %p, %d): stub\n", dc, pt, count);
153 /***********************************************************************
156 BOOL TTYDRV_DC_Polyline(DC *dc, const POINT* pt, INT count)
158 FIXME("(%p, %p, %d): stub\n", dc, pt, count);
163 /***********************************************************************
164 * TTYDRV_DC_PolyPolygon
166 BOOL TTYDRV_DC_PolyPolygon(DC *dc, const POINT* pt, const INT* counts, UINT polygons)
168 FIXME("(%p, %p, %p, %u): stub\n", dc, pt, counts, polygons);
173 /***********************************************************************
174 * TTYDRV_DC_PolyPolyline
176 BOOL TTYDRV_DC_PolyPolyline(DC *dc, const POINT* pt, const DWORD* counts, DWORD polylines)
178 FIXME("(%p, %p, %p, %lu): stub\n", dc, pt, counts, polylines);
183 /***********************************************************************
184 * TTYDRV_DC_Rectangle
186 BOOL TTYDRV_DC_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
189 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
190 INT row1, col1, row2, col2;
192 TRACE("(%p, %d, %d, %d, %d)\n", dc, left, top, right, bottom);
197 row1 = (dc->DCOrgY + XLPTODP(dc, top)) / physDev->cellHeight;
198 col1 = (dc->DCOrgX + XLPTODP(dc, left)) / physDev->cellWidth;
199 row2 = (dc->DCOrgY + XLPTODP(dc, bottom)) / physDev->cellHeight;
200 col2 = (dc->DCOrgX + XLPTODP(dc, right)) / physDev->cellWidth;
213 wmove(physDev->window, row1, col1);
214 whline(physDev->window, ACS_HLINE, col2-col1);
216 wmove(physDev->window, row1, col2);
217 wvline(physDev->window, ACS_VLINE, row2-row1);
219 wmove(physDev->window, row2, col1);
220 whline(physDev->window, ACS_HLINE, col2-col1);
222 wmove(physDev->window, row1, col1);
223 wvline(physDev->window, ACS_VLINE, row2-row1);
225 mvwaddch(physDev->window, row1, col1, ACS_ULCORNER);
226 mvwaddch(physDev->window, row1, col2, ACS_URCORNER);
227 mvwaddch(physDev->window, row2, col2, ACS_LRCORNER);
228 mvwaddch(physDev->window, row2, col1, ACS_LLCORNER);
230 wrefresh(physDev->window);
233 #else /* defined(WINE_CURSES) */
234 FIXME("(%p, %d, %d, %d, %d): stub\n", dc, left, top, right, bottom);
237 #endif /* defined(WINE_CURSES) */
240 /***********************************************************************
241 * TTYDRV_DC_RoundRect
243 BOOL TTYDRV_DC_RoundRect(DC *dc, INT left, INT top, INT right,
244 INT bottom, INT ell_width, INT ell_height)
246 FIXME("(%p, %d, %d, %d, %d, %d, %d): stub\n",
247 dc, left, top, right, bottom, ell_width, ell_height);
252 /***********************************************************************
253 * TTYDRV_DC_SetBkColor
255 COLORREF TTYDRV_DC_SetBkColor(DC *dc, COLORREF color)
259 TRACE("(%p, 0x%08lx)\n", dc, color);
261 oldColor = dc->backgroundColor;
262 dc->backgroundColor = color;
267 /***********************************************************************
270 COLORREF TTYDRV_DC_SetPixel(DC *dc, INT x, INT y, COLORREF color)
273 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
276 TRACE("(%p, %d, %d, 0x%08lx)\n", dc, x, y, color);
281 row = (dc->DCOrgY + XLPTODP(dc, y)) / physDev->cellHeight;
282 col = (dc->DCOrgX + XLPTODP(dc, x)) / physDev->cellWidth;
284 mvwaddch(physDev->window, row, col, ACS_BULLET);
285 wrefresh(physDev->window);
287 return RGB(0,0,0); /* FIXME: Always returns black */
288 #else /* defined(WINE_CURSES) */
289 FIXME("(%p, %d, %d, 0x%08lx): stub\n", dc, x, y, color);
291 return RGB(0,0,0); /* FIXME: Always returns black */
292 #endif /* defined(WINE_CURSES) */
295 /***********************************************************************
296 * TTYDRV_DC_SetTextColor
298 COLORREF TTYDRV_DC_SetTextColor(DC *dc, COLORREF color)
302 TRACE("(%p, 0x%08lx)\n", dc, color);
304 oldColor = dc->textColor;
305 dc->textColor = color;
311 /***********************************************************************
314 BOOL TTYDRV_DC_BitBlt(DC *dcDst, INT xDst, INT yDst,
315 INT width, INT height, DC *dcSrc,
316 INT xSrc, INT ySrc, DWORD rop)
318 FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %lu): stub\n",
319 dcDst, xDst, yDst, width, height,
320 dcSrc, xSrc, ySrc, rop
326 /***********************************************************************
329 BOOL TTYDRV_DC_PatBlt(DC *dc, INT left, INT top,
330 INT width, INT height, DWORD rop)
332 FIXME("(%p, %d, %d, %d, %d, %lu): stub\n",
333 dc, left, top, width, height, rop
340 /***********************************************************************
341 * TTYDRV_DC_StretchBlt
343 BOOL TTYDRV_DC_StretchBlt(DC *dcDst, INT xDst, INT yDst,
344 INT widthDst, INT heightDst,
345 DC *dcSrc, INT xSrc, INT ySrc,
346 INT widthSrc, INT heightSrc, DWORD rop)
348 FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %d, %d, %lu): stub\n",
349 dcDst, xDst, yDst, widthDst, heightDst,
350 dcSrc, xSrc, ySrc, widthSrc, heightSrc, rop
356 /***********************************************************************
357 * TTYDRV_DC_ExtTextOut
359 BOOL TTYDRV_DC_ExtTextOut(DC *dc, INT x, INT y, UINT flags,
360 const RECT *lpRect, LPCWSTR str, UINT count,
364 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
369 TRACE("(%p, %d, %d, 0x%08x, %p, %s, %d, %p)\n",
370 dc, x, y, flags, lpRect, debugstr_wn(str, count), count, lpDx);
375 /* FIXME: Is this really correct? */
376 if(dc->textAlign & TA_UPDATECP) {
384 row = (dc->DCOrgY + y) / physDev->cellHeight;
385 col = (dc->DCOrgX + x) / physDev->cellWidth;
386 len = WideCharToMultiByte( CP_ACP, 0, str, count, NULL, 0, NULL, NULL );
387 ascii = HeapAlloc( GetProcessHeap(), 0, len );
388 WideCharToMultiByte( CP_ACP, 0, str, count, ascii, len, NULL, NULL );
389 mvwaddnstr(physDev->window, row, col, ascii, len);
390 HeapFree( GetProcessHeap(), 0, ascii );
391 wrefresh(physDev->window);
393 if(dc->textAlign & TA_UPDATECP) {
394 dc->CursPosX += count * physDev->cellWidth;
395 dc->CursPosY += physDev->cellHeight;
399 #else /* defined(WINE_CURSES) */
400 FIXME("(%p, %d, %d, 0x%08x, %p, %s, %d, %p): stub\n",
401 dc, x, y, flags, lpRect, debugstr_wn(str,count), count, lpDx);
404 #endif /* defined(WINE_CURSES) */
407 /***********************************************************************
408 * TTYDRV_DC_GetCharWidth
410 BOOL TTYDRV_DC_GetCharWidth(DC *dc, UINT firstChar, UINT lastChar,
414 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
416 FIXME("(%p, %u, %u, %p): semistub\n", dc, firstChar, lastChar, buffer);
418 for(c=firstChar; c<=lastChar; c++) {
419 buffer[c-firstChar] = physDev->cellWidth;
425 /***********************************************************************
426 * TTYDRV_DC_GetTextExtentPoint
428 BOOL TTYDRV_DC_GetTextExtentPoint(DC *dc, LPCWSTR str, INT count,
431 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
433 TRACE("(%p, %s, %d, %p)\n", dc, debugstr_wn(str, count), count, size);
435 size->cx = count * physDev->cellWidth;
436 size->cy = physDev->cellHeight;
441 /***********************************************************************
442 * TTYDRV_DC_GetTextMetrics
444 BOOL TTYDRV_DC_GetTextMetrics(DC *dc, LPTEXTMETRICW lptm)
446 TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
448 TRACE("(%p, %p)\n", dc, lptm);
450 lptm->tmHeight = physDev->cellHeight;
453 lptm->tmInternalLeading = 0;
454 lptm->tmExternalLeading = 0;
455 lptm->tmAveCharWidth = physDev->cellWidth;
456 lptm->tmMaxCharWidth = physDev->cellWidth;
457 lptm->tmWeight = FW_MEDIUM;
458 lptm->tmOverhang = 0;
459 lptm->tmDigitizedAspectX = physDev->cellWidth;
460 lptm->tmDigitizedAspectY = physDev->cellHeight;
461 lptm->tmFirstChar = 32;
462 lptm->tmLastChar = 255;
463 lptm->tmDefaultChar = 0;
464 lptm->tmBreakChar = 32;
465 lptm->tmItalic = FALSE;
466 lptm->tmUnderlined = FALSE;
467 lptm->tmStruckOut = FALSE;
468 lptm->tmPitchAndFamily = TMPF_FIXED_PITCH|TMPF_DEVICE;
469 lptm->tmCharSet = ANSI_CHARSET;