|  | /* | 
|  | * TTY DC driver | 
|  | * | 
|  | * Copyright 1999 Patrik Stridvall | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  | */ | 
|  |  | 
|  | #include "config.h" | 
|  |  | 
|  | #include "gdi.h" | 
|  | #include "ttydrv.h" | 
|  | #include "winbase.h" | 
|  | #include "wine/debug.h" | 
|  |  | 
|  | WINE_DEFAULT_DEBUG_CHANNEL(ttydrv); | 
|  |  | 
|  | /**********************************************************************/ | 
|  |  | 
|  | const DC_FUNCTIONS *TTYDRV_DC_Funcs = NULL;  /* hack */ | 
|  |  | 
|  | /********************************************************************** | 
|  | *	     TTYDRV_GDI_Initialize | 
|  | */ | 
|  | BOOL TTYDRV_GDI_Initialize(void) | 
|  | { | 
|  | return TTYDRV_PALETTE_Initialize(); | 
|  | } | 
|  |  | 
|  | /*********************************************************************** | 
|  | *	     TTYDRV_DC_CreateDC | 
|  | */ | 
|  | BOOL TTYDRV_DC_CreateDC(DC *dc, LPCSTR driver, LPCSTR device, | 
|  | LPCSTR output, const DEVMODEA *initData) | 
|  | { | 
|  | TTYDRV_PDEVICE *physDev; | 
|  |  | 
|  | TRACE("(%p, %s, %s, %s, %p)\n", | 
|  | dc, debugstr_a(driver), debugstr_a(device), | 
|  | debugstr_a(output), initData); | 
|  |  | 
|  | if (!TTYDRV_DC_Funcs) TTYDRV_DC_Funcs = dc->funcs;  /* hack */ | 
|  |  | 
|  | dc->physDev = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, | 
|  | sizeof(TTYDRV_PDEVICE)); | 
|  | if(!dc->physDev) { | 
|  | ERR("Can't allocate physDev\n"); | 
|  | return FALSE; | 
|  | } | 
|  | physDev = (TTYDRV_PDEVICE *) dc->physDev; | 
|  | physDev->hdc = dc->hSelf; | 
|  | physDev->dc = dc; | 
|  |  | 
|  | if(dc->flags & DC_MEMORY){ | 
|  | physDev->window = NULL; | 
|  | physDev->cellWidth = 1; | 
|  | physDev->cellHeight = 1; | 
|  |  | 
|  | TTYDRV_DC_CreateBitmap(dc->hBitmap); | 
|  | } else { | 
|  | physDev->window = root_window; | 
|  | physDev->cellWidth = cell_width; | 
|  | physDev->cellHeight = cell_height; | 
|  |  | 
|  | dc->bitsPerPixel = 1; | 
|  | } | 
|  |  | 
|  | return TRUE; | 
|  | } | 
|  |  | 
|  | /*********************************************************************** | 
|  | *	     TTYDRV_DC_DeleteDC | 
|  | */ | 
|  | BOOL TTYDRV_DC_DeleteDC(TTYDRV_PDEVICE *physDev) | 
|  | { | 
|  | TRACE("(%x)\n", physDev->hdc); | 
|  |  | 
|  | physDev->dc->physDev = NULL; | 
|  | HeapFree( GetProcessHeap(), 0, physDev ); | 
|  | return TRUE; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *           GetDeviceCaps    (TTYDRV.@) | 
|  | */ | 
|  | INT TTYDRV_GetDeviceCaps( TTYDRV_PDEVICE *physDev, INT cap ) | 
|  | { | 
|  | switch(cap) | 
|  | { | 
|  | case DRIVERVERSION: | 
|  | return 0x300; | 
|  | case TECHNOLOGY: | 
|  | return DT_RASDISPLAY; | 
|  | case HORZSIZE: | 
|  | return 0;    /* FIXME: Screen width in mm */ | 
|  | case VERTSIZE: | 
|  | return 0;    /* FIXME: Screen height in mm */ | 
|  | case HORZRES: | 
|  | return cell_width * screen_cols; | 
|  | case VERTRES: | 
|  | return cell_height * screen_rows; | 
|  | case BITSPIXEL: | 
|  | return 1;    /* FIXME */ | 
|  | case PLANES: | 
|  | return 1; | 
|  | case NUMBRUSHES: | 
|  | return 16 + 6; | 
|  | case NUMPENS: | 
|  | return 16; | 
|  | case NUMMARKERS: | 
|  | return 0; | 
|  | case NUMFONTS: | 
|  | return 0; | 
|  | case NUMCOLORS: | 
|  | return 100; | 
|  | case PDEVICESIZE: | 
|  | return sizeof(TTYDRV_PDEVICE); | 
|  | case CURVECAPS: | 
|  | return (CC_CIRCLES | CC_PIE | CC_CHORD | CC_ELLIPSES | CC_WIDE | | 
|  | CC_STYLED | CC_WIDESTYLED | CC_INTERIORS | CC_ROUNDRECT); | 
|  | case LINECAPS: | 
|  | return (LC_POLYLINE | LC_MARKER | LC_POLYMARKER | LC_WIDE | | 
|  | LC_STYLED | LC_WIDESTYLED | LC_INTERIORS); | 
|  | case POLYGONALCAPS: | 
|  | return (PC_POLYGON | PC_RECTANGLE | PC_WINDPOLYGON | | 
|  | PC_SCANLINE | PC_WIDE | PC_STYLED | PC_WIDESTYLED | PC_INTERIORS); | 
|  | case TEXTCAPS: | 
|  | return 0; | 
|  | case CLIPCAPS: | 
|  | return CP_REGION; | 
|  | case RASTERCAPS: | 
|  | return (RC_BITBLT | RC_BANDING | RC_SCALING | RC_BITMAP64 | RC_DI_BITMAP | | 
|  | RC_DIBTODEV | RC_BIGFONT | RC_STRETCHBLT | RC_STRETCHDIB | RC_DEVBITS); | 
|  | case ASPECTX: | 
|  | case ASPECTY: | 
|  | return 36; | 
|  | case ASPECTXY: | 
|  | return 51; | 
|  | case LOGPIXELSX: | 
|  | case LOGPIXELSY: | 
|  | return 72;  /* FIXME */ | 
|  | case SIZEPALETTE: | 
|  | return 256;  /* FIXME */ | 
|  | case NUMRESERVED: | 
|  | return 0; | 
|  | case COLORRES: | 
|  | return 0; | 
|  | case PHYSICALWIDTH: | 
|  | case PHYSICALHEIGHT: | 
|  | case PHYSICALOFFSETX: | 
|  | case PHYSICALOFFSETY: | 
|  | case SCALINGFACTORX: | 
|  | case SCALINGFACTORY: | 
|  | case VREFRESH: | 
|  | case DESKTOPVERTRES: | 
|  | case DESKTOPHORZRES: | 
|  | case BTLALIGNMENT: | 
|  | return 0; | 
|  | default: | 
|  | FIXME("(%04x): unsupported capability %d, will return 0\n", physDev->hdc, cap ); | 
|  | return 0; | 
|  | } | 
|  | } |