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("(%p, %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("(%p, %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("(%p, %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("(%p, %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
;