/* * TTY DC text * * Copyright 1999 Patrik Stridvall */ #include "config.h" #include "windef.h" #include "wingdi.h" #include "dc.h" #include "debugtools.h" #include "gdi.h" #include "ttydrv.h" DEFAULT_DEBUG_CHANNEL(ttydrv); /*********************************************************************** * TTYDRV_DC_ExtTextOut */ BOOL TTYDRV_DC_ExtTextOut(DC *dc, INT x, INT y, UINT flags, const RECT *lpRect, LPCWSTR str, UINT count, const INT *lpDx) { #ifdef HAVE_LIBCURSES TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev; INT row, col; LPSTR ascii; TRACE("(%p, %d, %d, 0x%08x, %p, %s, %d, %p)\n", dc, x, y, flags, lpRect, debugstr_wn(str, count), count, lpDx); if(!physDev->window) return FALSE; /* FIXME: Is this really correct? */ if(dc->w.textAlign & TA_UPDATECP) { x = dc->w.CursPosX; y = dc->w.CursPosY; } x = XLPTODP(dc, x); y = YLPTODP(dc, y); row = (dc->w.DCOrgY + y) / physDev->cellHeight; col = (dc->w.DCOrgX + x) / physDev->cellWidth; ascii = HeapAlloc( GetProcessHeap(), 0, count+1 ); lstrcpynWtoA(ascii, str, count+1); mvwaddnstr(physDev->window, row, col, ascii, count); HeapFree( GetProcessHeap(), 0, ascii ); wrefresh(physDev->window); if(dc->w.textAlign & TA_UPDATECP) { dc->w.CursPosX += count * physDev->cellWidth; dc->w.CursPosY += physDev->cellHeight; } return TRUE; #else /* defined(HAVE_LIBCURSES) */ FIXME("(%p, %d, %d, 0x%08x, %p, %s, %d, %p): stub\n", dc, x, y, flags, lpRect, debugstr_wn(str,count), count, lpDx); return TRUE; #endif /* defined(HAVE_LIBCURSES) */ }