4 * Copyright 1999 Patrik Stridvall
12 #include "debugtools.h"
15 DEFAULT_DEBUG_CHANNEL(ttydrv
);
17 /***********************************************************************
20 BOOL
TTYDRV_DC_Arc(DC
*dc
, INT left
, INT top
, INT right
, INT bottom
,
21 INT xstart
, INT ystart
, INT xend
, INT yend
)
23 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
24 dc
, left
, top
, right
, bottom
, xstart
, ystart
, xend
, yend
);
29 /***********************************************************************
32 BOOL
TTYDRV_DC_Chord(DC
*dc
, INT left
, INT top
, INT right
, INT bottom
,
33 INT xstart
, INT ystart
, INT xend
, INT yend
)
35 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
36 dc
, left
, top
, right
, bottom
, xstart
, ystart
, xend
, yend
);
41 /***********************************************************************
44 BOOL
TTYDRV_DC_Ellipse(DC
*dc
, INT left
, INT top
, INT right
, INT bottom
)
46 FIXME("(%p, %d, %d, %d, %d): stub\n",
47 dc
, left
, top
, right
, bottom
);
52 /***********************************************************************
53 * TTYDRV_DC_ExtFloodFill
55 BOOL
TTYDRV_DC_ExtFloodFill(DC
*dc
, INT x
, INT y
,
56 COLORREF color
, UINT fillType
)
58 FIXME("(%p, %d, %d, 0x%08lx, %u): stub\n", dc
, x
, y
, color
, fillType
);
63 /***********************************************************************
66 COLORREF
TTYDRV_DC_GetPixel(DC
*dc
, INT x
, INT y
)
68 FIXME("(%p, %d, %d): stub\n", dc
, x
, y
);
70 return RGB(0,0,0); /* FIXME: Always returns black */
73 /***********************************************************************
76 BOOL
TTYDRV_DC_LineTo(DC
*dc
, INT x
, INT y
)
79 TTYDRV_PDEVICE
*physDev
= (TTYDRV_PDEVICE
*) dc
->physDev
;
80 INT row1
, col1
, row2
, col2
;
82 TRACE("(%p, %d, %d)\n", dc
, x
, y
);
87 row1
= (dc
->DCOrgY
+ XLPTODP(dc
, dc
->CursPosY
)) / physDev
->cellHeight
;
88 col1
= (dc
->DCOrgX
+ XLPTODP(dc
, dc
->CursPosX
)) / physDev
->cellWidth
;
89 row2
= (dc
->DCOrgY
+ XLPTODP(dc
, y
)) / physDev
->cellHeight
;
90 col2
= (dc
->DCOrgX
+ XLPTODP(dc
, x
)) / physDev
->cellWidth
;
104 wmove(physDev
->window
, row1
, col1
);
106 wvline(physDev
->window
, ACS_VLINE
, row2
-row1
);
107 } else if(row1
== row2
) {
108 whline(physDev
->window
, ACS_HLINE
, col2
-col1
);
110 FIXME("Diagonal line drawing not yet supported\n");
112 wrefresh(physDev
->window
);
115 #else /* defined(WINE_CURSES) */
116 FIXME("(%p, %d, %d): stub\n", dc
, x
, y
);
119 #endif /* defined(WINE_CURSES) */
122 /***********************************************************************
125 BOOL
TTYDRV_DC_PaintRgn(DC
*dc
, HRGN hrgn
)
127 FIXME("(%p, 0x%04x): stub\n", dc
, hrgn
);
132 /***********************************************************************
135 BOOL
TTYDRV_DC_Pie(DC
*dc
, INT left
, INT top
, INT right
, INT bottom
,
136 INT xstart
, INT ystart
, INT xend
, INT yend
)
138 FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
139 dc
, left
, top
, right
, bottom
, xstart
, ystart
, xend
, yend
);
144 /***********************************************************************
147 BOOL
TTYDRV_DC_Polygon(DC
*dc
, const POINT
* pt
, INT count
)
149 FIXME("(%p, %p, %d): stub\n", dc
, pt
, count
);
154 /***********************************************************************
157 BOOL
TTYDRV_DC_Polyline(DC
*dc
, const POINT
* pt
, INT count
)
159 FIXME("(%p, %p, %d): stub\n", dc
, pt
, count
);
164 /***********************************************************************
165 * TTYDRV_DC_PolyPolygon
167 BOOL
TTYDRV_DC_PolyPolygon(DC
*dc
, const POINT
* pt
, const INT
* counts
, UINT polygons
)
169 FIXME("(%p, %p, %p, %u): stub\n", dc
, pt
, counts
, polygons
);
174 /***********************************************************************
175 * TTYDRV_DC_PolyPolyline
177 BOOL
TTYDRV_DC_PolyPolyline(DC
*dc
, const POINT
* pt
, const DWORD
* counts
, DWORD polylines
)
179 FIXME("(%p, %p, %p, %lu): stub\n", dc
, pt
, counts
, polylines
);
184 /***********************************************************************
185 * TTYDRV_DC_Rectangle
187 BOOL
TTYDRV_DC_Rectangle(DC
*dc
, INT left
, INT top
, INT right
, INT bottom
)
190 TTYDRV_PDEVICE
*physDev
= (TTYDRV_PDEVICE
*) dc
->physDev
;
191 INT row1
, col1
, row2
, col2
;
193 TRACE("(%p, %d, %d, %d, %d)\n", dc
, left
, top
, right
, bottom
);
198 row1
= (dc
->DCOrgY
+ XLPTODP(dc
, top
)) / physDev
->cellHeight
;
199 col1
= (dc
->DCOrgX
+ XLPTODP(dc
, left
)) / physDev
->cellWidth
;
200 row2
= (dc
->DCOrgY
+ XLPTODP(dc
, bottom
)) / physDev
->cellHeight
;
201 col2
= (dc
->DCOrgX
+ XLPTODP(dc
, right
)) / physDev
->cellWidth
;
214 wmove(physDev
->window
, row1
, col1
);
215 whline(physDev
->window
, ACS_HLINE
, col2
-col1
);
217 wmove(physDev
->window
, row1
, col2
);
218 wvline(physDev
->window
, ACS_VLINE
, row2
-row1
);
220 wmove(physDev
->window
, row2
, col1
);
221 whline(physDev
->window
, ACS_HLINE
, col2
-col1
);
223 wmove(physDev
->window
, row1
, col1
);
224 wvline(physDev
->window
, ACS_VLINE
, row2
-row1
);
226 mvwaddch(physDev
->window
, row1
, col1
, ACS_ULCORNER
);
227 mvwaddch(physDev
->window
, row1
, col2
, ACS_URCORNER
);
228 mvwaddch(physDev
->window
, row2
, col2
, ACS_LRCORNER
);
229 mvwaddch(physDev
->window
, row2
, col1
, ACS_LLCORNER
);
231 wrefresh(physDev
->window
);
234 #else /* defined(WINE_CURSES) */
235 FIXME("(%p, %d, %d, %d, %d): stub\n", dc
, left
, top
, right
, bottom
);
238 #endif /* defined(WINE_CURSES) */
241 /***********************************************************************
242 * TTYDRV_DC_RoundRect
244 BOOL
TTYDRV_DC_RoundRect(DC
*dc
, INT left
, INT top
, INT right
,
245 INT bottom
, INT ell_width
, INT ell_height
)
247 FIXME("(%p, %d, %d, %d, %d, %d, %d): stub\n",
248 dc
, left
, top
, right
, bottom
, ell_width
, ell_height
);
253 /***********************************************************************
254 * TTYDRV_DC_SetBkColor
256 COLORREF
TTYDRV_DC_SetBkColor(DC
*dc
, COLORREF color
)
260 TRACE("(%p, 0x%08lx)\n", dc
, color
);
262 oldColor
= dc
->backgroundColor
;
263 dc
->backgroundColor
= color
;
268 /***********************************************************************
271 COLORREF
TTYDRV_DC_SetPixel(DC
*dc
, INT x
, INT y
, COLORREF color
)
274 TTYDRV_PDEVICE
*physDev
= (TTYDRV_PDEVICE
*) dc
->physDev
;
277 TRACE("(%p, %d, %d, 0x%08lx)\n", dc
, x
, y
, color
);
282 row
= (dc
->DCOrgY
+ XLPTODP(dc
, y
)) / physDev
->cellHeight
;
283 col
= (dc
->DCOrgX
+ XLPTODP(dc
, x
)) / physDev
->cellWidth
;
285 mvwaddch(physDev
->window
, row
, col
, ACS_BULLET
);
286 wrefresh(physDev
->window
);
288 return RGB(0,0,0); /* FIXME: Always returns black */
289 #else /* defined(WINE_CURSES) */
290 FIXME("(%p, %d, %d, 0x%08lx): stub\n", dc
, x
, y
, color
);
292 return RGB(0,0,0); /* FIXME: Always returns black */
293 #endif /* defined(WINE_CURSES) */
296 /***********************************************************************
297 * TTYDRV_DC_SetTextColor
299 COLORREF
TTYDRV_DC_SetTextColor(DC
*dc
, COLORREF color
)
303 TRACE("(%p, 0x%08lx)\n", dc
, color
);
305 oldColor
= dc
->textColor
;
306 dc
->textColor
= color
;
312 /***********************************************************************
315 BOOL
TTYDRV_DC_BitBlt(DC
*dcDst
, INT xDst
, INT yDst
,
316 INT width
, INT height
, DC
*dcSrc
,
317 INT xSrc
, INT ySrc
, DWORD rop
)
319 FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %lu): stub\n",
320 dcDst
, xDst
, yDst
, width
, height
,
321 dcSrc
, xSrc
, ySrc
, rop
327 /***********************************************************************
330 BOOL
TTYDRV_DC_PatBlt(DC
*dc
, INT left
, INT top
,
331 INT width
, INT height
, DWORD rop
)
333 FIXME("(%p, %d, %d, %d, %d, %lu): stub\n",
334 dc
, left
, top
, width
, height
, rop
341 /***********************************************************************
342 * TTYDRV_DC_StretchBlt
344 BOOL
TTYDRV_DC_StretchBlt(DC
*dcDst
, INT xDst
, INT yDst
,
345 INT widthDst
, INT heightDst
,
346 DC
*dcSrc
, INT xSrc
, INT ySrc
,
347 INT widthSrc
, INT heightSrc
, DWORD rop
)
349 FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %d, %d, %lu): stub\n",
350 dcDst
, xDst
, yDst
, widthDst
, heightDst
,
351 dcSrc
, xSrc
, ySrc
, widthSrc
, heightSrc
, rop
357 /***********************************************************************
358 * TTYDRV_DC_ExtTextOut
360 BOOL
TTYDRV_DC_ExtTextOut(DC
*dc
, INT x
, INT y
, UINT flags
,
361 const RECT
*lpRect
, LPCWSTR str
, UINT count
,
365 TTYDRV_PDEVICE
*physDev
= (TTYDRV_PDEVICE
*) dc
->physDev
;
370 TRACE("(%p, %d, %d, 0x%08x, %p, %s, %d, %p)\n",
371 dc
, x
, y
, flags
, lpRect
, debugstr_wn(str
, count
), count
, lpDx
);
376 /* FIXME: Is this really correct? */
377 if(dc
->textAlign
& TA_UPDATECP
) {
385 row
= (dc
->DCOrgY
+ y
) / physDev
->cellHeight
;
386 col
= (dc
->DCOrgX
+ x
) / physDev
->cellWidth
;
387 len
= WideCharToMultiByte( CP_ACP
, 0, str
, count
, NULL
, 0, NULL
, NULL
);
388 ascii
= HeapAlloc( GetProcessHeap(), 0, len
);
389 WideCharToMultiByte( CP_ACP
, 0, str
, count
, ascii
, len
, NULL
, NULL
);
390 mvwaddnstr(physDev
->window
, row
, col
, ascii
, len
);
391 HeapFree( GetProcessHeap(), 0, ascii
);
392 wrefresh(physDev
->window
);
394 if(dc
->textAlign
& TA_UPDATECP
) {
395 dc
->CursPosX
+= count
* physDev
->cellWidth
;
396 dc
->CursPosY
+= physDev
->cellHeight
;
400 #else /* defined(WINE_CURSES) */
401 FIXME("(%p, %d, %d, 0x%08x, %p, %s, %d, %p): stub\n",
402 dc
, x
, y
, flags
, lpRect
, debugstr_wn(str
,count
), count
, lpDx
);
405 #endif /* defined(WINE_CURSES) */
408 /***********************************************************************
409 * TTYDRV_DC_GetCharWidth
411 BOOL
TTYDRV_DC_GetCharWidth(DC
*dc
, UINT firstChar
, UINT lastChar
,
415 TTYDRV_PDEVICE
*physDev
= (TTYDRV_PDEVICE
*) dc
->physDev
;
417 FIXME("(%p, %u, %u, %p): semistub\n", dc
, firstChar
, lastChar
, buffer
);
419 for(c
=firstChar
; c
<=lastChar
; c
++) {
420 buffer
[c
-firstChar
] = physDev
->cellWidth
;
426 /***********************************************************************
427 * TTYDRV_DC_GetTextExtentPoint
429 BOOL
TTYDRV_DC_GetTextExtentPoint(DC
*dc
, LPCWSTR str
, INT count
,
432 TTYDRV_PDEVICE
*physDev
= (TTYDRV_PDEVICE
*) dc
->physDev
;
434 TRACE("(%p, %s, %d, %p)\n", dc
, debugstr_wn(str
, count
), count
, size
);
436 size
->cx
= count
* physDev
->cellWidth
;
437 size
->cy
= physDev
->cellHeight
;
442 /***********************************************************************
443 * TTYDRV_DC_GetTextMetrics
445 BOOL
TTYDRV_DC_GetTextMetrics(DC
*dc
, LPTEXTMETRICA lptm
)
447 TTYDRV_PDEVICE
*physDev
= (TTYDRV_PDEVICE
*) dc
->physDev
;
449 TRACE("(%p, %p)\n", dc
, lptm
);
451 lptm
->tmHeight
= physDev
->cellHeight
;
454 lptm
->tmInternalLeading
= 0;
455 lptm
->tmExternalLeading
= 0;
456 lptm
->tmAveCharWidth
= physDev
->cellWidth
;
457 lptm
->tmMaxCharWidth
= physDev
->cellWidth
;
458 lptm
->tmWeight
= FW_MEDIUM
;
459 lptm
->tmOverhang
= 0;
460 lptm
->tmDigitizedAspectX
= physDev
->cellWidth
;
461 lptm
->tmDigitizedAspectY
= physDev
->cellHeight
;
462 lptm
->tmFirstChar
= 32;
463 lptm
->tmLastChar
= 255;
464 lptm
->tmDefaultChar
= 0;
465 lptm
->tmBreakChar
= 32;
466 lptm
->tmItalic
= FALSE
;
467 lptm
->tmUnderlined
= FALSE
;
468 lptm
->tmStruckOut
= FALSE
;
469 lptm
->tmPitchAndFamily
= TMPF_FIXED_PITCH
|TMPF_DEVICE
;
470 lptm
->tmCharSet
= ANSI_CHARSET
;