Changed the GDI driver interface to pass an opaque PHYSDEV pointer
instead of a DC structure.
Removed some direct accesses to the DC structure from the drivers.
Got rid the bitmap driver.
diff --git a/dlls/gdi/Makefile.in b/dlls/gdi/Makefile.in
index 69cc397..60afffa 100644
--- a/dlls/gdi/Makefile.in
+++ b/dlls/gdi/Makefile.in
@@ -27,12 +27,10 @@
mfdrv/objects.c \
mfdrv/text.c \
printdrv.c \
- win16drv/brush.c \
win16drv/font.c \
win16drv/graphics.c \
win16drv/init.c \
win16drv/objects.c \
- win16drv/pen.c \
win16drv/prtdrv.c \
win16drv/text.c \
wing.c
diff --git a/dlls/gdi/driver.c b/dlls/gdi/driver.c
index 5cbc3dc..244dcf5 100644
--- a/dlls/gdi/driver.c
+++ b/dlls/gdi/driver.c
@@ -96,6 +96,8 @@
GET_FUNC(FrameRgn);
GET_FUNC(GetCharWidth);
GET_FUNC(GetDCOrgEx);
+ GET_FUNC(GetDIBColorTable);
+ GET_FUNC(GetDIBits);
GET_FUNC(GetDeviceCaps);
GET_FUNC(GetDeviceGammaRamp);
GET_FUNC(GetPixel);
@@ -127,12 +129,17 @@
GET_FUNC(SaveDC);
GET_FUNC(ScaleViewportExt);
GET_FUNC(ScaleWindowExt);
+ GET_FUNC(SelectBitmap);
+ GET_FUNC(SelectBrush);
GET_FUNC(SelectClipPath);
GET_FUNC(SelectClipRgn);
- GET_FUNC(SelectObject);
+ GET_FUNC(SelectFont);
GET_FUNC(SelectPalette);
+ GET_FUNC(SelectPen);
GET_FUNC(SetBkColor);
GET_FUNC(SetBkMode);
+ GET_FUNC(SetDIBColorTable);
+ GET_FUNC(SetDIBits);
GET_FUNC(SetDIBitsToDevice);
GET_FUNC(SetDeviceClipping);
GET_FUNC(SetDeviceGammaRamp);
diff --git a/dlls/gdi/enhmfdrv/dc.c b/dlls/gdi/enhmfdrv/dc.c
index bfc5bf8..acf634e 100644
--- a/dlls/gdi/enhmfdrv/dc.c
+++ b/dlls/gdi/enhmfdrv/dc.c
@@ -23,78 +23,78 @@
WINE_DEFAULT_DEBUG_CHANNEL(enhmetafile);
-INT EMFDRV_SaveDC( DC *dc )
+INT EMFDRV_SaveDC( PHYSDEV dev )
{
EMRSAVEDC emr;
emr.emr.iType = EMR_SAVEDC;
emr.emr.nSize = sizeof(emr);
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_RestoreDC( DC *dc, INT level )
+BOOL EMFDRV_RestoreDC( PHYSDEV dev, INT level )
{
EMRRESTOREDC emr;
emr.emr.iType = EMR_RESTOREDC;
emr.emr.nSize = sizeof(emr);
emr.iRelative = level;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-UINT EMFDRV_SetTextAlign( DC *dc, UINT align )
+UINT EMFDRV_SetTextAlign( PHYSDEV dev, UINT align )
{
EMRSETTEXTALIGN emr;
emr.emr.iType = EMR_SETTEXTALIGN;
emr.emr.nSize = sizeof(emr);
emr.iMode = align;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_SetBkMode( DC *dc, INT mode )
+INT EMFDRV_SetBkMode( PHYSDEV dev, INT mode )
{
EMRSETBKMODE emr;
emr.emr.iType = EMR_SETBKMODE;
emr.emr.nSize = sizeof(emr);
emr.iMode = mode;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_SetROP2( DC *dc, INT rop )
+INT EMFDRV_SetROP2( PHYSDEV dev, INT rop )
{
EMRSETROP2 emr;
emr.emr.iType = EMR_SETROP2;
emr.emr.nSize = sizeof(emr);
emr.iMode = rop;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_SetPolyFillMode( DC *dc, INT mode )
+INT EMFDRV_SetPolyFillMode( PHYSDEV dev, INT mode )
{
EMRSETPOLYFILLMODE emr;
emr.emr.iType = EMR_SETPOLYFILLMODE;
emr.emr.nSize = sizeof(emr);
emr.iMode = mode;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_SetStretchBltMode( DC *dc, INT mode )
+INT EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode )
{
EMRSETSTRETCHBLTMODE emr;
emr.emr.iType = EMR_SETSTRETCHBLTMODE;
emr.emr.nSize = sizeof(emr);
emr.iMode = mode;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_SetMapMode( DC *dc, INT mode )
+INT EMFDRV_SetMapMode( PHYSDEV dev, INT mode )
{
EMRSETMAPMODE emr;
emr.emr.iType = EMR_SETMAPMODE;
emr.emr.nSize = sizeof(emr);
emr.iMode = mode;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_ExcludeClipRect( DC *dc, INT left, INT top, INT right, INT bottom )
+INT EMFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
{
EMREXCLUDECLIPRECT emr;
emr.emr.iType = EMR_EXCLUDECLIPRECT;
@@ -103,10 +103,10 @@
emr.rclClip.top = top;
emr.rclClip.right = right;
emr.rclClip.bottom = bottom;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_IntersectClipRect( DC *dc, INT left, INT top, INT right, INT bottom)
+INT EMFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom)
{
EMRINTERSECTCLIPRECT emr;
emr.emr.iType = EMR_INTERSECTCLIPRECT;
@@ -115,20 +115,20 @@
emr.rclClip.top = top;
emr.rclClip.right = right;
emr.rclClip.bottom = bottom;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_OffsetClipRgn( DC *dc, INT x, INT y )
+INT EMFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y )
{
EMROFFSETCLIPRGN emr;
emr.emr.iType = EMR_OFFSETCLIPRGN;
emr.emr.nSize = sizeof(emr);
emr.ptlOffset.x = x;
emr.ptlOffset.y = y;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-DWORD EMFDRV_SetMapperFlags( DC *dc, DWORD flags )
+DWORD EMFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags )
{
EMRSETMAPPERFLAGS emr;
@@ -136,50 +136,50 @@
emr.emr.nSize = sizeof(emr);
emr.dwFlags = flags;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_AbortPath( DC *dc )
+BOOL EMFDRV_AbortPath( PHYSDEV dev )
{
EMRABORTPATH emr;
emr.emr.iType = EMR_ABORTPATH;
emr.emr.nSize = sizeof(emr);
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_BeginPath( DC *dc )
+BOOL EMFDRV_BeginPath( PHYSDEV dev )
{
EMRBEGINPATH emr;
emr.emr.iType = EMR_BEGINPATH;
emr.emr.nSize = sizeof(emr);
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_CloseFigure( DC *dc )
+BOOL EMFDRV_CloseFigure( PHYSDEV dev )
{
EMRCLOSEFIGURE emr;
emr.emr.iType = EMR_CLOSEFIGURE;
emr.emr.nSize = sizeof(emr);
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_EndPath( DC *dc )
+BOOL EMFDRV_EndPath( PHYSDEV dev )
{
EMRENDPATH emr;
emr.emr.iType = EMR_ENDPATH;
emr.emr.nSize = sizeof(emr);
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_FillPath( DC *dc )
+BOOL EMFDRV_FillPath( PHYSDEV dev )
{
EMRFILLPATH emr;
@@ -190,20 +190,20 @@
emr.rclBounds.top = 0;
emr.rclBounds.right = 0;
emr.rclBounds.bottom = 0;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_FlattenPath( DC *dc )
+BOOL EMFDRV_FlattenPath( PHYSDEV dev )
{
EMRFLATTENPATH emr;
emr.emr.iType = EMR_FLATTENPATH;
emr.emr.nSize = sizeof(emr);
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_SelectClipPath( DC *dc, INT iMode )
+BOOL EMFDRV_SelectClipPath( PHYSDEV dev, INT iMode )
{
EMRSELECTCLIPPATH emr;
@@ -211,10 +211,10 @@
emr.emr.nSize = sizeof(emr);
emr.iMode = iMode;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_StrokeAndFillPath( DC *dc )
+BOOL EMFDRV_StrokeAndFillPath( PHYSDEV dev )
{
EMRSTROKEANDFILLPATH emr;
@@ -225,10 +225,10 @@
emr.rclBounds.top = 0;
emr.rclBounds.right = 0;
emr.rclBounds.bottom = 0;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_StrokePath( DC *dc )
+BOOL EMFDRV_StrokePath( PHYSDEV dev )
{
EMRSTROKEPATH emr;
@@ -239,15 +239,15 @@
emr.rclBounds.top = 0;
emr.rclBounds.right = 0;
emr.rclBounds.bottom = 0;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_WidenPath( DC *dc )
+BOOL EMFDRV_WidenPath( PHYSDEV dev )
{
EMRWIDENPATH emr;
emr.emr.iType = EMR_WIDENPATH;
emr.emr.nSize = sizeof(emr);
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
diff --git a/dlls/gdi/enhmfdrv/enhmetafiledrv.h b/dlls/gdi/enhmfdrv/enhmetafiledrv.h
index 334ff7c..4ab7f60 100644
--- a/dlls/gdi/enhmfdrv/enhmetafiledrv.h
+++ b/dlls/gdi/enhmfdrv/enhmetafiledrv.h
@@ -29,109 +29,114 @@
typedef struct
{
+ HDC hdc;
+ DC *dc;
ENHMETAHEADER *emh; /* Pointer to enhanced metafile header */
UINT nextHandle; /* Next handle number */
HFILE hFile; /* HFILE for disk based MetaFile */
} EMFDRV_PDEVICE;
-extern BOOL EMFDRV_WriteRecord( DC *dc, EMR *emr );
-extern int EMFDRV_AddHandleDC( DC *dc );
-extern void EMFDRV_UpdateBBox( DC *dc, RECTL *rect );
-extern DWORD EMFDRV_CreateBrushIndirect( DC *dc, HBRUSH hBrush );
+extern BOOL EMFDRV_WriteRecord( PHYSDEV dev, EMR *emr );
+extern int EMFDRV_AddHandleDC( PHYSDEV dev );
+extern void EMFDRV_UpdateBBox( PHYSDEV dev, RECTL *rect );
+extern DWORD EMFDRV_CreateBrushIndirect( PHYSDEV dev, HBRUSH hBrush );
/* Metafile driver functions */
-extern BOOL EMFDRV_AbortPath( DC *dc );
-extern BOOL EMFDRV_Arc( DC *dc, INT left, INT top, INT right,
- INT bottom, INT xstart, INT ystart, INT xend,
- INT yend );
-extern BOOL EMFDRV_BeginPath( DC *dc );
-extern BOOL EMFDRV_BitBlt( DC *dcDst, INT xDst, INT yDst,
- INT width, INT height, DC *dcSrc,
- INT xSrc, INT ySrc, DWORD rop );
-extern BOOL EMFDRV_Chord( DC *dc, INT left, INT top, INT right,
- INT bottom, INT xstart, INT ystart, INT xend,
- INT yend );
-extern BOOL EMFDRV_CloseFigure( DC *dc );
-extern BOOL EMFDRV_Ellipse( DC *dc, INT left, INT top,
- INT right, INT bottom );
-extern BOOL EMFDRV_EndPath( DC *dc );
-extern INT EMFDRV_ExcludeClipRect( DC *dc, INT left, INT top, INT right,
- INT bottom );
-extern BOOL EMFDRV_ExtFloodFill( DC *dc, INT x, INT y,
- COLORREF color, UINT fillType );
-extern BOOL EMFDRV_ExtTextOut( DC *dc, INT x, INT y,
- UINT flags, const RECT *lprect, LPCSTR str,
- UINT count, const INT *lpDx );
-extern BOOL EMFDRV_FillPath( DC *dc );
-extern BOOL EMFDRV_FillRgn( DC *dc, HRGN hrgn, HBRUSH hbrush );
-extern BOOL EMFDRV_FlattenPath( DC *dc );
-extern BOOL EMFDRV_FrameRgn( DC *dc, HRGN hrgn, HBRUSH hbrush, INT width,
- INT height );
-extern INT EMFDRV_IntersectClipRect( DC *dc, INT left, INT top, INT right,
- INT bottom );
-extern BOOL EMFDRV_InvertRgn( DC *dc, HRGN hrgn );
-extern BOOL EMFDRV_LineTo( DC *dc, INT x, INT y );
-extern BOOL EMFDRV_MoveTo( DC *dc, INT x, INT y );
-extern INT EMFDRV_OffsetClipRgn( DC *dc, INT x, INT y );
-extern BOOL EMFDRV_OffsetViewportOrg( DC *dc, INT x, INT y );
-extern BOOL EMFDRV_OffsetWindowOrg( DC *dc, INT x, INT y );
-extern BOOL EMFDRV_PaintRgn( DC *dc, HRGN hrgn );
-extern BOOL EMFDRV_PatBlt( DC *dc, INT left, INT top,
- INT width, INT height, DWORD rop );
-extern BOOL EMFDRV_Pie( DC *dc, INT left, INT top, INT right,
- INT bottom, INT xstart, INT ystart, INT xend,
- INT yend );
-extern BOOL EMFDRV_PolyPolygon( DC *dc, const POINT* pt,
- const INT* counts, UINT polys);
-extern BOOL EMFDRV_PolyPolyline( DC *dc, const POINT* pt,
- const DWORD* counts, DWORD polys);
-extern BOOL EMFDRV_Polygon( DC *dc, const POINT* pt, INT count );
-extern BOOL EMFDRV_Polyline( DC *dc, const POINT* pt,INT count);
-extern BOOL EMFDRV_Rectangle( DC *dc, INT left, INT top,
- INT right, INT bottom);
-extern BOOL EMFDRV_RestoreDC( DC *dc, INT level );
-extern BOOL EMFDRV_RoundRect( DC *dc, INT left, INT top,
- INT right, INT bottom, INT ell_width,
- INT ell_height );
-extern INT EMFDRV_SaveDC( DC *dc );
-extern BOOL EMFDRV_ScaleViewportExt( DC *dc, INT xNum,
- INT xDenom, INT yNum, INT yDenom );
-extern BOOL EMFDRV_ScaleWindowExt( DC *dc, INT xNum, INT xDenom,
- INT yNum, INT yDenom );
-extern BOOL EMFDRV_SelectClipPath( DC *dc, INT iMode );
-extern HGDIOBJ EMFDRV_SelectObject( DC *dc, HGDIOBJ handle );
-extern COLORREF EMFDRV_SetBkColor( DC *dc, COLORREF color );
-extern INT EMFDRV_SetBkMode( DC *dc, INT mode );
-extern INT EMFDRV_SetDIBitsToDevice( DC *dc, INT xDest, INT yDest,
- DWORD cx, DWORD cy, INT xSrc,
- INT ySrc, UINT startscan, UINT lines,
- LPCVOID bits, const BITMAPINFO *info,
- UINT coloruse );
-extern INT EMFDRV_SetMapMode( DC *dc, INT mode );
-extern DWORD EMFDRV_SetMapperFlags( DC *dc, DWORD flags );
-extern COLORREF EMFDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color );
-extern INT EMFDRV_SetPolyFillMode( DC *dc, INT mode );
-extern INT EMFDRV_SetROP2( DC *dc, INT rop );
-extern INT EMFDRV_SetStretchBltMode( DC *dc, INT mode );
-extern UINT EMFDRV_SetTextAlign( DC *dc, UINT align );
-extern COLORREF EMFDRV_SetTextColor( DC *dc, COLORREF color );
-extern BOOL EMFDRV_SetViewportExt( DC *dc, INT x, INT y );
-extern BOOL EMFDRV_SetViewportOrg( DC *dc, INT x, INT y );
-extern BOOL EMFDRV_SetWindowExt( DC *dc, INT x, INT y );
-extern BOOL EMFDRV_SetWindowOrg( DC *dc, INT x, INT y );
-extern BOOL EMFDRV_StretchBlt( DC *dcDst, INT xDst, INT yDst,
- INT widthDst, INT heightDst,
- DC *dcSrc, INT xSrc, INT ySrc,
- INT widthSrc, INT heightSrc, DWORD rop );
-extern INT EMFDRV_StretchDIBits( DC *dc, INT xDst, INT yDst, INT widthDst,
- INT heightDst, INT xSrc, INT ySrc,
- INT widthSrc, INT heightSrc,
- const void *bits, const BITMAPINFO *info,
- UINT wUsage, DWORD dwRop );
-extern BOOL EMFDRV_StrokeAndFillPath( DC *dc );
-extern BOOL EMFDRV_StrokePath( DC *dc );
-extern BOOL EMFDRV_WidenPath( DC *dc );
+extern BOOL EMFDRV_AbortPath( PHYSDEV dev );
+extern BOOL EMFDRV_Arc( PHYSDEV dev, INT left, INT top, INT right,
+ INT bottom, INT xstart, INT ystart, INT xend,
+ INT yend );
+extern BOOL EMFDRV_BeginPath( PHYSDEV dev );
+extern BOOL EMFDRV_BitBlt( PHYSDEV devDst, INT xDst, INT yDst,
+ INT width, INT height, PHYSDEV devSrc,
+ INT xSrc, INT ySrc, DWORD rop );
+extern BOOL EMFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right,
+ INT bottom, INT xstart, INT ystart, INT xend,
+ INT yend );
+extern BOOL EMFDRV_CloseFigure( PHYSDEV dev );
+extern BOOL EMFDRV_Ellipse( PHYSDEV dev, INT left, INT top,
+ INT right, INT bottom );
+extern BOOL EMFDRV_EndPath( PHYSDEV dev );
+extern INT EMFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right,
+ INT bottom );
+extern BOOL EMFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y,
+ COLORREF color, UINT fillType );
+extern BOOL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y,
+ UINT flags, const RECT *lprect, LPCSTR str,
+ UINT count, const INT *lpDx );
+extern BOOL EMFDRV_FillPath( PHYSDEV dev );
+extern BOOL EMFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush );
+extern BOOL EMFDRV_FlattenPath( PHYSDEV dev );
+extern BOOL EMFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT width,
+ INT height );
+extern INT EMFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right,
+ INT bottom );
+extern BOOL EMFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn );
+extern BOOL EMFDRV_LineTo( PHYSDEV dev, INT x, INT y );
+extern BOOL EMFDRV_MoveTo( PHYSDEV dev, INT x, INT y );
+extern INT EMFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y );
+extern BOOL EMFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y );
+extern BOOL EMFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y );
+extern BOOL EMFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn );
+extern BOOL EMFDRV_PatBlt( PHYSDEV dev, INT left, INT top,
+ INT width, INT height, DWORD rop );
+extern BOOL EMFDRV_Pie( PHYSDEV dev, INT left, INT top, INT right,
+ INT bottom, INT xstart, INT ystart, INT xend,
+ INT yend );
+extern BOOL EMFDRV_PolyPolygon( PHYSDEV dev, const POINT* pt,
+ const INT* counts, UINT polys);
+extern BOOL EMFDRV_PolyPolyline( PHYSDEV dev, const POINT* pt,
+ const DWORD* counts, DWORD polys);
+extern BOOL EMFDRV_Polygon( PHYSDEV dev, const POINT* pt, INT count );
+extern BOOL EMFDRV_Polyline( PHYSDEV dev, const POINT* pt,INT count);
+extern BOOL EMFDRV_Rectangle( PHYSDEV dev, INT left, INT top,
+ INT right, INT bottom);
+extern BOOL EMFDRV_RestoreDC( PHYSDEV dev, INT level );
+extern BOOL EMFDRV_RoundRect( PHYSDEV dev, INT left, INT top,
+ INT right, INT bottom, INT ell_width,
+ INT ell_height );
+extern INT EMFDRV_SaveDC( PHYSDEV dev );
+extern BOOL EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum,
+ INT xDenom, INT yNum, INT yDenom );
+extern BOOL EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom,
+ INT yNum, INT yDenom );
+extern HBITMAP EMFDRV_SelectBitmap( PHYSDEV dev, HBITMAP handle );
+extern HBRUSH EMFDRV_SelectBrush( PHYSDEV dev, HBRUSH handle );
+extern BOOL EMFDRV_SelectClipPath( PHYSDEV dev, INT iMode );
+extern HFONT EMFDRV_SelectFont( PHYSDEV dev, HFONT handle );
+extern HPEN EMFDRV_SelectPen( PHYSDEV dev, HPEN handle );
+extern COLORREF EMFDRV_SetBkColor( PHYSDEV dev, COLORREF color );
+extern INT EMFDRV_SetBkMode( PHYSDEV dev, INT mode );
+extern INT EMFDRV_SetDIBitsToDevice( PHYSDEV dev, INT xDest, INT yDest,
+ DWORD cx, DWORD cy, INT xSrc,
+ INT ySrc, UINT startscan, UINT lines,
+ LPCVOID bits, const BITMAPINFO *info,
+ UINT coloruse );
+extern INT EMFDRV_SetMapMode( PHYSDEV dev, INT mode );
+extern DWORD EMFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags );
+extern COLORREF EMFDRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color );
+extern INT EMFDRV_SetPolyFillMode( PHYSDEV dev, INT mode );
+extern INT EMFDRV_SetROP2( PHYSDEV dev, INT rop );
+extern INT EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode );
+extern UINT EMFDRV_SetTextAlign( PHYSDEV dev, UINT align );
+extern COLORREF EMFDRV_SetTextColor( PHYSDEV dev, COLORREF color );
+extern BOOL EMFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y );
+extern BOOL EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y );
+extern BOOL EMFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y );
+extern BOOL EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y );
+extern BOOL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst,
+ INT widthDst, INT heightDst,
+ PHYSDEV devSrc, INT xSrc, INT ySrc,
+ INT widthSrc, INT heightSrc, DWORD rop );
+extern INT EMFDRV_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst,
+ INT heightDst, INT xSrc, INT ySrc,
+ INT widthSrc, INT heightSrc,
+ const void *bits, const BITMAPINFO *info,
+ UINT wUsage, DWORD dwRop );
+extern BOOL EMFDRV_StrokeAndFillPath( PHYSDEV dev );
+extern BOOL EMFDRV_StrokePath( PHYSDEV dev );
+extern BOOL EMFDRV_WidenPath( PHYSDEV dev );
#endif /* __WINE_METAFILEDRV_H */
diff --git a/dlls/gdi/enhmfdrv/graphics.c b/dlls/gdi/enhmfdrv/graphics.c
index 52a3e0e..402beaa 100644
--- a/dlls/gdi/enhmfdrv/graphics.c
+++ b/dlls/gdi/enhmfdrv/graphics.c
@@ -31,7 +31,7 @@
* EMFDRV_MoveTo
*/
BOOL
-EMFDRV_MoveTo(DC *dc, INT x, INT y)
+EMFDRV_MoveTo(PHYSDEV dev, INT x, INT y)
{
EMRMOVETOEX emr;
@@ -40,24 +40,26 @@
emr.ptl.x = x;
emr.ptl.y = y;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
/***********************************************************************
* EMFDRV_LineTo
*/
BOOL
-EMFDRV_LineTo( DC *dc, INT x, INT y )
+EMFDRV_LineTo( PHYSDEV dev, INT x, INT y )
{
EMRLINETO emr;
RECTL bounds;
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
emr.emr.iType = EMR_LINETO;
emr.emr.nSize = sizeof(emr);
emr.ptl.x = x;
emr.ptl.y = y;
- if(!EMFDRV_WriteRecord( dc, &emr.emr ))
+ if(!EMFDRV_WriteRecord( dev, &emr.emr ))
return FALSE;
bounds.left = min(x, dc->CursPosX);
@@ -65,7 +67,7 @@
bounds.right = max(x, dc->CursPosX);
bounds.bottom = max(y, dc->CursPosY);
- EMFDRV_UpdateBBox( dc, &bounds );
+ EMFDRV_UpdateBBox( dev, &bounds );
return TRUE;
}
@@ -75,7 +77,7 @@
* EMFDRV_ArcChordPie
*/
static BOOL
-EMFDRV_ArcChordPie( DC *dc, INT left, INT top, INT right, INT bottom,
+EMFDRV_ArcChordPie( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend, DWORD iType )
{
INT temp, xCentre, yCentre, i;
@@ -83,6 +85,8 @@
double xinterStart, yinterStart, xinterEnd, yinterEnd;
EMRARC emr;
RECTL bounds;
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
if(left == right || top == bottom) return FALSE;
@@ -167,9 +171,9 @@
if(bounds.top > yCentre) bounds.top = yCentre;
else if(bounds.bottom < yCentre) bounds.right = yCentre;
}
- if(!EMFDRV_WriteRecord( dc, &emr.emr ))
+ if(!EMFDRV_WriteRecord( dev, &emr.emr ))
return FALSE;
- EMFDRV_UpdateBBox( dc, &bounds );
+ EMFDRV_UpdateBBox( dev, &bounds );
return TRUE;
}
@@ -178,10 +182,10 @@
* EMFDRV_Arc
*/
BOOL
-EMFDRV_Arc( DC *dc, INT left, INT top, INT right, INT bottom,
+EMFDRV_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend )
{
- return EMFDRV_ArcChordPie( dc, left, top, right, bottom, xstart, ystart,
+ return EMFDRV_ArcChordPie( dev, left, top, right, bottom, xstart, ystart,
xend, yend, EMR_ARC );
}
@@ -189,10 +193,10 @@
* EMFDRV_Pie
*/
BOOL
-EMFDRV_Pie( DC *dc, INT left, INT top, INT right, INT bottom,
+EMFDRV_Pie( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend )
{
- return EMFDRV_ArcChordPie( dc, left, top, right, bottom, xstart, ystart,
+ return EMFDRV_ArcChordPie( dev, left, top, right, bottom, xstart, ystart,
xend, yend, EMR_PIE );
}
@@ -201,10 +205,10 @@
* EMFDRV_Chord
*/
BOOL
-EMFDRV_Chord( DC *dc, INT left, INT top, INT right, INT bottom,
+EMFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend )
{
- return EMFDRV_ArcChordPie( dc, left, top, right, bottom, xstart, ystart,
+ return EMFDRV_ArcChordPie( dev, left, top, right, bottom, xstart, ystart,
xend, yend, EMR_CHORD );
}
@@ -212,10 +216,12 @@
* EMFDRV_Ellipse
*/
BOOL
-EMFDRV_Ellipse( DC *dc, INT left, INT top, INT right, INT bottom )
+EMFDRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
{
EMRELLIPSE emr;
INT temp;
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
TRACE("%d,%d - %d,%d\n", left, top, right, bottom);
@@ -236,18 +242,20 @@
emr.rclBox.right = right;
emr.rclBox.bottom = bottom;
- EMFDRV_UpdateBBox( dc, &emr.rclBox );
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ EMFDRV_UpdateBBox( dev, &emr.rclBox );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
/***********************************************************************
* EMFDRV_Rectangle
*/
BOOL
-EMFDRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
+EMFDRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
{
EMRRECTANGLE emr;
INT temp;
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
TRACE("%d,%d - %d,%d\n", left, top, right, bottom);
@@ -268,19 +276,21 @@
emr.rclBox.right = right;
emr.rclBox.bottom = bottom;
- EMFDRV_UpdateBBox( dc, &emr.rclBox );
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ EMFDRV_UpdateBBox( dev, &emr.rclBox );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
/***********************************************************************
* EMFDRV_RoundRect
*/
BOOL
-EMFDRV_RoundRect( DC *dc, INT left, INT top, INT right,
+EMFDRV_RoundRect( PHYSDEV dev, INT left, INT top, INT right,
INT bottom, INT ell_width, INT ell_height )
{
EMRROUNDRECT emr;
INT temp;
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
if(left == right || top == bottom) return FALSE;
@@ -301,15 +311,15 @@
emr.szlCorner.cx = ell_width;
emr.szlCorner.cy = ell_height;
- EMFDRV_UpdateBBox( dc, &emr.rclBox );
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ EMFDRV_UpdateBBox( dev, &emr.rclBox );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
/***********************************************************************
* EMFDRV_SetPixel
*/
COLORREF
-EMFDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color )
+EMFDRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color )
{
return TRUE;
}
@@ -321,7 +331,7 @@
* Helper for EMFDRV_Poly{line|gon}
*/
static BOOL
-EMFDRV_Polylinegon( DC *dc, const POINT* pt, INT count, DWORD iType )
+EMFDRV_Polylinegon( PHYSDEV dev, const POINT* pt, INT count, DWORD iType )
{
EMRPOLYLINE *emr;
DWORD size;
@@ -351,9 +361,9 @@
emr->cptl = count;
memcpy(emr->aptl, pt, count * sizeof(POINTL));
- ret = EMFDRV_WriteRecord( dc, &emr->emr );
+ ret = EMFDRV_WriteRecord( dev, &emr->emr );
if(ret)
- EMFDRV_UpdateBBox( dc, &emr->rclBounds );
+ EMFDRV_UpdateBBox( dev, &emr->rclBounds );
HeapFree( GetProcessHeap(), 0, emr );
return ret;
}
@@ -363,19 +373,19 @@
* EMFDRV_Polyline
*/
BOOL
-EMFDRV_Polyline( DC *dc, const POINT* pt, INT count )
+EMFDRV_Polyline( PHYSDEV dev, const POINT* pt, INT count )
{
- return EMFDRV_Polylinegon( dc, pt, count, EMR_POLYLINE );
+ return EMFDRV_Polylinegon( dev, pt, count, EMR_POLYLINE );
}
/**********************************************************************
* EMFDRV_Polygon
*/
BOOL
-EMFDRV_Polygon( DC *dc, const POINT* pt, INT count )
+EMFDRV_Polygon( PHYSDEV dev, const POINT* pt, INT count )
{
if(count < 2) return FALSE;
- return EMFDRV_Polylinegon( dc, pt, count, EMR_POLYGON );
+ return EMFDRV_Polylinegon( dev, pt, count, EMR_POLYGON );
}
@@ -385,7 +395,7 @@
* Helper for EMFDRV_PolyPoly{line|gon}
*/
static BOOL
-EMFDRV_PolyPolylinegon( DC *dc, const POINT* pt, const INT* counts, UINT polys,
+EMFDRV_PolyPolylinegon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polys,
DWORD iType)
{
EMRPOLYPOLYLINE *emr;
@@ -421,9 +431,9 @@
emr->cptl = cptl;
memcpy(emr->aPolyCounts, counts, polys * sizeof(DWORD));
memcpy(emr->aPolyCounts + polys, pt, cptl * sizeof(POINTL));
- ret = EMFDRV_WriteRecord( dc, &emr->emr );
+ ret = EMFDRV_WriteRecord( dev, &emr->emr );
if(ret)
- EMFDRV_UpdateBBox( dc, &emr->rclBounds );
+ EMFDRV_UpdateBBox( dev, &emr->rclBounds );
HeapFree( GetProcessHeap(), 0, emr );
return ret;
}
@@ -432,9 +442,9 @@
* EMFDRV_PolyPolyline
*/
BOOL
-EMFDRV_PolyPolyline(DC *dc, const POINT* pt, const DWORD* counts, DWORD polys)
+EMFDRV_PolyPolyline(PHYSDEV dev, const POINT* pt, const DWORD* counts, DWORD polys)
{
- return EMFDRV_PolyPolylinegon( dc, pt, (INT *)counts, polys,
+ return EMFDRV_PolyPolylinegon( dev, pt, (INT *)counts, polys,
EMR_POLYPOLYLINE );
}
@@ -442,9 +452,9 @@
* EMFDRV_PolyPolygon
*/
BOOL
-EMFDRV_PolyPolygon( DC *dc, const POINT* pt, const INT* counts, UINT polys )
+EMFDRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polys )
{
- return EMFDRV_PolyPolylinegon( dc, pt, counts, polys, EMR_POLYPOLYGON );
+ return EMFDRV_PolyPolylinegon( dev, pt, counts, polys, EMR_POLYPOLYGON );
}
@@ -452,7 +462,7 @@
* EMFDRV_ExtFloodFill
*/
BOOL
-EMFDRV_ExtFloodFill( DC *dc, INT x, INT y, COLORREF color, UINT fillType )
+EMFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType )
{
EMREXTFLOODFILL emr;
@@ -463,20 +473,20 @@
emr.crColor = color;
emr.iMode = fillType;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
/*********************************************************************
* EMFDRV_FillRgn
*/
-BOOL EMFDRV_FillRgn( DC *dc, HRGN hrgn, HBRUSH hbrush )
+BOOL EMFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush )
{
EMRFILLRGN *emr;
DWORD size, rgnsize, index;
BOOL ret;
- index = EMFDRV_CreateBrushIndirect( dc, hbrush );
+ index = EMFDRV_CreateBrushIndirect( dev, hbrush );
if(!index) return FALSE;
rgnsize = GetRegionData( hrgn, 0, NULL );
@@ -494,22 +504,22 @@
emr->cbRgnData = rgnsize;
emr->ihBrush = index;
- ret = EMFDRV_WriteRecord( dc, &emr->emr );
+ ret = EMFDRV_WriteRecord( dev, &emr->emr );
if(ret)
- EMFDRV_UpdateBBox( dc, &emr->rclBounds );
+ EMFDRV_UpdateBBox( dev, &emr->rclBounds );
HeapFree( GetProcessHeap(), 0, emr );
return ret;
}
/*********************************************************************
* EMFDRV_FrameRgn
*/
-BOOL EMFDRV_FrameRgn( DC *dc, HRGN hrgn, HBRUSH hbrush, INT width, INT height )
+BOOL EMFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT width, INT height )
{
EMRFRAMERGN *emr;
DWORD size, rgnsize, index;
BOOL ret;
- index = EMFDRV_CreateBrushIndirect( dc, hbrush );
+ index = EMFDRV_CreateBrushIndirect( dev, hbrush );
if(!index) return FALSE;
rgnsize = GetRegionData( hrgn, 0, NULL );
@@ -529,9 +539,9 @@
emr->szlStroke.cx = width;
emr->szlStroke.cy = height;
- ret = EMFDRV_WriteRecord( dc, &emr->emr );
+ ret = EMFDRV_WriteRecord( dev, &emr->emr );
if(ret)
- EMFDRV_UpdateBBox( dc, &emr->rclBounds );
+ EMFDRV_UpdateBBox( dev, &emr->rclBounds );
HeapFree( GetProcessHeap(), 0, emr );
return ret;
}
@@ -541,7 +551,7 @@
*
* Helper for EMFDRV_{Paint|Invert}Rgn
*/
-static BOOL EMFDRV_PaintInvertRgn( DC *dc, HRGN hrgn, DWORD iType )
+static BOOL EMFDRV_PaintInvertRgn( PHYSDEV dev, HRGN hrgn, DWORD iType )
{
EMRINVERTRGN *emr;
DWORD size, rgnsize;
@@ -562,9 +572,9 @@
emr->rclBounds.bottom = ((RGNDATA *)&emr->RgnData)->rdh.rcBound.bottom - 1;
emr->cbRgnData = rgnsize;
- ret = EMFDRV_WriteRecord( dc, &emr->emr );
+ ret = EMFDRV_WriteRecord( dev, &emr->emr );
if(ret)
- EMFDRV_UpdateBBox( dc, &emr->rclBounds );
+ EMFDRV_UpdateBBox( dev, &emr->rclBounds );
HeapFree( GetProcessHeap(), 0, emr );
return ret;
}
@@ -573,25 +583,25 @@
* EMFDRV_PaintRgn
*/
BOOL
-EMFDRV_PaintRgn( DC *dc, HRGN hrgn )
+EMFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn )
{
- return EMFDRV_PaintInvertRgn( dc, hrgn, EMR_PAINTRGN );
+ return EMFDRV_PaintInvertRgn( dev, hrgn, EMR_PAINTRGN );
}
/**********************************************************************
* EMFDRV_InvertRgn
*/
BOOL
-EMFDRV_InvertRgn( DC *dc, HRGN hrgn )
+EMFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn )
{
- return EMFDRV_PaintInvertRgn( dc, hrgn, EMR_INVERTRGN );
+ return EMFDRV_PaintInvertRgn( dev, hrgn, EMR_INVERTRGN );
}
/**********************************************************************
* EMFDRV_SetBkColor
*/
COLORREF
-EMFDRV_SetBkColor( DC *dc, COLORREF color )
+EMFDRV_SetBkColor( PHYSDEV dev, COLORREF color )
{
EMRSETBKCOLOR emr;
@@ -599,7 +609,7 @@
emr.emr.nSize = sizeof(emr);
emr.crColor = color;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr ) ? color : CLR_INVALID;
}
@@ -607,7 +617,7 @@
* EMFDRV_SetTextColor
*/
COLORREF
-EMFDRV_SetTextColor( DC *dc, COLORREF color )
+EMFDRV_SetTextColor( PHYSDEV dev, COLORREF color )
{
EMRSETTEXTCOLOR emr;
@@ -615,5 +625,5 @@
emr.emr.nSize = sizeof(emr);
emr.crColor = color;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr ) ? color : CLR_INVALID;
}
diff --git a/dlls/gdi/enhmfdrv/init.c b/dlls/gdi/enhmfdrv/init.c
index 41aa387..7bcbead 100644
--- a/dlls/gdi/enhmfdrv/init.c
+++ b/dlls/gdi/enhmfdrv/init.c
@@ -37,14 +37,14 @@
NULL, /* pArcTo */
EMFDRV_BeginPath, /* pBeginPath */
NULL, /* pBitBlt */
- NULL, /* pBitmapBits */
+ NULL, /* pBitmapBits */
NULL, /* pChoosePixelFormat */
EMFDRV_Chord, /* pChord */
EMFDRV_CloseFigure, /* pCloseFigure */
NULL, /* pCreateBitmap */
- NULL, /* no implementation */ /* pCreateDC */
+ NULL, /* pCreateDC */
NULL, /* pCreateDIBSection */
- NULL, /* no implementation */ /* pDeleteDC */
+ NULL, /* pDeleteDC */
NULL, /* pDeleteObject */
NULL, /* pDescribePixelFormat */
NULL, /* pDeviceCapabilities */
@@ -64,9 +64,11 @@
EMFDRV_FrameRgn, /* pFrameRgn */
NULL, /* pGetCharWidth */
NULL, /* pGetDCOrgEx */
+ NULL, /* pGetDIBColorTable */
+ NULL, /* pGetDIBits */
NULL, /* pGetDeviceCaps */
NULL, /* pGetDeviceGammaRamp */
- NULL, /* no implementation */ /* pGetPixel */
+ NULL, /* pGetPixel */
NULL, /* pGetPixelFormat */
NULL, /* pGetTextExtentPoint */
NULL, /* pGetTextMetrics */
@@ -95,15 +97,20 @@
EMFDRV_SaveDC, /* pSaveDC */
EMFDRV_ScaleViewportExt, /* pScaleViewportExt */
EMFDRV_ScaleWindowExt, /* pScaleWindowExt */
+ EMFDRV_SelectBitmap, /* pSelectBitmap */
+ EMFDRV_SelectBrush, /* pSelectBrush */
EMFDRV_SelectClipPath, /* pSelectClipPath */
NULL, /* pSelectClipRgn */
- EMFDRV_SelectObject, /* pSelectObject */
+ EMFDRV_SelectFont, /* pSelectFont */
NULL, /* pSelectPalette */
+ EMFDRV_SelectPen, /* pSelectPen */
EMFDRV_SetBkColor, /* pSetBkColor */
EMFDRV_SetBkMode, /* pSetBkMode */
+ NULL, /* pSetDIBColorTable */
+ NULL, /* pSetDIBits */
+ NULL, /* pSetDIBitsToDevice */
NULL, /* pSetDeviceClipping */
NULL, /* pSetDeviceGammaRamp */
- NULL, /* pSetDIBitsToDevice */
EMFDRV_SetMapMode, /* pSetMapMode */
EMFDRV_SetMapperFlags, /* pSetMapperFlags */
NULL, /* pSetPixel */
@@ -134,10 +141,11 @@
/**********************************************************************
* EMFDRV_DeleteDC
*/
-static BOOL EMFDRV_DeleteDC( DC *dc )
+static BOOL EMFDRV_DeleteDC( PHYSDEV dev )
{
- EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dc->physDev;
-
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
+
if (physDev->emh) HeapFree( GetProcessHeap(), 0, physDev->emh );
HeapFree( GetProcessHeap(), 0, physDev );
dc->physDev = NULL;
@@ -151,11 +159,11 @@
*
* Warning: this function can change the pointer to the metafile header.
*/
-BOOL EMFDRV_WriteRecord( DC *dc, EMR *emr )
+BOOL EMFDRV_WriteRecord( PHYSDEV dev, EMR *emr )
{
DWORD len;
ENHMETAHEADER *emh;
- EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dc->physDev;
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
physDev->emh->nBytes += emr->nSize;
physDev->emh->nRecords++;
@@ -179,9 +187,9 @@
/******************************************************************
* EMFDRV_UpdateBBox
*/
-void EMFDRV_UpdateBBox( DC *dc, RECTL *rect )
+void EMFDRV_UpdateBBox( PHYSDEV dev, RECTL *rect )
{
- EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dc->physDev;
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
RECTL *bounds = &physDev->emh->rclBounds;
if(bounds->left > bounds->right) {/* first rect */
@@ -202,9 +210,9 @@
* If we do someday, we'll need to maintain a table to re-use deleted
* handles.
*/
-int EMFDRV_AddHandleDC( DC *dc )
+int EMFDRV_AddHandleDC( PHYSDEV dev )
{
- EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dc->physDev;
+ EMFDRV_PDEVICE *physDev = (EMFDRV_PDEVICE *)dev;
physDev->emh->nHandles++;
return physDev->nextHandle++;
}
@@ -276,7 +284,9 @@
GDI_FreeObject( dc->hSelf, dc );
return 0;
}
- dc->physDev = physDev;
+ dc->physDev = (PHYSDEV)physDev;
+ physDev->hdc = dc->hSelf;
+ physDev->dc = dc;
if(description) { /* App name\0Title\0\0 */
length = lstrlenW(description);
@@ -338,11 +348,11 @@
{
if ((hFile = CreateFileW(filename, GENERIC_WRITE | GENERIC_READ, 0,
NULL, CREATE_ALWAYS, 0, 0)) == INVALID_HANDLE_VALUE) {
- EMFDRV_DeleteDC( dc );
+ EMFDRV_DeleteDC( dc->physDev );
return 0;
}
if (!WriteFile( hFile, (LPSTR)physDev->emh, size, NULL, NULL )) {
- EMFDRV_DeleteDC( dc );
+ EMFDRV_DeleteDC( dc->physDev );
return 0;
}
physDev->hFile = hFile;
@@ -379,7 +389,7 @@
emr.nPalEntries = 0;
emr.offPalEntries = 0;
emr.nSizeLast = emr.emr.nSize;
- EMFDRV_WriteRecord( dc, &emr.emr );
+ EMFDRV_WriteRecord( dc->physDev, &emr.emr );
/* Update rclFrame if not initialized in CreateEnhMetaFile */
if(physDev->emh->rclFrame.left > physDev->emh->rclFrame.right) {
@@ -398,7 +408,7 @@
if (SetFilePointer(physDev->hFile, 0, NULL, FILE_BEGIN) != 0)
{
CloseHandle( physDev->hFile );
- EMFDRV_DeleteDC( dc );
+ EMFDRV_DeleteDC( dc->physDev );
return 0;
}
@@ -406,7 +416,7 @@
sizeof(*physDev->emh), NULL, NULL))
{
CloseHandle( physDev->hFile );
- EMFDRV_DeleteDC( dc );
+ EMFDRV_DeleteDC( dc->physDev );
return 0;
}
HeapFree( GetProcessHeap(), 0, physDev->emh );
@@ -421,6 +431,6 @@
hmf = EMF_Create_HENHMETAFILE( physDev->emh, (physDev->hFile != 0) );
physDev->emh = NULL; /* So it won't be deleted */
- EMFDRV_DeleteDC( dc );
+ EMFDRV_DeleteDC( dc->physDev );
return hmf;
}
diff --git a/dlls/gdi/enhmfdrv/mapping.c b/dlls/gdi/enhmfdrv/mapping.c
index 0901e9b..d0fa5b0 100644
--- a/dlls/gdi/enhmfdrv/mapping.c
+++ b/dlls/gdi/enhmfdrv/mapping.c
@@ -20,7 +20,7 @@
#include "enhmfdrv/enhmetafiledrv.h"
-BOOL EMFDRV_SetViewportExt( DC *dc, INT cx, INT cy )
+BOOL EMFDRV_SetViewportExt( PHYSDEV dev, INT cx, INT cy )
{
EMRSETVIEWPORTEXTEX emr;
@@ -29,10 +29,10 @@
emr.szlExtent.cx = cx;
emr.szlExtent.cy = cy;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_SetWindowExt( DC *dc, INT cx, INT cy )
+BOOL EMFDRV_SetWindowExt( PHYSDEV dev, INT cx, INT cy )
{
EMRSETWINDOWEXTEX emr;
@@ -41,10 +41,10 @@
emr.szlExtent.cx = cx;
emr.szlExtent.cy = cy;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_SetViewportOrg( DC *dc, INT x, INT y )
+BOOL EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y )
{
EMRSETVIEWPORTORGEX emr;
@@ -53,10 +53,10 @@
emr.ptlOrigin.x = x;
emr.ptlOrigin.y = y;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_SetWindowOrg( DC *dc, INT x, INT y )
+BOOL EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y )
{
EMRSETWINDOWORGEX emr;
@@ -65,10 +65,10 @@
emr.ptlOrigin.x = x;
emr.ptlOrigin.y = y;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_ScaleViewportExt( DC *dc, INT xNum, INT xDenom, INT yNum,
+BOOL EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
INT yDenom )
{
EMRSCALEVIEWPORTEXTEX emr;
@@ -80,10 +80,10 @@
emr.yNum = yNum;
emr.yDenom = yDenom;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_ScaleWindowExt( DC *dc, INT xNum, INT xDenom, INT yNum,
+BOOL EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
INT yDenom )
{
EMRSCALEWINDOWEXTEX emr;
@@ -95,7 +95,7 @@
emr.yNum = yNum;
emr.yDenom = yDenom;
- return EMFDRV_WriteRecord( dc, &emr.emr );
+ return EMFDRV_WriteRecord( dev, &emr.emr );
}
diff --git a/dlls/gdi/enhmfdrv/objects.c b/dlls/gdi/enhmfdrv/objects.c
index e108cde..b516cc5 100644
--- a/dlls/gdi/enhmfdrv/objects.c
+++ b/dlls/gdi/enhmfdrv/objects.c
@@ -29,9 +29,9 @@
WINE_DEFAULT_DEBUG_CHANNEL(enhmetafile);
/***********************************************************************
- * EMFDRV_BITMAP_SelectObject
+ * EMFDRV_SelectBitmap
*/
-static HBITMAP EMFDRV_BITMAP_SelectObject( DC * dc, HBITMAP hbitmap )
+HBITMAP EMFDRV_SelectBitmap( PHYSDEV dev, HBITMAP hbitmap )
{
return 0;
}
@@ -40,7 +40,7 @@
/***********************************************************************
* EMFDRV_CreateBrushIndirect
*/
-DWORD EMFDRV_CreateBrushIndirect( DC *dc, HBRUSH hBrush )
+DWORD EMFDRV_CreateBrushIndirect( PHYSDEV dev, HBRUSH hBrush )
{
DWORD index = 0;
LOGBRUSH logbrush;
@@ -55,10 +55,10 @@
EMRCREATEBRUSHINDIRECT emr;
emr.emr.iType = EMR_CREATEBRUSHINDIRECT;
emr.emr.nSize = sizeof(emr);
- emr.ihBrush = index = EMFDRV_AddHandleDC( dc );
+ emr.ihBrush = index = EMFDRV_AddHandleDC( dev );
emr.lb = logbrush;
- if(!EMFDRV_WriteRecord( dc, &emr.emr ))
+ if(!EMFDRV_WriteRecord( dev, &emr.emr ))
index = 0;
}
break;
@@ -80,7 +80,7 @@
if(!emr) break;
emr->emr.iType = EMR_CREATEDIBPATTERNBRUSHPT;
emr->emr.nSize = size;
- emr->ihBrush = index = EMFDRV_AddHandleDC( dc );
+ emr->ihBrush = index = EMFDRV_AddHandleDC( dev );
emr->iUsage = LOWORD(logbrush.lbColor);
emr->offBmi = sizeof(EMRCREATEDIBPATTERNBRUSHPT);
emr->cbBmi = biSize;
@@ -88,7 +88,7 @@
memcpy((char *)emr + sizeof(EMRCREATEDIBPATTERNBRUSHPT), info,
biSize + bmSize );
- if(!EMFDRV_WriteRecord( dc, &emr->emr ))
+ if(!EMFDRV_WriteRecord( dev, &emr->emr ))
index = 0;
HeapFree( GetProcessHeap(), 0, emr );
GlobalUnlock16(logbrush.lbHatch);
@@ -108,13 +108,12 @@
/***********************************************************************
- * EMFDRV_BRUSH_SelectObject
+ * EMFDRV_SelectBrush
*/
-static HBRUSH EMFDRV_BRUSH_SelectObject(DC *dc, HBRUSH hBrush )
+HBRUSH EMFDRV_SelectBrush(PHYSDEV dev, HBRUSH hBrush )
{
EMRSELECTOBJECT emr;
DWORD index;
- HBRUSH hOldBrush;
int i;
/* If the object is a stock brush object, do not need to create it.
@@ -130,25 +129,20 @@
goto found;
}
}
- if (!(index = EMFDRV_CreateBrushIndirect(dc, hBrush ))) return 0;
+ if (!(index = EMFDRV_CreateBrushIndirect(dev, hBrush ))) return 0;
found:
emr.emr.iType = EMR_SELECTOBJECT;
emr.emr.nSize = sizeof(emr);
emr.ihObject = index;
- if(!EMFDRV_WriteRecord( dc, &emr.emr ))
- return FALSE;
-
- hOldBrush = dc->hBrush;
- dc->hBrush = hBrush;
- return hOldBrush;
+ return EMFDRV_WriteRecord( dev, &emr.emr ) ? hBrush : 0;
}
/******************************************************************
* EMFDRV_CreateFontIndirect
*/
-static BOOL EMFDRV_CreateFontIndirect(DC *dc, HFONT hFont )
+static BOOL EMFDRV_CreateFontIndirect(PHYSDEV dev, HFONT hFont )
{
DWORD index = 0;
EMREXTCREATEFONTINDIRECTW emr;
@@ -158,7 +152,7 @@
emr.emr.iType = EMR_EXTCREATEFONTINDIRECTW;
emr.emr.nSize = (sizeof(emr) + 3) / 4 * 4;
- emr.ihFont = index = EMFDRV_AddHandleDC( dc );
+ emr.ihFont = index = EMFDRV_AddHandleDC( dev );
emr.elfw.elfFullName[0] = '\0';
emr.elfw.elfStyle[0] = '\0';
emr.elfw.elfVersion = 0;
@@ -179,16 +173,16 @@
emr.elfw.elfPanose.bMidline = PAN_NO_FIT;
emr.elfw.elfPanose.bXHeight = PAN_NO_FIT;
- if(!EMFDRV_WriteRecord( dc, &emr.emr ))
+ if(!EMFDRV_WriteRecord( dev, &emr.emr ))
index = 0;
return index;
}
/***********************************************************************
- * EMFDRV_FONT_SelectObject
+ * EMFDRV_SelectFont
*/
-static HFONT EMFDRV_FONT_SelectObject( DC * dc, HFONT hFont )
+HFONT EMFDRV_SelectFont( PHYSDEV dev, HFONT hFont )
{
EMRSELECTOBJECT emr;
DWORD index;
@@ -208,15 +202,14 @@
goto found;
}
}
- if (!(index = EMFDRV_CreateFontIndirect(dc, hFont ))) return GDI_ERROR;
+ if (!(index = EMFDRV_CreateFontIndirect(dev, hFont ))) return GDI_ERROR;
found:
emr.emr.iType = EMR_SELECTOBJECT;
emr.emr.nSize = sizeof(emr);
emr.ihObject = index;
- if(!EMFDRV_WriteRecord( dc, &emr.emr ))
+ if(!EMFDRV_WriteRecord( dev, &emr.emr ))
return GDI_ERROR;
-
- return FALSE;
+ return 0;
}
@@ -224,7 +217,7 @@
/******************************************************************
* EMFDRV_CreatePenIndirect
*/
-static HPEN EMFDRV_CreatePenIndirect(DC *dc, HPEN hPen )
+static HPEN EMFDRV_CreatePenIndirect(PHYSDEV dev, HPEN hPen )
{
EMRCREATEPEN emr;
DWORD index = 0;
@@ -233,21 +226,20 @@
emr.emr.iType = EMR_CREATEPEN;
emr.emr.nSize = sizeof(emr);
- emr.ihPen = index = EMFDRV_AddHandleDC( dc );
+ emr.ihPen = index = EMFDRV_AddHandleDC( dev );
- if(!EMFDRV_WriteRecord( dc, &emr.emr ))
+ if(!EMFDRV_WriteRecord( dev, &emr.emr ))
index = 0;
return index;
}
/******************************************************************
- * EMFDRV_PEN_SelectObject
+ * EMFDRV_SelectPen
*/
-static HPEN EMFDRV_PEN_SelectObject(DC *dc, HPEN hPen )
+HPEN EMFDRV_SelectPen(PHYSDEV dev, HPEN hPen )
{
EMRSELECTOBJECT emr;
DWORD index;
- HPEN hOldPen;
int i;
/* If the object is a stock pen object, do not need to create it.
@@ -264,48 +256,10 @@
goto found;
}
}
- if (!(index = EMFDRV_CreatePenIndirect(dc, hPen ))) return 0;
+ if (!(index = EMFDRV_CreatePenIndirect(dev, hPen ))) return 0;
found:
emr.emr.iType = EMR_SELECTOBJECT;
emr.emr.nSize = sizeof(emr);
emr.ihObject = index;
- if(!EMFDRV_WriteRecord( dc, &emr.emr ))
- return FALSE;
-
- hOldPen = dc->hPen;
- dc->hPen = hPen;
- return hOldPen;
+ return EMFDRV_WriteRecord( dev, &emr.emr ) ? hPen : 0;
}
-
-
-/***********************************************************************
- * EMFDRV_SelectObject
- */
-HGDIOBJ EMFDRV_SelectObject( DC *dc, HGDIOBJ handle )
-{
- GDIOBJHDR * ptr = GDI_GetObjPtr( handle, MAGIC_DONTCARE );
- HGDIOBJ ret = 0;
-
- if (!ptr) return 0;
- TRACE("hdc=%04x %04x\n", dc->hSelf, handle );
-
- switch(GDIMAGIC(ptr->wMagic))
- {
- case PEN_MAGIC:
- ret = EMFDRV_PEN_SelectObject( dc, handle );
- break;
- case BRUSH_MAGIC:
- ret = EMFDRV_BRUSH_SelectObject( dc, handle );
- break;
- case FONT_MAGIC:
- ret = EMFDRV_FONT_SelectObject( dc, handle );
- break;
- case BITMAP_MAGIC:
- ret = EMFDRV_BITMAP_SelectObject( dc, handle );
- break;
- }
- GDI_ReleaseObj( handle );
- return ret;
-}
-
-
diff --git a/dlls/gdi/mfdrv/bitblt.c b/dlls/gdi/mfdrv/bitblt.c
index 89a7b6f..9c31a33 100644
--- a/dlls/gdi/mfdrv/bitblt.c
+++ b/dlls/gdi/mfdrv/bitblt.c
@@ -30,11 +30,9 @@
/***********************************************************************
* MFDRV_PatBlt
*/
-BOOL MFDRV_PatBlt( DC *dc, INT left, INT top,
- INT width, INT height, DWORD rop )
+BOOL MFDRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height, DWORD rop )
{
- MFDRV_MetaParam6( dc, META_PATBLT, left, top, width, height,
- HIWORD(rop), LOWORD(rop) );
+ MFDRV_MetaParam6( dev, META_PATBLT, left, top, width, height, HIWORD(rop), LOWORD(rop) );
return TRUE;
}
@@ -42,13 +40,15 @@
/***********************************************************************
* MFDRV_BitBlt
*/
-BOOL MFDRV_BitBlt( DC *dcDst, INT xDst, INT yDst, INT width, INT height,
- DC *dcSrc, INT xSrc, INT ySrc, DWORD rop )
+BOOL MFDRV_BitBlt( PHYSDEV devDst, INT xDst, INT yDst, INT width, INT height,
+ PHYSDEV devSrc, INT xSrc, INT ySrc, DWORD rop )
{
BOOL ret;
DWORD len;
METARECORD *mr;
BITMAP16 BM;
+ METAFILEDRV_PDEVICE *physDevSrc = (METAFILEDRV_PDEVICE *)devSrc;
+ DC *dcSrc = physDevSrc->dc;
GetObject16(dcSrc->hBitmap, sizeof(BITMAP16), &BM);
len = sizeof(METARECORD) + 12 * sizeof(INT16) + BM.bmWidthBytes * BM.bmHeight;
@@ -72,7 +72,7 @@
*(mr->rdParm + 4) = width;
*(mr->rdParm + 5) = yDst;
*(mr->rdParm + 6) = xDst;
- ret = MFDRV_WriteRecord( dcDst, mr, mr->rdSize * 2);
+ ret = MFDRV_WriteRecord( devDst, mr, mr->rdSize * 2);
}
else
ret = FALSE;
@@ -91,14 +91,16 @@
#define STRETCH_VIA_DIB
#undef STRETCH_VIA_DIB
-BOOL MFDRV_StretchBlt( DC *dcDst, INT xDst, INT yDst, INT widthDst,
- INT heightDst, DC *dcSrc, INT xSrc, INT ySrc,
+BOOL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
+ INT heightDst, PHYSDEV devSrc, INT xSrc, INT ySrc,
INT widthSrc, INT heightSrc, DWORD rop )
{
BOOL ret;
DWORD len;
METARECORD *mr;
BITMAP16 BM;
+ METAFILEDRV_PDEVICE *physDevSrc = (METAFILEDRV_PDEVICE *)devSrc;
+ DC *dcSrc = physDevSrc->dc;
#ifdef STRETCH_VIA_DIB
LPBITMAPINFOHEADER lpBMI;
WORD nBPP;
@@ -157,7 +159,7 @@
*(mr->rdParm + 7) = widthDst;
*(mr->rdParm + 8) = yDst;
*(mr->rdParm + 9) = xDst;
- ret = MFDRV_WriteRecord( dcDst, mr, mr->rdSize * 2);
+ ret = MFDRV_WriteRecord( devDst, mr, mr->rdSize * 2);
}
else
ret = FALSE;
@@ -169,7 +171,7 @@
/***********************************************************************
* MFDRV_StretchDIBits
*/
-INT MFDRV_StretchDIBits( DC *dc, INT xDst, INT yDst, INT widthDst,
+INT MFDRV_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst,
INT heightDst, INT xSrc, INT ySrc, INT widthSrc,
INT heightSrc, const void *bits,
const BITMAPINFO *info, UINT wUsage, DWORD dwRop )
@@ -201,7 +203,7 @@
mr->rdParm[10] = (INT16)xDst;
memcpy(mr->rdParm + 11, info, infosize);
memcpy(mr->rdParm + 11 + infosize / 2, bits, imagesize);
- MFDRV_WriteRecord( dc, mr, mr->rdSize * 2 );
+ MFDRV_WriteRecord( dev, mr, mr->rdSize * 2 );
HeapFree( GetProcessHeap(), 0, mr );
return heightSrc;
}
@@ -210,7 +212,7 @@
/***********************************************************************
* MFDRV_SetDIBitsToDeivce
*/
-INT MFDRV_SetDIBitsToDevice( DC *dc, INT xDst, INT yDst, DWORD cx,
+INT MFDRV_SetDIBitsToDevice( PHYSDEV dev, INT xDst, INT yDst, DWORD cx,
DWORD cy, INT xSrc, INT ySrc, UINT startscan,
UINT lines, LPCVOID bits, const BITMAPINFO *info,
UINT coloruse )
@@ -241,7 +243,7 @@
mr->rdParm[8] = (INT16)xDst;
memcpy(mr->rdParm + 9, info, infosize);
memcpy(mr->rdParm + 9 + infosize / 2, bits, imagesize);
- MFDRV_WriteRecord( dc, mr, mr->rdSize * 2 );
+ MFDRV_WriteRecord( dev, mr, mr->rdSize * 2 );
HeapFree( GetProcessHeap(), 0, mr );
return lines;
}
diff --git a/dlls/gdi/mfdrv/dc.c b/dlls/gdi/mfdrv/dc.c
index 74fb1c5..0d2b4f5 100644
--- a/dlls/gdi/mfdrv/dc.c
+++ b/dlls/gdi/mfdrv/dc.c
@@ -20,126 +20,126 @@
#include "mfdrv/metafiledrv.h"
-INT MFDRV_SaveDC( DC *dc )
+INT MFDRV_SaveDC( PHYSDEV dev )
{
- return MFDRV_MetaParam0( dc, META_SAVEDC );
+ return MFDRV_MetaParam0( dev, META_SAVEDC );
}
-BOOL MFDRV_RestoreDC( DC *dc, INT level )
+BOOL MFDRV_RestoreDC( PHYSDEV dev, INT level )
{
if(level != -1) return FALSE;
- return MFDRV_MetaParam1( dc, META_RESTOREDC, level );
+ return MFDRV_MetaParam1( dev, META_RESTOREDC, level );
}
-UINT MFDRV_SetTextAlign( DC *dc, UINT align )
+UINT MFDRV_SetTextAlign( PHYSDEV dev, UINT align )
{
- return MFDRV_MetaParam1( dc, META_SETTEXTALIGN, (WORD)align);
+ return MFDRV_MetaParam1( dev, META_SETTEXTALIGN, (WORD)align);
}
-INT MFDRV_SetBkMode( DC *dc, INT mode )
+INT MFDRV_SetBkMode( PHYSDEV dev, INT mode )
{
- return MFDRV_MetaParam1( dc, META_SETBKMODE, (WORD)mode);
+ return MFDRV_MetaParam1( dev, META_SETBKMODE, (WORD)mode);
}
-INT MFDRV_SetROP2( DC *dc, INT rop )
+INT MFDRV_SetROP2( PHYSDEV dev, INT rop )
{
- return MFDRV_MetaParam1( dc, META_SETROP2, (WORD)rop);
+ return MFDRV_MetaParam1( dev, META_SETROP2, (WORD)rop);
}
-INT MFDRV_SetRelAbs( DC *dc, INT mode )
+INT MFDRV_SetRelAbs( PHYSDEV dev, INT mode )
{
- return MFDRV_MetaParam1( dc, META_SETRELABS, (WORD)mode);
+ return MFDRV_MetaParam1( dev, META_SETRELABS, (WORD)mode);
}
-INT MFDRV_SetPolyFillMode( DC *dc, INT mode )
+INT MFDRV_SetPolyFillMode( PHYSDEV dev, INT mode )
{
- return MFDRV_MetaParam1( dc, META_SETPOLYFILLMODE, (WORD)mode);
+ return MFDRV_MetaParam1( dev, META_SETPOLYFILLMODE, (WORD)mode);
}
-INT MFDRV_SetStretchBltMode( DC *dc, INT mode )
+INT MFDRV_SetStretchBltMode( PHYSDEV dev, INT mode )
{
- return MFDRV_MetaParam1( dc, META_SETSTRETCHBLTMODE, (WORD)mode);
+ return MFDRV_MetaParam1( dev, META_SETSTRETCHBLTMODE, (WORD)mode);
}
-INT MFDRV_IntersectClipRect( DC *dc, INT left, INT top, INT right, INT bottom )
+INT MFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
{
- return MFDRV_MetaParam4( dc, META_INTERSECTCLIPRECT, left, top, right,
+ return MFDRV_MetaParam4( dev, META_INTERSECTCLIPRECT, left, top, right,
bottom );
}
-INT MFDRV_ExcludeClipRect( DC *dc, INT left, INT top, INT right, INT bottom )
+INT MFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
{
- return MFDRV_MetaParam4( dc, META_EXCLUDECLIPRECT, left, top, right,
+ return MFDRV_MetaParam4( dev, META_EXCLUDECLIPRECT, left, top, right,
bottom );
}
-INT MFDRV_OffsetClipRgn( DC *dc, INT x, INT y )
+INT MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y )
{
- return MFDRV_MetaParam2( dc, META_OFFSETCLIPRGN, x, y );
+ return MFDRV_MetaParam2( dev, META_OFFSETCLIPRGN, x, y );
}
-INT MFDRV_SetTextJustification( DC *dc, INT extra, INT breaks )
+INT MFDRV_SetTextJustification( PHYSDEV dev, INT extra, INT breaks )
{
- return MFDRV_MetaParam2( dc, META_SETTEXTJUSTIFICATION, extra, breaks );
+ return MFDRV_MetaParam2( dev, META_SETTEXTJUSTIFICATION, extra, breaks );
}
-INT MFDRV_SetTextCharacterExtra( DC *dc, INT extra )
+INT MFDRV_SetTextCharacterExtra( PHYSDEV dev, INT extra )
{
- return MFDRV_MetaParam1( dc, META_SETTEXTCHAREXTRA, extra );
+ return MFDRV_MetaParam1( dev, META_SETTEXTCHAREXTRA, extra );
}
-DWORD MFDRV_SetMapperFlags( DC *dc, DWORD flags )
+DWORD MFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags )
{
- return MFDRV_MetaParam2( dc, META_SETMAPPERFLAGS, HIWORD(flags),
+ return MFDRV_MetaParam2( dev, META_SETMAPPERFLAGS, HIWORD(flags),
LOWORD(flags) );
}
-BOOL MFDRV_AbortPath( DC *dc )
+BOOL MFDRV_AbortPath( PHYSDEV dev )
{
return FALSE;
}
-BOOL MFDRV_BeginPath( DC *dc )
+BOOL MFDRV_BeginPath( PHYSDEV dev )
{
return FALSE;
}
-BOOL MFDRV_CloseFigure( DC *dc )
+BOOL MFDRV_CloseFigure( PHYSDEV dev )
{
return FALSE;
}
-BOOL MFDRV_EndPath( DC *dc )
+BOOL MFDRV_EndPath( PHYSDEV dev )
{
return FALSE;
}
-BOOL MFDRV_FillPath( DC *dc )
+BOOL MFDRV_FillPath( PHYSDEV dev )
{
return FALSE;
}
-BOOL MFDRV_FlattenPath( DC *dc )
+BOOL MFDRV_FlattenPath( PHYSDEV dev )
{
return FALSE;
}
-BOOL MFDRV_SelectClipPath( DC *dc, INT iMode )
+BOOL MFDRV_SelectClipPath( PHYSDEV dev, INT iMode )
{
return FALSE;
}
-BOOL MFDRV_StrokeAndFillPath( DC *dc )
+BOOL MFDRV_StrokeAndFillPath( PHYSDEV dev )
{
return FALSE;
}
-BOOL MFDRV_StrokePath( DC *dc )
+BOOL MFDRV_StrokePath( PHYSDEV dev )
{
return FALSE;
}
-BOOL MFDRV_WidenPath( DC *dc )
+BOOL MFDRV_WidenPath( PHYSDEV dev )
{
return FALSE;
}
diff --git a/dlls/gdi/mfdrv/graphics.c b/dlls/gdi/mfdrv/graphics.c
index 189a07b..4c6babe 100644
--- a/dlls/gdi/mfdrv/graphics.c
+++ b/dlls/gdi/mfdrv/graphics.c
@@ -32,18 +32,18 @@
* MFDRV_MoveTo
*/
BOOL
-MFDRV_MoveTo(DC *dc, INT x, INT y)
+MFDRV_MoveTo(PHYSDEV dev, INT x, INT y)
{
- return MFDRV_MetaParam2(dc,META_MOVETO,x,y);
+ return MFDRV_MetaParam2(dev,META_MOVETO,x,y);
}
/***********************************************************************
* MFDRV_LineTo
*/
BOOL
-MFDRV_LineTo( DC *dc, INT x, INT y )
+MFDRV_LineTo( PHYSDEV dev, INT x, INT y )
{
- return MFDRV_MetaParam2(dc, META_LINETO, x, y);
+ return MFDRV_MetaParam2(dev, META_LINETO, x, y);
}
@@ -51,10 +51,10 @@
* MFDRV_Arc
*/
BOOL
-MFDRV_Arc( DC *dc, INT left, INT top, INT right, INT bottom,
+MFDRV_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend )
{
- return MFDRV_MetaParam8(dc, META_ARC, left, top, right, bottom,
+ return MFDRV_MetaParam8(dev, META_ARC, left, top, right, bottom,
xstart, ystart, xend, yend);
}
@@ -63,10 +63,10 @@
* MFDRV_Pie
*/
BOOL
-MFDRV_Pie( DC *dc, INT left, INT top, INT right, INT bottom,
+MFDRV_Pie( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend )
{
- return MFDRV_MetaParam8(dc, META_PIE, left, top, right, bottom,
+ return MFDRV_MetaParam8(dev, META_PIE, left, top, right, bottom,
xstart, ystart, xend, yend);
}
@@ -75,10 +75,10 @@
* MFDRV_Chord
*/
BOOL
-MFDRV_Chord( DC *dc, INT left, INT top, INT right, INT bottom,
+MFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend )
{
- return MFDRV_MetaParam8(dc, META_CHORD, left, top, right, bottom,
+ return MFDRV_MetaParam8(dev, META_CHORD, left, top, right, bottom,
xstart, ystart, xend, yend);
}
@@ -86,28 +86,28 @@
* MFDRV_Ellipse
*/
BOOL
-MFDRV_Ellipse( DC *dc, INT left, INT top, INT right, INT bottom )
+MFDRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
{
- return MFDRV_MetaParam4(dc, META_ELLIPSE, left, top, right, bottom);
+ return MFDRV_MetaParam4(dev, META_ELLIPSE, left, top, right, bottom);
}
/***********************************************************************
* MFDRV_Rectangle
*/
BOOL
-MFDRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
+MFDRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
{
- return MFDRV_MetaParam4(dc, META_RECTANGLE, left, top, right, bottom);
+ return MFDRV_MetaParam4(dev, META_RECTANGLE, left, top, right, bottom);
}
/***********************************************************************
* MFDRV_RoundRect
*/
BOOL
-MFDRV_RoundRect( DC *dc, INT left, INT top, INT right,
+MFDRV_RoundRect( PHYSDEV dev, INT left, INT top, INT right,
INT bottom, INT ell_width, INT ell_height )
{
- return MFDRV_MetaParam6(dc, META_ROUNDRECT, left, top, right, bottom,
+ return MFDRV_MetaParam6(dev, META_ROUNDRECT, left, top, right, bottom,
ell_width, ell_height);
}
@@ -115,9 +115,9 @@
* MFDRV_SetPixel
*/
COLORREF
-MFDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color )
+MFDRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color )
{
- return MFDRV_MetaParam4(dc, META_SETPIXEL, x, y,HIWORD(color),
+ return MFDRV_MetaParam4(dev, META_SETPIXEL, x, y,HIWORD(color),
LOWORD(color));
}
@@ -125,7 +125,7 @@
/******************************************************************
* MFDRV_MetaPoly - implements Polygon and Polyline
*/
-static BOOL MFDRV_MetaPoly(DC *dc, short func, LPPOINT16 pt, short count)
+static BOOL MFDRV_MetaPoly(PHYSDEV dev, short func, LPPOINT16 pt, short count)
{
BOOL ret;
DWORD len;
@@ -139,7 +139,7 @@
mr->rdFunction = func;
*(mr->rdParm) = count;
memcpy(mr->rdParm + 1, pt, count * 4);
- ret = MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ ret = MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
HeapFree( GetProcessHeap(), 0, mr);
return ret;
}
@@ -149,7 +149,7 @@
* MFDRV_Polyline
*/
BOOL
-MFDRV_Polyline( DC *dc, const POINT* pt, INT count )
+MFDRV_Polyline( PHYSDEV dev, const POINT* pt, INT count )
{
register int i;
LPPOINT16 pt16;
@@ -158,7 +158,7 @@
pt16 = (LPPOINT16)HeapAlloc( GetProcessHeap(), 0, sizeof(POINT16)*count );
if(!pt16) return FALSE;
for (i=count;i--;) CONV_POINT32TO16(&(pt[i]),&(pt16[i]));
- ret = MFDRV_MetaPoly(dc, META_POLYLINE, pt16, count);
+ ret = MFDRV_MetaPoly(dev, META_POLYLINE, pt16, count);
HeapFree( GetProcessHeap(), 0, pt16 );
return ret;
@@ -169,7 +169,7 @@
* MFDRV_Polygon
*/
BOOL
-MFDRV_Polygon( DC *dc, const POINT* pt, INT count )
+MFDRV_Polygon( PHYSDEV dev, const POINT* pt, INT count )
{
register int i;
LPPOINT16 pt16;
@@ -178,7 +178,7 @@
pt16 = (LPPOINT16) HeapAlloc( GetProcessHeap(), 0, sizeof(POINT16)*count );
if(!pt16) return FALSE;
for (i=count;i--;) CONV_POINT32TO16(&(pt[i]),&(pt16[i]));
- ret = MFDRV_MetaPoly(dc, META_POLYGON, pt16, count);
+ ret = MFDRV_MetaPoly(dev, META_POLYGON, pt16, count);
HeapFree( GetProcessHeap(), 0, pt16 );
return ret;
@@ -189,7 +189,7 @@
* MFDRV_PolyPolygon
*/
BOOL
-MFDRV_PolyPolygon( DC *dc, const POINT* pt, const INT* counts, UINT polygons)
+MFDRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polygons)
{
int i,j;
LPPOINT16 pt16;
@@ -201,7 +201,7 @@
sizeof(POINT16) * counts[i] );
if(!pt16) return FALSE;
for (j=counts[i];j--;) CONV_POINT32TO16(&(curpt[j]),&(pt16[j]));
- ret = MFDRV_MetaPoly(dc, META_POLYGON, pt16, counts[i]);
+ ret = MFDRV_MetaPoly(dev, META_POLYGON, pt16, counts[i]);
HeapFree( GetProcessHeap(), 0, pt16 );
if (!ret)
return FALSE;
@@ -215,9 +215,9 @@
* MFDRV_ExtFloodFill
*/
BOOL
-MFDRV_ExtFloodFill( DC *dc, INT x, INT y, COLORREF color, UINT fillType )
+MFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType )
{
- return MFDRV_MetaParam4(dc,META_FLOODFILL,x,y,HIWORD(color),
+ return MFDRV_MetaParam4(dev,META_FLOODFILL,x,y,HIWORD(color),
LOWORD(color));
}
@@ -228,7 +228,7 @@
* For explanation of the format of the record see MF_Play_MetaCreateRegion in
* objects/metafile.c
*/
-static INT16 MFDRV_CreateRegion(DC *dc, HRGN hrgn)
+static INT16 MFDRV_CreateRegion(PHYSDEV dev, HRGN hrgn)
{
DWORD len;
METARECORD *mr;
@@ -298,7 +298,7 @@
mr->rdParm[10] = rgndata->rdh.rcBound.bottom;
mr->rdFunction = META_CREATEREGION;
mr->rdSize = len / 2;
- ret = MFDRV_WriteRecord( dc, mr, mr->rdSize * 2 );
+ ret = MFDRV_WriteRecord( dev, mr, mr->rdSize * 2 );
HeapFree( GetProcessHeap(), 0, mr );
HeapFree( GetProcessHeap(), 0, rgndata );
if(!ret)
@@ -306,7 +306,7 @@
WARN("MFDRV_WriteRecord failed\n");
return -1;
}
- return MFDRV_AddHandleDC( dc );
+ return MFDRV_AddHandleDC( dev );
}
@@ -314,13 +314,13 @@
* MFDRV_PaintRgn
*/
BOOL
-MFDRV_PaintRgn( DC *dc, HRGN hrgn )
+MFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn )
{
INT16 index;
- index = MFDRV_CreateRegion( dc, hrgn );
+ index = MFDRV_CreateRegion( dev, hrgn );
if(index == -1)
return FALSE;
- return MFDRV_MetaParam1( dc, META_PAINTREGION, index );
+ return MFDRV_MetaParam1( dev, META_PAINTREGION, index );
}
@@ -328,13 +328,13 @@
* MFDRV_InvertRgn
*/
BOOL
-MFDRV_InvertRgn( DC *dc, HRGN hrgn )
+MFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn )
{
INT16 index;
- index = MFDRV_CreateRegion( dc, hrgn );
+ index = MFDRV_CreateRegion( dev, hrgn );
if(index == -1)
return FALSE;
- return MFDRV_MetaParam1( dc, META_INVERTREGION, index );
+ return MFDRV_MetaParam1( dev, META_INVERTREGION, index );
}
@@ -342,32 +342,32 @@
* MFDRV_FillRgn
*/
BOOL
-MFDRV_FillRgn( DC *dc, HRGN hrgn, HBRUSH hbrush )
+MFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush )
{
INT16 iRgn, iBrush;
- iRgn = MFDRV_CreateRegion( dc, hrgn );
+ iRgn = MFDRV_CreateRegion( dev, hrgn );
if(iRgn == -1)
return FALSE;
- iBrush = MFDRV_CreateBrushIndirect( dc, hbrush );
+ iBrush = MFDRV_CreateBrushIndirect( dev, hbrush );
if(iBrush == -1)
return FALSE;
- return MFDRV_MetaParam2( dc, META_FILLREGION, iRgn, iBrush );
+ return MFDRV_MetaParam2( dev, META_FILLREGION, iRgn, iBrush );
}
/**********************************************************************
* MFDRV_FrameRgn
*/
BOOL
-MFDRV_FrameRgn( DC *dc, HRGN hrgn, HBRUSH hbrush, INT x, INT y )
+MFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT x, INT y )
{
INT16 iRgn, iBrush;
- iRgn = MFDRV_CreateRegion( dc, hrgn );
+ iRgn = MFDRV_CreateRegion( dev, hrgn );
if(iRgn == -1)
return FALSE;
- iBrush = MFDRV_CreateBrushIndirect( dc, hbrush );
+ iBrush = MFDRV_CreateBrushIndirect( dev, hbrush );
if(iBrush == -1)
return FALSE;
- return MFDRV_MetaParam4( dc, META_FRAMEREGION, iRgn, iBrush, x, y );
+ return MFDRV_MetaParam4( dev, META_FRAMEREGION, iRgn, iBrush, x, y );
}
@@ -375,9 +375,10 @@
* MFDRV_SetBkColor
*/
COLORREF
-MFDRV_SetBkColor( DC *dc, COLORREF color )
+MFDRV_SetBkColor( PHYSDEV dev, COLORREF color )
{
- return MFDRV_MetaParam2(dc, META_SETBKCOLOR, HIWORD(color), LOWORD(color));
+ return MFDRV_MetaParam2(dev, META_SETBKCOLOR, HIWORD(color),
+ LOWORD(color)) ? color : CLR_INVALID;
}
@@ -385,10 +386,10 @@
* MFDRV_SetTextColor
*/
COLORREF
-MFDRV_SetTextColor( DC *dc, COLORREF color )
+MFDRV_SetTextColor( PHYSDEV dev, COLORREF color )
{
- return MFDRV_MetaParam2(dc, META_SETTEXTCOLOR, HIWORD(color),
- LOWORD(color));
+ return MFDRV_MetaParam2(dev, META_SETTEXTCOLOR, HIWORD(color),
+ LOWORD(color)) ? color : CLR_INVALID;
}
@@ -398,7 +399,7 @@
* approximations to them using lines, we need this stub function.
*/
BOOL
-MFDRV_PolyBezier( DC *dc, const POINT *pts, DWORD count )
+MFDRV_PolyBezier( PHYSDEV dev, const POINT *pts, DWORD count )
{
return FALSE;
}
@@ -409,7 +410,7 @@
* approximations to them using lines, we need this stub function.
*/
BOOL
-MFDRV_PolyBezierTo( DC *dc, const POINT *pts, DWORD count )
+MFDRV_PolyBezierTo( PHYSDEV dev, const POINT *pts, DWORD count )
{
return FALSE;
}
diff --git a/dlls/gdi/mfdrv/init.c b/dlls/gdi/mfdrv/init.c
index e42aead..0167305 100644
--- a/dlls/gdi/mfdrv/init.c
+++ b/dlls/gdi/mfdrv/init.c
@@ -38,14 +38,14 @@
NULL, /* pArcTo */
MFDRV_BeginPath, /* pBeginPath */
MFDRV_BitBlt, /* pBitBlt */
- NULL, /* pBitmapBits */
+ NULL, /* pBitmapBits */
NULL, /* pChoosePixelFormat */
MFDRV_Chord, /* pChord */
MFDRV_CloseFigure, /* pCloseFigure */
NULL, /* pCreateBitmap */
- NULL, /* no implementation */ /* pCreateDC */
+ NULL, /* pCreateDC */
NULL, /* pCreateDIBSection */
- NULL, /* no implementation */ /* pDeleteDC */
+ NULL, /* pDeleteDC */
NULL, /* pDeleteObject */
NULL, /* pDescribePixelFormat */
NULL, /* pDeviceCapabilities */
@@ -65,9 +65,11 @@
MFDRV_FrameRgn, /* pFrameRgn */
NULL, /* pGetCharWidth */
NULL, /* pGetDCOrgEx */
+ NULL, /* pGetDIBColorTable */
+ NULL, /* pGetDIBits */
NULL, /* pGetDeviceCaps */
NULL, /* pGetDeviceGammaRamp */
- NULL, /* no implementation */ /* pGetPixel */
+ NULL, /* pGetPixel */
NULL, /* pGetPixelFormat */
NULL, /* pGetTextExtentPoint */
NULL, /* pGetTextMetrics */
@@ -96,15 +98,20 @@
MFDRV_SaveDC, /* pSaveDC */
MFDRV_ScaleViewportExt, /* pScaleViewportExt */
MFDRV_ScaleWindowExt, /* pScaleWindowExt */
+ MFDRV_SelectBitmap, /* pSelectBitmap */
+ MFDRV_SelectBrush, /* pSelectBrush */
MFDRV_SelectClipPath, /* pSelectClipPath */
NULL, /* pSelectClipRgn */
- MFDRV_SelectObject, /* pSelectObject */
+ MFDRV_SelectFont, /* pSelectFont */
NULL, /* pSelectPalette */
+ MFDRV_SelectPen, /* pSelectPen */
MFDRV_SetBkColor, /* pSetBkColor */
MFDRV_SetBkMode, /* pSetBkMode */
+ NULL, /* pSetDIBColorTable */
+ NULL, /* pSetDIBits */
+ MFDRV_SetDIBitsToDevice, /* pSetDIBitsToDevice */
NULL, /* pSetDeviceClipping */
NULL, /* pSetDeviceGammaRamp */
- MFDRV_SetDIBitsToDevice, /* pSetDIBitsToDevice */
MFDRV_SetMapMode, /* pSetMapMode */
MFDRV_SetMapperFlags, /* pSetMapperFlags */
MFDRV_SetPixel, /* pSetPixel */
@@ -150,7 +157,9 @@
GDI_FreeObject( dc->hSelf, dc );
return NULL;
}
- dc->physDev = physDev;
+ dc->physDev = (PHYSDEV)physDev;
+ physDev->hdc = dc->hSelf;
+ physDev->dc = dc;
if (!(physDev->mh = HeapAlloc( GetProcessHeap(), 0, sizeof(*physDev->mh) )))
{
@@ -176,10 +185,11 @@
/**********************************************************************
* MFDRV_DeleteDC
*/
-static BOOL MFDRV_DeleteDC( DC *dc )
+static BOOL MFDRV_DeleteDC( PHYSDEV dev )
{
- METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
-
+ METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
+
if (physDev->mh) HeapFree( GetProcessHeap(), 0, physDev->mh );
HeapFree( GetProcessHeap(), 0, physDev );
dc->physDev = NULL;
@@ -216,12 +226,12 @@
physDev->mh->mtType = METAFILE_DISK;
if ((hFile = CreateFileA(filename, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, 0, 0)) == INVALID_HANDLE_VALUE) {
- MFDRV_DeleteDC( dc );
+ MFDRV_DeleteDC( dc->physDev );
return 0;
}
if (!WriteFile( hFile, (LPSTR)physDev->mh, sizeof(*physDev->mh), NULL,
NULL )) {
- MFDRV_DeleteDC( dc );
+ MFDRV_DeleteDC( dc->physDev );
return 0;
}
physDev->hFile = hFile;
@@ -286,23 +296,23 @@
* in SDK Knowledgebase Q99334.
*/
- if (!MFDRV_MetaParam0(dc, META_EOF))
+ if (!MFDRV_MetaParam0(dc->physDev, META_EOF))
{
- MFDRV_DeleteDC( dc );
+ MFDRV_DeleteDC( dc->physDev );
return 0;
}
if (physDev->mh->mtType == METAFILE_DISK) /* disk based metafile */
{
if (SetFilePointer(physDev->hFile, 0, NULL, FILE_BEGIN) != 0) {
- MFDRV_DeleteDC( dc );
+ MFDRV_DeleteDC( dc->physDev );
return 0;
}
physDev->mh->mtType = METAFILE_MEMORY; /* This is what windows does */
if (!WriteFile(physDev->hFile, (LPSTR)physDev->mh,
sizeof(*physDev->mh), NULL, NULL)) {
- MFDRV_DeleteDC( dc );
+ MFDRV_DeleteDC( dc->physDev );
return 0;
}
CloseHandle(physDev->hFile);
@@ -331,7 +341,7 @@
hmf = MF_Create_HMETAFILE16( physDev->mh );
physDev->mh = NULL; /* So it won't be deleted */
- MFDRV_DeleteDC( dc );
+ MFDRV_DeleteDC( dc->physDev );
return hmf;
}
@@ -359,7 +369,7 @@
hmf = MF_Create_HMETAFILE( physDev->mh );
physDev->mh = NULL; /* So it won't be deleted */
- MFDRV_DeleteDC( dc );
+ MFDRV_DeleteDC( dc->physDev );
return hmf;
}
@@ -369,11 +379,11 @@
*
* Warning: this function can change the pointer to the metafile header.
*/
-BOOL MFDRV_WriteRecord( DC *dc, METARECORD *mr, DWORD rlen)
+BOOL MFDRV_WriteRecord( PHYSDEV dev, METARECORD *mr, DWORD rlen)
{
DWORD len;
METAHEADER *mh;
- METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
+ METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dev;
switch(physDev->mh->mtType)
{
@@ -404,21 +414,21 @@
* MFDRV_MetaParam0
*/
-BOOL MFDRV_MetaParam0(DC *dc, short func)
+BOOL MFDRV_MetaParam0(PHYSDEV dev, short func)
{
char buffer[8];
METARECORD *mr = (METARECORD *)&buffer;
mr->rdSize = 3;
mr->rdFunction = func;
- return MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ return MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
}
/******************************************************************
* MFDRV_MetaParam1
*/
-BOOL MFDRV_MetaParam1(DC *dc, short func, short param1)
+BOOL MFDRV_MetaParam1(PHYSDEV dev, short func, short param1)
{
char buffer[8];
METARECORD *mr = (METARECORD *)&buffer;
@@ -426,14 +436,14 @@
mr->rdSize = 4;
mr->rdFunction = func;
*(mr->rdParm) = param1;
- return MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ return MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
}
/******************************************************************
* MFDRV_MetaParam2
*/
-BOOL MFDRV_MetaParam2(DC *dc, short func, short param1, short param2)
+BOOL MFDRV_MetaParam2(PHYSDEV dev, short func, short param1, short param2)
{
char buffer[10];
METARECORD *mr = (METARECORD *)&buffer;
@@ -442,7 +452,7 @@
mr->rdFunction = func;
*(mr->rdParm) = param2;
*(mr->rdParm + 1) = param1;
- return MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ return MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
}
@@ -450,7 +460,7 @@
* MFDRV_MetaParam4
*/
-BOOL MFDRV_MetaParam4(DC *dc, short func, short param1, short param2,
+BOOL MFDRV_MetaParam4(PHYSDEV dev, short func, short param1, short param2,
short param3, short param4)
{
char buffer[14];
@@ -462,7 +472,7 @@
*(mr->rdParm + 1) = param3;
*(mr->rdParm + 2) = param2;
*(mr->rdParm + 3) = param1;
- return MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ return MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
}
@@ -470,7 +480,7 @@
* MFDRV_MetaParam6
*/
-BOOL MFDRV_MetaParam6(DC *dc, short func, short param1, short param2,
+BOOL MFDRV_MetaParam6(PHYSDEV dev, short func, short param1, short param2,
short param3, short param4, short param5, short param6)
{
char buffer[18];
@@ -484,14 +494,14 @@
*(mr->rdParm + 3) = param3;
*(mr->rdParm + 4) = param2;
*(mr->rdParm + 5) = param1;
- return MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ return MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
}
/******************************************************************
* MFDRV_MetaParam8
*/
-BOOL MFDRV_MetaParam8(DC *dc, short func, short param1, short param2,
+BOOL MFDRV_MetaParam8(PHYSDEV dev, short func, short param1, short param2,
short param3, short param4, short param5,
short param6, short param7, short param8)
{
@@ -508,7 +518,7 @@
*(mr->rdParm + 5) = param3;
*(mr->rdParm + 6) = param2;
*(mr->rdParm + 7) = param1;
- return MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ return MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
}
@@ -519,9 +529,9 @@
* If we do someday, we'll need to maintain a table to re-use deleted
* handles.
*/
-int MFDRV_AddHandleDC( DC *dc )
+int MFDRV_AddHandleDC( PHYSDEV dev )
{
- METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
+ METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dev;
physDev->mh->mtNoObjects++;
return physDev->nextHandle++;
}
diff --git a/dlls/gdi/mfdrv/mapping.c b/dlls/gdi/mfdrv/mapping.c
index 0774e4e..bcd1794 100644
--- a/dlls/gdi/mfdrv/mapping.c
+++ b/dlls/gdi/mfdrv/mapping.c
@@ -25,10 +25,11 @@
/***********************************************************************
* MFDRV_SetMapMode
*/
-INT MFDRV_SetMapMode( DC *dc, INT mode )
+INT MFDRV_SetMapMode( PHYSDEV dev, INT mode )
{
- INT prevMode = dc->MapMode;
- MFDRV_MetaParam1( dc, META_SETMAPMODE, mode );
+ METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dev;
+ INT prevMode = GetMapMode( physDev->hdc );
+ MFDRV_MetaParam1( dev, META_SETMAPMODE, mode );
return prevMode;
}
@@ -36,9 +37,9 @@
/***********************************************************************
* MFDRV_SetViewportExt
*/
-BOOL MFDRV_SetViewportExt( DC *dc, INT x, INT y )
+BOOL MFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dc, META_SETVIEWPORTEXT, x, y );
+ MFDRV_MetaParam2( dev, META_SETVIEWPORTEXT, x, y );
return TRUE;
}
@@ -46,9 +47,9 @@
/***********************************************************************
* MFDRV_SetViewportOrg
*/
-BOOL MFDRV_SetViewportOrg( DC *dc, INT x, INT y )
+BOOL MFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dc, META_SETVIEWPORTORG, x, y );
+ MFDRV_MetaParam2( dev, META_SETVIEWPORTORG, x, y );
return TRUE;
}
@@ -56,9 +57,9 @@
/***********************************************************************
* MFDRV_SetWindowExt
*/
-BOOL MFDRV_SetWindowExt( DC *dc, INT x, INT y )
+BOOL MFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dc, META_SETWINDOWEXT, x, y );
+ MFDRV_MetaParam2( dev, META_SETWINDOWEXT, x, y );
return TRUE;
}
@@ -66,9 +67,9 @@
/***********************************************************************
* MFDRV_SetWindowOrg
*/
-BOOL MFDRV_SetWindowOrg( DC *dc, INT x, INT y )
+BOOL MFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dc, META_SETWINDOWORG, x, y );
+ MFDRV_MetaParam2( dev, META_SETWINDOWORG, x, y );
return TRUE;
}
@@ -76,9 +77,9 @@
/***********************************************************************
* MFDRV_OffsetViewportOrg
*/
-BOOL MFDRV_OffsetViewportOrg( DC *dc, INT x, INT y )
+BOOL MFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dc, META_OFFSETVIEWPORTORG, x, y );
+ MFDRV_MetaParam2( dev, META_OFFSETVIEWPORTORG, x, y );
return TRUE;
}
@@ -86,9 +87,9 @@
/***********************************************************************
* MFDRV_OffsetWindowOrg
*/
-BOOL MFDRV_OffsetWindowOrg( DC *dc, INT x, INT y )
+BOOL MFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dc, META_OFFSETWINDOWORG, x, y );
+ MFDRV_MetaParam2( dev, META_OFFSETWINDOWORG, x, y );
return TRUE;
}
@@ -96,10 +97,9 @@
/***********************************************************************
* MFDRV_ScaleViewportExt
*/
-BOOL MFDRV_ScaleViewportExt( DC *dc, INT xNum, INT xDenom,
- INT yNum, INT yDenom )
+BOOL MFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom )
{
- MFDRV_MetaParam4( dc, META_SCALEVIEWPORTEXT, xNum, xDenom, yNum, yDenom );
+ MFDRV_MetaParam4( dev, META_SCALEVIEWPORTEXT, xNum, xDenom, yNum, yDenom );
return TRUE;
}
@@ -107,10 +107,9 @@
/***********************************************************************
* MFDRV_ScaleWindowExt
*/
-BOOL MFDRV_ScaleWindowExt( DC *dc, INT xNum, INT xDenom,
- INT yNum, INT yDenom )
+BOOL MFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom )
{
- MFDRV_MetaParam4( dc, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom );
+ MFDRV_MetaParam4( dev, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom );
return TRUE;
}
diff --git a/dlls/gdi/mfdrv/metafiledrv.h b/dlls/gdi/mfdrv/metafiledrv.h
index dbd9186..2da4245 100644
--- a/dlls/gdi/mfdrv/metafiledrv.h
+++ b/dlls/gdi/mfdrv/metafiledrv.h
@@ -29,120 +29,125 @@
typedef struct
{
+ HDC hdc;
+ DC *dc;
METAHEADER *mh; /* Pointer to metafile header */
UINT nextHandle; /* Next handle number */
HFILE hFile; /* HFILE for disk based MetaFile */
} METAFILEDRV_PDEVICE;
-extern BOOL MFDRV_MetaParam0(DC *dc, short func);
-extern BOOL MFDRV_MetaParam1(DC *dc, short func, short param1);
-extern BOOL MFDRV_MetaParam2(DC *dc, short func, short param1, short param2);
-extern BOOL MFDRV_MetaParam4(DC *dc, short func, short param1, short param2,
- short param3, short param4);
-extern BOOL MFDRV_MetaParam6(DC *dc, short func, short param1, short param2,
- short param3, short param4, short param5,
- short param6);
-extern BOOL MFDRV_MetaParam8(DC *dc, short func, short param1, short param2,
- short param3, short param4, short param5,
- short param6, short param7, short param8);
-extern BOOL MFDRV_WriteRecord(DC *dc, METARECORD *mr, DWORD rlen);
-extern int MFDRV_AddHandleDC( DC *dc );
-extern INT16 MFDRV_CreateBrushIndirect( DC *dc, HBRUSH hBrush );
+extern BOOL MFDRV_MetaParam0(PHYSDEV dev, short func);
+extern BOOL MFDRV_MetaParam1(PHYSDEV dev, short func, short param1);
+extern BOOL MFDRV_MetaParam2(PHYSDEV dev, short func, short param1, short param2);
+extern BOOL MFDRV_MetaParam4(PHYSDEV dev, short func, short param1, short param2,
+ short param3, short param4);
+extern BOOL MFDRV_MetaParam6(PHYSDEV dev, short func, short param1, short param2,
+ short param3, short param4, short param5,
+ short param6);
+extern BOOL MFDRV_MetaParam8(PHYSDEV dev, short func, short param1, short param2,
+ short param3, short param4, short param5,
+ short param6, short param7, short param8);
+extern BOOL MFDRV_WriteRecord(PHYSDEV dev, METARECORD *mr, DWORD rlen);
+extern int MFDRV_AddHandleDC( PHYSDEV dev );
+extern INT16 MFDRV_CreateBrushIndirect( PHYSDEV dev, HBRUSH hBrush );
/* Metafile driver functions */
-extern BOOL MFDRV_AbortPath( DC *dc );
-extern BOOL MFDRV_Arc( DC *dc, INT left, INT top, INT right, INT bottom,
- INT xstart, INT ystart, INT xend, INT yend );
-extern BOOL MFDRV_BeginPath( DC *dc );
-extern BOOL MFDRV_BitBlt( DC *dcDst, INT xDst, INT yDst, INT width,
- INT height, DC *dcSrc, INT xSrc, INT ySrc,
- DWORD rop );
-extern BOOL MFDRV_Chord( DC *dc, INT left, INT top, INT right,
- INT bottom, INT xstart, INT ystart, INT xend,
- INT yend );
-extern BOOL MFDRV_CloseFigure( DC *dc );
-extern BOOL MFDRV_Ellipse( DC *dc, INT left, INT top,
- INT right, INT bottom );
-extern BOOL MFDRV_EndPath( DC *dc );
-extern INT MFDRV_ExcludeClipRect( DC *dc, INT left, INT top, INT right, INT
- bottom );
-extern BOOL MFDRV_ExtFloodFill( DC *dc, INT x, INT y,
- COLORREF color, UINT fillType );
-extern BOOL MFDRV_ExtTextOut( DC *dc, INT x, INT y,
- UINT flags, const RECT *lprect, LPCWSTR str,
- UINT count, const INT *lpDx );
-extern BOOL MFDRV_FillPath( DC *dc );
-extern BOOL MFDRV_FillRgn( DC *dc, HRGN hrgn, HBRUSH hbrush );
-extern BOOL MFDRV_FlattenPath( DC *dc );
-extern BOOL MFDRV_FrameRgn( DC *dc, HRGN hrgn, HBRUSH hbrush, INT x, INT y );
-extern INT MFDRV_IntersectClipRect( DC *dc, INT left, INT top, INT right, INT
- bottom );
-extern BOOL MFDRV_InvertRgn( DC *dc, HRGN hrgn );
-extern BOOL MFDRV_LineTo( DC *dc, INT x, INT y );
-extern BOOL MFDRV_MoveTo( DC *dc, INT x, INT y );
-extern INT MFDRV_OffsetClipRgn( DC *dc, INT x, INT y );
-extern BOOL MFDRV_OffsetViewportOrg( DC *dc, INT x, INT y );
-extern BOOL MFDRV_OffsetWindowOrg( DC *dc, INT x, INT y );
-extern BOOL MFDRV_PaintRgn( DC *dc, HRGN hrgn );
-extern BOOL MFDRV_PatBlt( DC *dc, INT left, INT top, INT width, INT height,
- DWORD rop );
-extern BOOL MFDRV_Pie( DC *dc, INT left, INT top, INT right,
- INT bottom, INT xstart, INT ystart, INT xend,
- INT yend );
-extern BOOL MFDRV_PolyBezier( DC *dc, const POINT* pt, DWORD count );
-extern BOOL MFDRV_PolyBezierTo( DC *dc, const POINT* pt, DWORD count );
-extern BOOL MFDRV_PolyPolygon( DC *dc, const POINT* pt, const INT* counts,
- UINT polygons);
-extern BOOL MFDRV_Polygon( DC *dc, const POINT* pt, INT count );
-extern BOOL MFDRV_Polyline( DC *dc, const POINT* pt,INT count);
-extern BOOL MFDRV_Rectangle( DC *dc, INT left, INT top,
- INT right, INT bottom);
-extern BOOL MFDRV_RestoreDC( DC *dc, INT level );
-extern BOOL MFDRV_RoundRect( DC *dc, INT left, INT top,
- INT right, INT bottom, INT ell_width,
- INT ell_height );
-extern INT MFDRV_SaveDC( DC *dc );
-extern BOOL MFDRV_ScaleViewportExt( DC *dc, INT xNum, INT xDenom, INT yNum,
- INT yDenom );
-extern BOOL MFDRV_ScaleWindowExt( DC *dc, INT xNum, INT xDenom, INT yNum,
- INT yDenom );
-extern BOOL MFDRV_SelectClipPath( DC *dc, INT iMode );
-extern HGDIOBJ MFDRV_SelectObject( DC *dc, HGDIOBJ handle );
-extern COLORREF MFDRV_SetBkColor( DC *dc, COLORREF color );
-extern INT MFDRV_SetBkMode( DC *dc, INT mode );
-extern INT MFDRV_SetMapMode( DC *dc, INT mode );
-extern DWORD MFDRV_SetMapperFlags( DC *dc, DWORD flags );
-extern COLORREF MFDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color );
-extern INT MFDRV_SetPolyFillMode( DC *dc, INT mode );
-extern INT MFDRV_SetROP2( DC *dc, INT rop );
-extern INT MFDRV_SetRelAbs( DC *dc, INT mode );
-extern INT MFDRV_SetStretchBltMode( DC *dc, INT mode );
-extern UINT MFDRV_SetTextAlign( DC *dc, UINT align );
-extern INT MFDRV_SetTextCharacterExtra( DC *dc, INT extra );
-extern COLORREF MFDRV_SetTextColor( DC *dc, COLORREF color );
-extern INT MFDRV_SetTextJustification( DC *dc, INT extra, INT breaks );
-extern BOOL MFDRV_SetViewportExt( DC *dc, INT x, INT y );
-extern BOOL MFDRV_SetViewportOrg( DC *dc, INT x, INT y );
-extern BOOL MFDRV_SetWindowExt( DC *dc, INT x, INT y );
-extern BOOL MFDRV_SetWindowOrg( DC *dc, INT x, INT y );
-extern BOOL MFDRV_StretchBlt( DC *dcDst, INT xDst, INT yDst, INT widthDst,
- INT heightDst, DC *dcSrc, INT xSrc, INT ySrc,
- INT widthSrc, INT heightSrc, DWORD rop );
-extern BOOL MFDRV_PaintRgn( DC *dc, HRGN hrgn );
-extern INT MFDRV_SetDIBitsToDevice( DC *dc, INT xDest, INT yDest, DWORD cx,
- DWORD cy, INT xSrc, INT ySrc,
- UINT startscan, UINT lines, LPCVOID bits,
- const BITMAPINFO *info, UINT coloruse );
-extern INT MFDRV_StretchDIBits( DC *dc, INT xDst, INT yDst, INT widthDst,
- INT heightDst, INT xSrc, INT ySrc,
- INT widthSrc, INT heightSrc, const void *bits,
- const BITMAPINFO *info, UINT wUsage,
- DWORD dwRop );
-extern BOOL MFDRV_StrokeAndFillPath( DC *dc );
-extern BOOL MFDRV_StrokePath( DC *dc );
-extern BOOL MFDRV_WidenPath( DC *dc );
+extern BOOL MFDRV_AbortPath( PHYSDEV dev );
+extern BOOL MFDRV_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
+ INT xstart, INT ystart, INT xend, INT yend );
+extern BOOL MFDRV_BeginPath( PHYSDEV dev );
+extern BOOL MFDRV_BitBlt( PHYSDEV devDst, INT xDst, INT yDst, INT width,
+ INT height, PHYSDEV devSrc, INT xSrc, INT ySrc,
+ DWORD rop );
+extern BOOL MFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right,
+ INT bottom, INT xstart, INT ystart, INT xend,
+ INT yend );
+extern BOOL MFDRV_CloseFigure( PHYSDEV dev );
+extern BOOL MFDRV_Ellipse( PHYSDEV dev, INT left, INT top,
+ INT right, INT bottom );
+extern BOOL MFDRV_EndPath( PHYSDEV dev );
+extern INT MFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT
+ bottom );
+extern BOOL MFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y,
+ COLORREF color, UINT fillType );
+extern BOOL MFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y,
+ UINT flags, const RECT *lprect, LPCWSTR str,
+ UINT count, const INT *lpDx );
+extern BOOL MFDRV_FillPath( PHYSDEV dev );
+extern BOOL MFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush );
+extern BOOL MFDRV_FlattenPath( PHYSDEV dev );
+extern BOOL MFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT x, INT y );
+extern INT MFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT
+ bottom );
+extern BOOL MFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn );
+extern BOOL MFDRV_LineTo( PHYSDEV dev, INT x, INT y );
+extern BOOL MFDRV_MoveTo( PHYSDEV dev, INT x, INT y );
+extern INT MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y );
+extern BOOL MFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y );
+extern BOOL MFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y );
+extern BOOL MFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn );
+extern BOOL MFDRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height,
+ DWORD rop );
+extern BOOL MFDRV_Pie( PHYSDEV dev, INT left, INT top, INT right,
+ INT bottom, INT xstart, INT ystart, INT xend,
+ INT yend );
+extern BOOL MFDRV_PolyBezier( PHYSDEV dev, const POINT* pt, DWORD count );
+extern BOOL MFDRV_PolyBezierTo( PHYSDEV dev, const POINT* pt, DWORD count );
+extern BOOL MFDRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts,
+ UINT polygons);
+extern BOOL MFDRV_Polygon( PHYSDEV dev, const POINT* pt, INT count );
+extern BOOL MFDRV_Polyline( PHYSDEV dev, const POINT* pt,INT count);
+extern BOOL MFDRV_Rectangle( PHYSDEV dev, INT left, INT top,
+ INT right, INT bottom);
+extern BOOL MFDRV_RestoreDC( PHYSDEV dev, INT level );
+extern BOOL MFDRV_RoundRect( PHYSDEV dev, INT left, INT top,
+ INT right, INT bottom, INT ell_width,
+ INT ell_height );
+extern INT MFDRV_SaveDC( PHYSDEV dev );
+extern BOOL MFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
+ INT yDenom );
+extern BOOL MFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
+ INT yDenom );
+extern HBITMAP MFDRV_SelectBitmap( PHYSDEV dev, HBITMAP handle );
+extern HBRUSH MFDRV_SelectBrush( PHYSDEV dev, HBRUSH handle );
+extern BOOL MFDRV_SelectClipPath( PHYSDEV dev, INT iMode );
+extern HFONT MFDRV_SelectFont( PHYSDEV dev, HFONT handle );
+extern HPEN MFDRV_SelectPen( PHYSDEV dev, HPEN handle );
+extern COLORREF MFDRV_SetBkColor( PHYSDEV dev, COLORREF color );
+extern INT MFDRV_SetBkMode( PHYSDEV dev, INT mode );
+extern INT MFDRV_SetMapMode( PHYSDEV dev, INT mode );
+extern DWORD MFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags );
+extern COLORREF MFDRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color );
+extern INT MFDRV_SetPolyFillMode( PHYSDEV dev, INT mode );
+extern INT MFDRV_SetROP2( PHYSDEV dev, INT rop );
+extern INT MFDRV_SetRelAbs( PHYSDEV dev, INT mode );
+extern INT MFDRV_SetStretchBltMode( PHYSDEV dev, INT mode );
+extern UINT MFDRV_SetTextAlign( PHYSDEV dev, UINT align );
+extern INT MFDRV_SetTextCharacterExtra( PHYSDEV dev, INT extra );
+extern COLORREF MFDRV_SetTextColor( PHYSDEV dev, COLORREF color );
+extern INT MFDRV_SetTextJustification( PHYSDEV dev, INT extra, INT breaks );
+extern BOOL MFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y );
+extern BOOL MFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y );
+extern BOOL MFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y );
+extern BOOL MFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y );
+extern BOOL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
+ INT heightDst, PHYSDEV devSrc, INT xSrc, INT ySrc,
+ INT widthSrc, INT heightSrc, DWORD rop );
+extern BOOL MFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn );
+extern INT MFDRV_SetDIBitsToDevice( PHYSDEV dev, INT xDest, INT yDest, DWORD cx,
+ DWORD cy, INT xSrc, INT ySrc,
+ UINT startscan, UINT lines, LPCVOID bits,
+ const BITMAPINFO *info, UINT coloruse );
+extern INT MFDRV_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst,
+ INT heightDst, INT xSrc, INT ySrc,
+ INT widthSrc, INT heightSrc, const void *bits,
+ const BITMAPINFO *info, UINT wUsage,
+ DWORD dwRop );
+extern BOOL MFDRV_StrokeAndFillPath( PHYSDEV dev );
+extern BOOL MFDRV_StrokePath( PHYSDEV dev );
+extern BOOL MFDRV_WidenPath( PHYSDEV dev );
#endif /* __WINE_METAFILEDRV_H */
diff --git a/dlls/gdi/mfdrv/objects.c b/dlls/gdi/mfdrv/objects.c
index fc3a46d..9e5f54a 100644
--- a/dlls/gdi/mfdrv/objects.c
+++ b/dlls/gdi/mfdrv/objects.c
@@ -31,9 +31,9 @@
/***********************************************************************
- * MFDRV_BITMAP_SelectObject
+ * MFDRV_SelectBitmap
*/
-static HBITMAP MFDRV_BITMAP_SelectObject( DC * dc, HBITMAP hbitmap )
+HBITMAP MFDRV_SelectBitmap( PHYSDEV dev, HBITMAP hbitmap )
{
return 0;
}
@@ -43,12 +43,13 @@
* MFDRV_CreateBrushIndirect
*/
-INT16 MFDRV_CreateBrushIndirect(DC *dc, HBRUSH hBrush )
+INT16 MFDRV_CreateBrushIndirect(PHYSDEV dev, HBRUSH hBrush )
{
INT16 index = -1;
DWORD size;
METARECORD *mr;
LOGBRUSH logbrush;
+ METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dev;
if (!GetObjectA( hBrush, sizeof(logbrush), &logbrush )) return -1;
@@ -103,7 +104,7 @@
info->bmiHeader.biBitCount = 1;
bits = ((BYTE *)info) + sizeof(BITMAPINFO) + sizeof(RGBQUAD);
- GetDIBits(dc->hSelf, logbrush.lbHatch, 0, bm.bmHeight,
+ GetDIBits(physDev->hdc, logbrush.lbHatch, 0, bm.bmHeight,
bits, info, DIB_RGB_COLORS);
*(DWORD *)info->bmiColors = 0;
*(DWORD *)(info->bmiColors + 1) = 0xffffff;
@@ -137,8 +138,8 @@
FIXME("Unkonwn brush style %x\n", logbrush.lbStyle);
return -1;
}
- index = MFDRV_AddHandleDC( dc );
- if(!MFDRV_WriteRecord( dc, mr, mr->rdSize * 2))
+ index = MFDRV_AddHandleDC( dev );
+ if(!MFDRV_WriteRecord( dev, mr, mr->rdSize * 2))
index = -1;
HeapFree(GetProcessHeap(), 0, mr);
done:
@@ -147,27 +148,27 @@
/***********************************************************************
- * MFDRV_BRUSH_SelectObject
+ * MFDRV_SelectBrush
*/
-static HBRUSH MFDRV_BRUSH_SelectObject( DC *dc, HBRUSH hbrush )
+HBRUSH MFDRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush )
{
INT16 index;
METARECORD mr;
- index = MFDRV_CreateBrushIndirect( dc, hbrush );
+ index = MFDRV_CreateBrushIndirect( dev, hbrush );
if(index == -1) return 0;
mr.rdSize = sizeof(mr) / 2;
mr.rdFunction = META_SELECTOBJECT;
mr.rdParm[0] = index;
- return MFDRV_WriteRecord( dc, &mr, mr.rdSize * 2);
+ return MFDRV_WriteRecord( dev, &mr, mr.rdSize * 2) ? hbrush : 0;
}
/******************************************************************
* MFDRV_CreateFontIndirect
*/
-static BOOL MFDRV_CreateFontIndirect(DC *dc, HFONT16 hFont, LOGFONT16 *logfont)
+static BOOL MFDRV_CreateFontIndirect(PHYSDEV dev, HFONT16 hFont, LOGFONT16 *logfont)
{
int index;
char buffer[sizeof(METARECORD) - 2 + sizeof(LOGFONT16)];
@@ -176,34 +177,33 @@
mr->rdSize = (sizeof(METARECORD) + sizeof(LOGFONT16) - 2) / 2;
mr->rdFunction = META_CREATEFONTINDIRECT;
memcpy(&(mr->rdParm), logfont, sizeof(LOGFONT16));
- if (!(MFDRV_WriteRecord( dc, mr, mr->rdSize * 2))) return FALSE;
+ if (!(MFDRV_WriteRecord( dev, mr, mr->rdSize * 2))) return FALSE;
mr->rdSize = sizeof(METARECORD) / 2;
mr->rdFunction = META_SELECTOBJECT;
- if ((index = MFDRV_AddHandleDC( dc )) == -1) return FALSE;
+ if ((index = MFDRV_AddHandleDC( dev )) == -1) return FALSE;
*(mr->rdParm) = index;
- return MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ return MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
}
/***********************************************************************
- * MFDRV_FONT_SelectObject
+ * MFDRV_SelectFont
*/
-static HFONT MFDRV_FONT_SelectObject( DC * dc, HFONT hfont )
+HFONT MFDRV_SelectFont( PHYSDEV dev, HFONT hfont )
{
LOGFONT16 lf16;
if (!GetObject16( hfont, sizeof(lf16), &lf16 )) return GDI_ERROR;
- if (MFDRV_CreateFontIndirect(dc, hfont, &lf16))
- return FALSE;
+ if (MFDRV_CreateFontIndirect(dev, hfont, &lf16)) return 0;
return GDI_ERROR;
}
/******************************************************************
* MFDRV_CreatePenIndirect
*/
-static BOOL MFDRV_CreatePenIndirect(DC *dc, HPEN16 hPen, LOGPEN16 *logpen)
+static BOOL MFDRV_CreatePenIndirect(PHYSDEV dev, HPEN16 hPen, LOGPEN16 *logpen)
{
int index;
char buffer[sizeof(METARECORD) - 2 + sizeof(*logpen)];
@@ -212,45 +212,25 @@
mr->rdSize = (sizeof(METARECORD) + sizeof(*logpen) - 2) / 2;
mr->rdFunction = META_CREATEPENINDIRECT;
memcpy(&(mr->rdParm), logpen, sizeof(*logpen));
- if (!(MFDRV_WriteRecord( dc, mr, mr->rdSize * 2))) return FALSE;
+ if (!(MFDRV_WriteRecord( dev, mr, mr->rdSize * 2))) return FALSE;
mr->rdSize = sizeof(METARECORD) / 2;
mr->rdFunction = META_SELECTOBJECT;
- if ((index = MFDRV_AddHandleDC( dc )) == -1) return FALSE;
+ if ((index = MFDRV_AddHandleDC( dev )) == -1) return FALSE;
*(mr->rdParm) = index;
- return MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ return MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
}
/***********************************************************************
- * MFDRV_PEN_SelectObject
+ * MFDRV_SelectPen
*/
-static HPEN MFDRV_PEN_SelectObject( DC * dc, HPEN hpen )
+HPEN MFDRV_SelectPen( PHYSDEV dev, HPEN hpen )
{
LOGPEN16 logpen;
- HPEN prevHandle = dc->hPen;
if (!GetObject16( hpen, sizeof(logpen), &logpen )) return 0;
- if (MFDRV_CreatePenIndirect( dc, hpen, &logpen )) return prevHandle;
- return 0;
-}
-
-
-/***********************************************************************
- * MFDRV_SelectObject
- */
-HGDIOBJ MFDRV_SelectObject( DC *dc, HGDIOBJ handle )
-{
- TRACE("hdc=%04x %04x\n", dc->hSelf, handle );
-
- switch(GetObjectType( handle ))
- {
- case OBJ_PEN: return MFDRV_PEN_SelectObject( dc, handle );
- case OBJ_BRUSH: return MFDRV_BRUSH_SelectObject( dc, handle );
- case OBJ_BITMAP: return MFDRV_BITMAP_SelectObject( dc, handle );
- case OBJ_FONT: return MFDRV_FONT_SelectObject( dc, handle );
- case OBJ_REGION: return (HGDIOBJ)SelectClipRgn( dc->hSelf, handle );
- }
+ if (MFDRV_CreatePenIndirect( dev, hpen, &logpen )) return hpen;
return 0;
}
diff --git a/dlls/gdi/mfdrv/text.c b/dlls/gdi/mfdrv/text.c
index e865b18..58db84d 100644
--- a/dlls/gdi/mfdrv/text.c
+++ b/dlls/gdi/mfdrv/text.c
@@ -30,7 +30,7 @@
/******************************************************************
* MFDRV_MetaExtTextOut
*/
-static BOOL MFDRV_MetaExtTextOut(DC*dc, short x, short y, UINT16 flags,
+static BOOL MFDRV_MetaExtTextOut( PHYSDEV dev, short x, short y, UINT16 flags,
const RECT16 *rect, LPCSTR str, short count,
const INT16 *lpDx)
{
@@ -60,7 +60,7 @@
if (lpDx)
memcpy(mr->rdParm + (rect ? 8 : 4) + ((count + 1) >> 1),lpDx,
count*sizeof(INT16));
- ret = MFDRV_WriteRecord( dc, mr, mr->rdSize * 2);
+ ret = MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
HeapFree( GetProcessHeap(), 0, mr);
return ret;
}
@@ -71,7 +71,7 @@
* MFDRV_ExtTextOut
*/
BOOL
-MFDRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+MFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR str, UINT count,
const INT *lpDx )
{
@@ -91,8 +91,7 @@
len = WideCharToMultiByte( CP_ACP, 0, str, count, NULL, 0, NULL, NULL );
ascii = HeapAlloc( GetProcessHeap(), 0, len );
WideCharToMultiByte( CP_ACP, 0, str, count, ascii, len, NULL, NULL );
- ret = MFDRV_MetaExtTextOut(dc,x,y,flags,lprect?&rect16:NULL,ascii,len,
- lpdx16);
+ ret = MFDRV_MetaExtTextOut(dev,x,y,flags,lprect?&rect16:NULL,ascii,len,lpdx16);
HeapFree( GetProcessHeap(), 0, ascii );
if (lpdx16) HeapFree( GetProcessHeap(), 0, lpdx16 );
return ret;
diff --git a/dlls/gdi/printdrv.c b/dlls/gdi/printdrv.c
index e9d3489..0048566 100644
--- a/dlls/gdi/printdrv.c
+++ b/dlls/gdi/printdrv.c
@@ -94,7 +94,7 @@
if(!dc) return SP_ERROR;
- if (dc->funcs->pStartDoc) ret = dc->funcs->pStartDoc( dc, doc );
+ if (dc->funcs->pStartDoc) ret = dc->funcs->pStartDoc( dc->physDev, doc );
GDI_ReleaseObj( hdc );
return ret;
}
@@ -148,7 +148,7 @@
DC *dc = DC_GetDCPtr( hdc );
if(!dc) return SP_ERROR;
- if (dc->funcs->pEndDoc) ret = dc->funcs->pEndDoc( dc );
+ if (dc->funcs->pEndDoc) ret = dc->funcs->pEndDoc( dc->physDev );
GDI_ReleaseObj( hdc );
return ret;
}
@@ -173,7 +173,7 @@
if(!dc) return SP_ERROR;
if(dc->funcs->pStartPage)
- ret = dc->funcs->pStartPage( dc );
+ ret = dc->funcs->pStartPage( dc->physDev );
else
FIXME("stub\n");
GDI_ReleaseObj( hdc );
@@ -199,7 +199,7 @@
DC *dc = DC_GetDCPtr( hdc );
if(!dc) return SP_ERROR;
- if (dc->funcs->pEndPage) ret = dc->funcs->pEndPage( dc );
+ if (dc->funcs->pEndPage) ret = dc->funcs->pEndPage( dc->physDev );
GDI_ReleaseObj( hdc );
if (!QueryAbort16( hdc, 0 ))
{
@@ -226,7 +226,7 @@
DC *dc = DC_GetDCPtr( hdc );
if(!dc) return SP_ERROR;
- if (dc->funcs->pAbortDoc) ret = dc->funcs->pAbortDoc( dc );
+ if (dc->funcs->pAbortDoc) ret = dc->funcs->pAbortDoc( dc->physDev );
GDI_ReleaseObj( hdc );
return ret;
}
diff --git a/dlls/gdi/win16drv/brush.c b/dlls/gdi/win16drv/brush.c
deleted file mode 100644
index 486cf8f..0000000
--- a/dlls/gdi/win16drv/brush.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * GDI brush objects - win16drv
- *
- * Copyright 1997 John Harvey
- *
- * 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 <stdlib.h>
-#include "win16drv/win16drv.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(win16drv);
-
-HBRUSH WIN16DRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush )
-{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
- HBRUSH16 prevHandle = dc->hBrush;
- int nSize;
- LOGBRUSH16 lBrush16;
-
- if (!GetObject16( hbrush, sizeof(lBrush16), &lBrush16 )) return 0;
-
- dc->hBrush = hbrush;
- if ( physDev->BrushInfo )
- {
- TRACE("UnRealizing BrushInfo\n");
- nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_BRUSH,
- physDev->BrushInfo,
- physDev->BrushInfo, 0);
- }
- else
- {
- nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, DRVOBJ_BRUSH,
- &lBrush16, 0, 0);
- physDev->BrushInfo = HeapAlloc( GetProcessHeap(), 0, nSize );
- }
-
-
- nSize = PRTDRV_RealizeObject(physDev->segptrPDEVICE, DRVOBJ_BRUSH,
- &lBrush16,
- physDev->BrushInfo,
- win16drv_SegPtr_TextXForm);
-
- return prevHandle;
-}
diff --git a/dlls/gdi/win16drv/font.c b/dlls/gdi/win16drv/font.c
index cd997f9..73fc73c 100644
--- a/dlls/gdi/win16drv/font.c
+++ b/dlls/gdi/win16drv/font.c
@@ -33,15 +33,15 @@
/***********************************************************************
* WIN16DRV_GetTextExtentPoint
*/
-BOOL WIN16DRV_GetTextExtentPoint( DC *dc, LPCWSTR wstr, INT count,
+BOOL WIN16DRV_GetTextExtentPoint( PHYSDEV dev, LPCWSTR wstr, INT count,
LPSIZE size )
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
DWORD dwRet, len;
char *str;
- TRACE("%04x %s %d %p\n",
- dc->hSelf, debugstr_wn(wstr, count), count, size);
+ TRACE("%04x %s %d %p\n", physDev->hdc, debugstr_wn(wstr, count), count, size);
len = WideCharToMultiByte( CP_ACP, 0, wstr, count, NULL, 0, NULL, NULL );
@@ -63,11 +63,11 @@
/***********************************************************************
* WIN16DRV_GetTextMetrics
*/
-BOOL WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRICW *metrics )
+BOOL WIN16DRV_GetTextMetrics( PHYSDEV dev, TEXTMETRICW *metrics )
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
- TRACE("%04x \n", dc->hSelf);
+ TRACE("%04x \n", physDev->hdc);
FONT_TextMetric16ToW( &physDev->tm, metrics );
@@ -85,9 +85,13 @@
return TRUE;
}
-HFONT WIN16DRV_FONT_SelectObject( DC * dc, HFONT hfont)
+/***********************************************************************
+ * WIN16DRV_SelectFont
+ */
+HFONT WIN16DRV_SelectFont( PHYSDEV dev, HFONT hfont)
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
int nSize;
if (!GetObject16( hfont, sizeof(physDev->lf), &physDev->lf ))
@@ -163,16 +167,14 @@
/***********************************************************************
* WIN16DRV_GetCharWidth
*/
-BOOL WIN16DRV_GetCharWidth( DC *dc, UINT firstChar, UINT lastChar,
+BOOL WIN16DRV_GetCharWidth( PHYSDEV dev, UINT firstChar, UINT lastChar,
LPINT buffer )
{
int i;
WORD wRet;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
-
- TRACE("%d - %d into %p\n",
- firstChar, lastChar, buffer );
+ TRACE("%d - %d into %p\n", firstChar, lastChar, buffer );
wRet = PRTDRV_GetCharWidth( physDev->segptrPDEVICE, buffer, firstChar,
lastChar, physDev->FontInfo,
diff --git a/dlls/gdi/win16drv/graphics.c b/dlls/gdi/win16drv/graphics.c
index c1940fc..7d9af86 100644
--- a/dlls/gdi/win16drv/graphics.c
+++ b/dlls/gdi/win16drv/graphics.c
@@ -29,11 +29,13 @@
* WIN16DRV_LineTo
*/
BOOL
-WIN16DRV_LineTo( DC *dc, INT x, INT y )
+WIN16DRV_LineTo( PHYSDEV dev, INT x, INT y )
{
BOOL bRet ;
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
POINT16 points[2];
+
points[0].x = dc->DCOrgX + XLPTODP( dc, dc->CursPosX );
points[0].y = dc->DCOrgY + YLPTODP( dc, dc->CursPosY );
points[1].x = dc->DCOrgX + XLPTODP( dc, x );
@@ -54,9 +56,10 @@
* WIN16DRV_Rectangle
*/
BOOL
-WIN16DRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
+WIN16DRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
BOOL bRet = 0;
POINT16 points[2];
@@ -84,9 +87,10 @@
* WIN16DRV_Polygon
*/
BOOL
-WIN16DRV_Polygon(DC *dc, const POINT* pt, INT count )
+WIN16DRV_Polygon(PHYSDEV dev, const POINT* pt, INT count )
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
BOOL bRet = 0;
LPPOINT16 points;
int i;
@@ -119,9 +123,10 @@
* WIN16DRV_Polyline
*/
BOOL
-WIN16DRV_Polyline(DC *dc, const POINT* pt, INT count )
+WIN16DRV_Polyline(PHYSDEV dev, const POINT* pt, INT count )
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
BOOL bRet = 0;
LPPOINT16 points;
int i;
@@ -151,15 +156,15 @@
* WIN16DRV_Ellipse
*/
BOOL
-WIN16DRV_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom)
+WIN16DRV_Ellipse(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
BOOL bRet = 0;
POINT16 points[2];
- TRACE("In WIN16DRV_Ellipse, x %d y %d DCOrgX %d y %d\n",
- left, top, dc->DCOrgX, dc->DCOrgY);
- TRACE("In WIN16DRV_Ellipse, VPortOrgX %d y %d\n",
- dc->vportOrgX, dc->vportOrgY);
+
+ TRACE("In WIN16DRV_Ellipse, x %d y %d DCOrgX %d y %d\n", left, top, dc->DCOrgX, dc->DCOrgY);
+ TRACE("In WIN16DRV_Ellipse, VPortOrgX %d y %d\n", dc->vportOrgX, dc->vportOrgY);
points[0].x = XLPTODP(dc, left);
points[0].y = YLPTODP(dc, top);
diff --git a/dlls/gdi/win16drv/init.c b/dlls/gdi/win16drv/init.c
index 9dbe7c0..59bc8a5 100644
--- a/dlls/gdi/win16drv/init.c
+++ b/dlls/gdi/win16drv/init.c
@@ -52,8 +52,8 @@
static BOOL WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
LPCSTR output, const DEVMODEA* initData );
-static INT WIN16DRV_GetDeviceCaps( DC *dc, INT cap );
-static INT WIN16DRV_ExtEscape( DC *dc, INT escape, INT in_count, LPCVOID in_data,
+static INT WIN16DRV_GetDeviceCaps( PHYSDEV dev, INT cap );
+static INT WIN16DRV_ExtEscape( PHYSDEV dev, INT escape, INT in_count, LPCVOID in_data,
INT out_count, LPVOID out_data );
static const DC_FUNCTIONS WIN16DRV_Funcs =
@@ -92,6 +92,8 @@
NULL, /* pFrameRgn */
WIN16DRV_GetCharWidth, /* pGetCharWidth */
NULL, /* pGetDCOrgEx */
+ NULL, /* pGetDIBColorTable */
+ NULL, /* pGetDIBits */
WIN16DRV_GetDeviceCaps, /* pGetDeviceCaps */
NULL, /* pGetDeviceGammaRamp */
NULL, /* pGetPixel */
@@ -123,15 +125,20 @@
NULL, /* pSaveDC */
NULL, /* pScaleViewportExtEx */
NULL, /* pScaleWindowExtEx */
+ WIN16DRV_SelectBitmap, /* pSelectBitmap */
+ WIN16DRV_SelectBrush, /* pSelectBrush */
NULL, /* pSelectClipPath */
NULL, /* pSelectClipRgn */
- WIN16DRV_SelectObject, /* pSelectObject */
+ WIN16DRV_SelectFont, /* pSelectFont */
NULL, /* pSelectPalette */
+ WIN16DRV_SelectPen, /* pSelectPen */
NULL, /* pSetBkColor */
NULL, /* pSetBkMode */
+ NULL, /* pSetDIBColorTable */
+ NULL, /* pSetDIBits */
+ NULL, /* pSetDIBitsToDevice */
NULL, /* pSetDeviceClipping */
NULL, /* pSetDeviceGammaRamp */
- NULL, /* pSetDIBitsToDevice */
NULL, /* pSetMapMode */
NULL, /* pSetMapperFlags */
NULL, /* pSetPixel */
@@ -242,7 +249,9 @@
physDev = (WIN16DRV_PDEVICE *)HeapAlloc( GetProcessHeap(), 0, sizeof(*physDev) );
if (!physDev) return FALSE;
- dc->physDev = physDev;
+ dc->physDev = (PHYSDEV)physDev;
+ physDev->hdc = dc->hSelf;
+ physDev->dc = dc;
pLPD = LoadPrinterDriver(driver);
if (pLPD == NULL)
@@ -305,11 +314,10 @@
return TRUE;
}
-BOOL WIN16DRV_PatBlt( struct tagDC *dc, INT left, INT top,
- INT width, INT height, DWORD rop )
+BOOL WIN16DRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height, DWORD rop )
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
BOOL bRet = 0;
bRet = PRTDRV_StretchBlt( physDev->segptrPDEVICE, left, top, width, height, (SEGPTR)NULL, 0, 0, width, height,
@@ -322,12 +330,12 @@
/***********************************************************************
* WIN16DRV_GetDeviceCaps
*/
-static INT WIN16DRV_GetDeviceCaps( DC *dc, INT cap )
+static INT WIN16DRV_GetDeviceCaps( PHYSDEV dev, INT cap )
{
- WIN16DRV_PDEVICE *physDev = dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
if (cap >= PHYSICALWIDTH || (cap % 2))
{
- FIXME("(%04x): unsupported capability %d, will return 0\n", dc->hSelf, cap );
+ FIXME("(%04x): unsupported capability %d, will return 0\n", physDev->hdc, cap );
return 0;
}
return *((WORD *)&physDev->DevCaps + (cap / 2));
@@ -337,7 +345,7 @@
/***********************************************************************
* WIN16DRV_ExtEscape
*/
-static INT WIN16DRV_ExtEscape( DC *dc, INT escape, INT in_count, LPCVOID in_data,
+static INT WIN16DRV_ExtEscape( PHYSDEV dev, INT escape, INT in_count, LPCVOID in_data,
INT out_count, LPVOID out_data )
{
#if 0
diff --git a/dlls/gdi/win16drv/objects.c b/dlls/gdi/win16drv/objects.c
index dc94067..34552f6 100644
--- a/dlls/gdi/win16drv/objects.c
+++ b/dlls/gdi/win16drv/objects.c
@@ -31,21 +31,70 @@
/***********************************************************************
- * WIN16DRV_SelectObject
+ * WIN16DRV_SelectBitmap
*/
-HGDIOBJ WIN16DRV_SelectObject( DC *dc, HGDIOBJ handle )
+HBITMAP WIN16DRV_SelectBitmap( PHYSDEV dev, HBITMAP bitmap )
{
- TRACE("hdc=%04x %04x\n", dc->hSelf, handle );
+ FIXME("BITMAP not implemented\n");
+ return 1;
+}
- switch(GetObjectType( handle ))
+
+/***********************************************************************
+ * WIN16DRV_SelectBrush
+ */
+HBRUSH WIN16DRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush )
+{
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ int nSize;
+ LOGBRUSH16 lBrush16;
+
+ if (!GetObject16( hbrush, sizeof(lBrush16), &lBrush16 )) return 0;
+
+ if ( physDev->BrushInfo )
{
- case OBJ_PEN: return WIN16DRV_PEN_SelectObject( dc, handle );
- case OBJ_BRUSH: return WIN16DRV_BRUSH_SelectObject( dc, handle );
- case OBJ_FONT: return WIN16DRV_FONT_SelectObject( dc, handle );
- case OBJ_REGION: return (HGDIOBJ)SelectClipRgn( dc->hSelf, handle );
- case OBJ_BITMAP:
- FIXME("BITMAP not implemented\n");
- return 1;
+ TRACE("UnRealizing BrushInfo\n");
+ nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_BRUSH,
+ physDev->BrushInfo,
+ physDev->BrushInfo, 0);
}
- return 0;
+ else
+ {
+ nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, DRVOBJ_BRUSH, &lBrush16, 0, 0);
+ physDev->BrushInfo = HeapAlloc( GetProcessHeap(), 0, nSize );
+ }
+
+ nSize = PRTDRV_RealizeObject(physDev->segptrPDEVICE, DRVOBJ_BRUSH,
+ &lBrush16, physDev->BrushInfo, win16drv_SegPtr_TextXForm);
+ return hbrush;
+}
+
+
+/***********************************************************************
+ * WIN16DRV_SelectPen
+ */
+HPEN WIN16DRV_SelectPen( PHYSDEV dev, HPEN hpen )
+{
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ int nSize;
+ LOGPEN16 lPen16;
+
+ if (!GetObject16( hpen, sizeof(lPen16), &lPen16 )) return 0;
+
+ if ( physDev->PenInfo )
+ {
+ TRACE("UnRealizing PenInfo\n");
+ nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_PEN,
+ physDev->PenInfo,
+ physDev->PenInfo, 0);
+ }
+ else
+ {
+ nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, DRVOBJ_PEN, &lPen16, 0, 0);
+ physDev->PenInfo = HeapAlloc( GetProcessHeap(), 0, nSize );
+ }
+
+ nSize = PRTDRV_RealizeObject(physDev->segptrPDEVICE, DRVOBJ_PEN,
+ &lPen16, physDev->PenInfo, 0);
+ return hpen;
}
diff --git a/dlls/gdi/win16drv/pen.c b/dlls/gdi/win16drv/pen.c
deleted file mode 100644
index 022a550..0000000
--- a/dlls/gdi/win16drv/pen.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * GDI pen objects
- *
- * Copyright 1997 John Harvey
- *
- * 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 "win16drv/win16drv.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(win16drv);
-
-/***********************************************************************
- * PEN_SelectObject
- */
-HPEN WIN16DRV_PEN_SelectObject( DC * dc, HPEN hpen )
-{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
- HPEN prevHandle = dc->hPen;
- int nSize;
- LOGPEN16 lPen16;
-
- if (!GetObject16( hpen, sizeof(lPen16), &lPen16 )) return 0;
-
- dc->hPen = hpen;
-
- if ( physDev->PenInfo )
- {
- TRACE("UnRealizing PenInfo\n");
- nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, -DRVOBJ_PEN,
- physDev->PenInfo,
- physDev->PenInfo, 0);
- }
- else
- {
- nSize = PRTDRV_RealizeObject (physDev->segptrPDEVICE, DRVOBJ_PEN,
- &lPen16, 0, 0);
- physDev->PenInfo = HeapAlloc( GetProcessHeap(), 0, nSize );
- }
-
- nSize = PRTDRV_RealizeObject(physDev->segptrPDEVICE, DRVOBJ_PEN,
- &lPen16,
- physDev->PenInfo,
- 0);
-
- return prevHandle;
-}
-
diff --git a/dlls/gdi/win16drv/text.c b/dlls/gdi/win16drv/text.c
index d47d27d..ab6f80f 100644
--- a/dlls/gdi/win16drv/text.c
+++ b/dlls/gdi/win16drv/text.c
@@ -31,11 +31,12 @@
/***********************************************************************
* WIN16DRV_ExtTextOut
*/
-BOOL WIN16DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+BOOL WIN16DRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR wstr, UINT count,
const INT *lpDx )
{
- WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
+ WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dev;
+ DC *dc = physDev->dc;
BOOL bRet = 1;
RECT16 clipRect;
RECT16 opaqueRect;
diff --git a/dlls/gdi/win16drv/win16drv.h b/dlls/gdi/win16drv/win16drv.h
index 66aff8a..dbf9439 100644
--- a/dlls/gdi/win16drv/win16drv.h
+++ b/dlls/gdi/win16drv/win16drv.h
@@ -205,6 +205,8 @@
LPFONTINFO16 FontInfo; /* Current font realized by printer driver */
LPLOGBRUSH16 BrushInfo; /* Current brush realized by printer driver */
LPLOGPEN16 PenInfo; /* Current pen realized by printer driver */
+ HDC hdc;
+ DC *dc;
DeviceCaps DevCaps; /* Device caps */
} WIN16DRV_PDEVICE;
@@ -257,26 +259,27 @@
/* Wine driver functions */
extern const DC_FUNCTIONS *WIN16DRV_Init(void);
-extern BOOL WIN16DRV_GetCharWidth( struct tagDC *dc, UINT firstChar, UINT lastChar,
- LPINT buffer );
+extern BOOL WIN16DRV_GetCharWidth( PHYSDEV dev, UINT firstChar, UINT lastChar, LPINT buffer );
-extern BOOL WIN16DRV_GetTextExtentPoint( DC *dc, LPCWSTR str, INT count,
+extern BOOL WIN16DRV_GetTextExtentPoint( PHYSDEV dev, LPCWSTR str, INT count,
LPSIZE size );
-extern BOOL WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRICW *metrics );
+extern BOOL WIN16DRV_GetTextMetrics( PHYSDEV dev, TEXTMETRICW *metrics );
-extern BOOL WIN16DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+extern BOOL WIN16DRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR str, UINT count,
const INT *lpDx );
-extern BOOL WIN16DRV_LineTo( DC *dc, INT x, INT y );
-extern BOOL WIN16DRV_Polygon(DC *dc, const POINT* pt, INT count );
-extern BOOL WIN16DRV_Polyline(DC *dc, const POINT* pt, INT count );
-extern BOOL WIN16DRV_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom);
-extern HGDIOBJ WIN16DRV_SelectObject( DC *dc, HGDIOBJ handle );
-extern BOOL WIN16DRV_PatBlt( struct tagDC *dc, INT left, INT top,
+extern BOOL WIN16DRV_LineTo( PHYSDEV dev, INT x, INT y );
+extern BOOL WIN16DRV_Polygon(PHYSDEV dev, const POINT* pt, INT count );
+extern BOOL WIN16DRV_Polyline(PHYSDEV dev, const POINT* pt, INT count );
+extern BOOL WIN16DRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom);
+extern HBITMAP WIN16DRV_SelectBitmap( PHYSDEV dev, HBITMAP handle );
+extern HBRUSH WIN16DRV_SelectBrush( PHYSDEV dev, HBRUSH handle );
+extern HFONT WIN16DRV_SelectFont( PHYSDEV dev, HFONT handle );
+extern HPEN WIN16DRV_SelectPen( PHYSDEV dev, HPEN handle );
+extern BOOL WIN16DRV_PatBlt( PHYSDEV dev, INT left, INT top,
INT width, INT height, DWORD rop );
-extern BOOL WIN16DRV_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom);
-extern BOOL WIN16DRV_EnumDeviceFonts( HDC hdc, LPLOGFONTW plf,
- DEVICEFONTENUMPROC proc, LPARAM lp );
+extern BOOL WIN16DRV_Ellipse(PHYSDEV dev, INT left, INT top, INT right, INT bottom);
+extern BOOL WIN16DRV_EnumDeviceFonts( HDC hdc, LPLOGFONTW plf, DEVICEFONTENUMPROC proc, LPARAM lp );
extern INT WIN16DRV_ExtDeviceMode(LPSTR lpszDriver, HWND hwnd,
LPDEVMODEA lpdmOutput,
@@ -287,10 +290,6 @@
LPCSTR lpszPort, WORD fwCapability,
LPSTR lpszOutput, LPDEVMODEA lpdm);
-extern HBRUSH WIN16DRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush );
-extern HFONT WIN16DRV_FONT_SelectObject( DC * dc, HFONT hfont );
-extern HPEN WIN16DRV_PEN_SelectObject( DC * dc, HPEN hpen );
-
/*
* Wine 16bit driver global variables
*/
diff --git a/dlls/ttydrv/bitmap.c b/dlls/ttydrv/bitmap.c
index 8802871..17ded28 100644
--- a/dlls/ttydrv/bitmap.c
+++ b/dlls/ttydrv/bitmap.c
@@ -136,23 +136,29 @@
}
/***********************************************************************
- * TTYDRV_DC_BITMAP_SelectObject
+ * TTYDRV_SelectBitmap (TTYDRV.@)
*/
-HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap)
+HBITMAP TTYDRV_SelectBitmap(TTYDRV_PDEVICE *physDev, HBITMAP hbitmap)
{
- HBITMAP hPreviousBitmap;
+ DC *dc = physDev->dc;
+ BITMAPOBJ *bitmap;
- TRACE("(%p, 0x%04x, %p)\n", dc, hbitmap, bitmap);
+ TRACE("(%p, 0x%04x)\n", dc, hbitmap);
if(!(dc->flags & DC_MEMORY))
return 0;
+ if (!(bitmap = GDI_GetObjPtr( hbitmap, BITMAP_MAGIC ))) return 0;
/* Assure that the bitmap device dependent */
if(!bitmap->physBitmap && !TTYDRV_DC_CreateBitmap(hbitmap))
- return 0;
+ {
+ GDI_ReleaseObj( hbitmap );
+ return 0;
+ }
if(bitmap->funcs != dc->funcs) {
ERR("Trying to select a non-TTY DDB into a TTY DC\n");
+ GDI_ReleaseObj( hbitmap );
return 0;
}
@@ -169,15 +175,14 @@
HRGN hrgn;
if(!(hrgn = CreateRectRgn(0, 0, bitmap->bitmap.bmWidth, bitmap->bitmap.bmHeight)))
- return 0;
-
+ {
+ GDI_ReleaseObj( hbitmap );
+ return 0;
+ }
dc->hVisRgn = hrgn;
}
-
- hPreviousBitmap = dc->hBitmap;
- dc->hBitmap = hbitmap;
-
- return hPreviousBitmap;
+ GDI_ReleaseObj( hbitmap );
+ return hbitmap;
}
/***********************************************************************
@@ -194,95 +199,25 @@
* TTYDRV_BITMAP_CreateDIBSection
*/
HBITMAP TTYDRV_BITMAP_CreateDIBSection(
- DC *dc, BITMAPINFO *bmi, UINT usage,
+ TTYDRV_PDEVICE *physDev, BITMAPINFO *bmi, UINT usage,
LPVOID *bits, HANDLE section, DWORD offset)
{
- FIXME("(%p, %p, %u, %p, 0x%04x, %ld): stub\n",
- dc, bmi, usage, bits, section, offset);
+ FIXME("(%x, %p, %u, %p, 0x%04x, %ld): stub\n",
+ physDev->hdc, bmi, usage, bits, section, offset);
return (HBITMAP) NULL;
}
/***********************************************************************
- * TTYDRV_BITMAP_DeleteDIBSection
- */
-void TTYDRV_BITMAP_DeleteDIBSection(BITMAPOBJ *bmp)
-{
- FIXME("(%p): stub\n", bmp);
-}
-
-/***********************************************************************
- * TTYDRV_BITMAP_SetDIBColorTable
- */
-UINT TTYDRV_BITMAP_SetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, const RGBQUAD *colors)
-{
- FIXME("(%p): stub\n", bmp);
- return 0;
-}
-
-/***********************************************************************
- * TTYDRV_BITMAP_GetDIBColorTable
- */
-UINT TTYDRV_BITMAP_GetDIBColorTable(BITMAPOBJ *bmp, DC *dc, UINT start, UINT count, RGBQUAD *colors)
-{
- FIXME("(%p): stub\n", bmp);
- return 0;
-}
-
-/***********************************************************************
- * TTYDRV_BITMAP_Lock
- */
-INT TTYDRV_BITMAP_Lock(BITMAPOBJ *bmp, INT req, BOOL lossy)
-{
- FIXME("(%p): stub\n", bmp);
- return DIB_Status_None;
-}
-
-/***********************************************************************
- * TTYDRV_BITMAP_Unlock
- */
-void TTYDRV_BITMAP_Unlock(BITMAPOBJ *bmp, BOOL commit)
-{
- FIXME("(%p): stub\n", bmp);
-}
-
-/***********************************************************************
- * TTYDRV_BITMAP_GetDIBits
- */
-INT TTYDRV_BITMAP_GetDIBits(
- BITMAPOBJ *bmp, DC *dc, UINT startscan, UINT lines,
- LPVOID bits, BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap)
-{
- FIXME("(%p, %p, %u, %u, %p, %p, %u, 0x%04x): stub\n",
- bmp, dc, startscan, lines, bits, info, coloruse, hbitmap);
-
- return 0;
-}
-
-
-/***********************************************************************
- * TTYDRV_BITMAP_SetDIBits
- */
-INT TTYDRV_BITMAP_SetDIBits(
- BITMAPOBJ *bmp, DC *dc, UINT startscan, UINT lines,
- LPCVOID bits, const BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap)
-{
- FIXME("(%p, %p, %u, %u, %p, %p, %u, 0x%04x): stub\n",
- bmp, dc, startscan, lines, bits, info, coloruse, hbitmap);
-
- return 0;
-}
-
-/***********************************************************************
* TTYDRV_DC_SetDIBitsToDevice
*/
-INT TTYDRV_DC_SetDIBitsToDevice(DC *dc, INT xDest, INT yDest, DWORD cx,
+INT TTYDRV_DC_SetDIBitsToDevice(TTYDRV_PDEVICE *physDev, INT xDest, INT yDest, DWORD cx,
DWORD cy, INT xSrc, INT ySrc,
UINT startscan, UINT lines, LPCVOID bits,
const BITMAPINFO *info, UINT coloruse)
{
- FIXME("(%p, %d, %d, %ld, %ld, %d, %d, %u, %u, %p, %p, %u): stub\n",
- dc, xDest, yDest, cx, cy, xSrc, ySrc, startscan, lines, bits, info, coloruse);
+ FIXME("(%x, %d, %d, %ld, %ld, %d, %d, %u, %u, %p, %p, %u): stub\n",
+ physDev->hdc, xDest, yDest, cx, cy, xSrc, ySrc, startscan, lines, bits, info, coloruse);
return 0;
}
diff --git a/dlls/ttydrv/dc.c b/dlls/ttydrv/dc.c
index 4d9e70e..e2a8b50 100644
--- a/dlls/ttydrv/dc.c
+++ b/dlls/ttydrv/dc.c
@@ -31,17 +31,6 @@
/**********************************************************************/
-BITMAP_DRIVER TTYDRV_BITMAP_Driver =
-{
- TTYDRV_BITMAP_SetDIBits,
- TTYDRV_BITMAP_GetDIBits,
- TTYDRV_BITMAP_DeleteDIBSection,
- TTYDRV_BITMAP_SetDIBColorTable,
- TTYDRV_BITMAP_GetDIBColorTable,
- TTYDRV_BITMAP_Lock,
- TTYDRV_BITMAP_Unlock
-};
-
PALETTE_DRIVER TTYDRV_PALETTE_Driver =
{
TTYDRV_PALETTE_SetMapping,
@@ -56,7 +45,6 @@
*/
BOOL TTYDRV_GDI_Initialize(void)
{
- BITMAP_Driver = &TTYDRV_BITMAP_Driver;
PALETTE_Driver = &TTYDRV_PALETTE_Driver;
return TTYDRV_PALETTE_Initialize();
@@ -84,7 +72,9 @@
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;
@@ -121,21 +111,20 @@
/***********************************************************************
* TTYDRV_DC_DeleteDC
*/
-BOOL TTYDRV_DC_DeleteDC(DC *dc)
+BOOL TTYDRV_DC_DeleteDC(TTYDRV_PDEVICE *physDev)
{
- TRACE("(%p)\n", dc);
+ TRACE("(%x)\n", physDev->hdc);
- HeapFree( GetProcessHeap(), 0, dc->physDev );
- dc->physDev = NULL;
-
- return TRUE;
+ physDev->dc->physDev = NULL;
+ HeapFree( GetProcessHeap(), 0, physDev );
+ return TRUE;
}
/***********************************************************************
* GetDeviceCaps (TTYDRV.@)
*/
-INT TTYDRV_GetDeviceCaps( DC *dc, INT cap )
+INT TTYDRV_GetDeviceCaps( TTYDRV_PDEVICE *physDev, INT cap )
{
switch(cap)
{
@@ -209,7 +198,7 @@
case BTLALIGNMENT:
return 0;
default:
- FIXME("(%04x): unsupported capability %d, will return 0\n", dc->hSelf, cap );
+ FIXME("(%04x): unsupported capability %d, will return 0\n", physDev->hdc, cap );
return 0;
}
}
@@ -218,7 +207,7 @@
/***********************************************************************
* TTYDRV_DC_SetDeviceClipping
*/
-void TTYDRV_DC_SetDeviceClipping(DC *dc)
+void TTYDRV_DC_SetDeviceClipping(TTYDRV_PDEVICE *physDev)
{
- TRACE("(%p)\n", dc);
+ TRACE("(%x)\n", physDev->hdc);
}
diff --git a/dlls/ttydrv/graphics.c b/dlls/ttydrv/graphics.c
index 5b2dc47..25a205f 100644
--- a/dlls/ttydrv/graphics.c
+++ b/dlls/ttydrv/graphics.c
@@ -30,69 +30,63 @@
/***********************************************************************
* TTYDRV_DC_Arc
*/
-BOOL TTYDRV_DC_Arc(DC *dc, INT left, INT top, INT right, INT bottom,
+BOOL TTYDRV_DC_Arc(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend)
{
- FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
- dc, left, top, right, bottom, xstart, ystart, xend, yend);
-
+ FIXME("(%x, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
+ physDev->hdc, left, top, right, bottom, xstart, ystart, xend, yend);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_Chord
*/
-BOOL TTYDRV_DC_Chord(DC *dc, INT left, INT top, INT right, INT bottom,
+BOOL TTYDRV_DC_Chord(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend)
{
- FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
- dc, left, top, right, bottom, xstart, ystart, xend, yend);
-
+ FIXME("(%x, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
+ physDev->hdc, left, top, right, bottom, xstart, ystart, xend, yend);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_Ellipse
*/
-BOOL TTYDRV_DC_Ellipse(DC *dc, INT left, INT top, INT right, INT bottom)
+BOOL TTYDRV_DC_Ellipse(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom)
{
- FIXME("(%p, %d, %d, %d, %d): stub\n",
- dc, left, top, right, bottom);
-
+ FIXME("(%x, %d, %d, %d, %d): stub\n", physDev->hdc, left, top, right, bottom);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_ExtFloodFill
*/
-BOOL TTYDRV_DC_ExtFloodFill(DC *dc, INT x, INT y,
+BOOL TTYDRV_DC_ExtFloodFill(TTYDRV_PDEVICE *physDev, INT x, INT y,
COLORREF color, UINT fillType)
{
- FIXME("(%p, %d, %d, 0x%08lx, %u): stub\n", dc, x, y, color, fillType);
-
+ FIXME("(%x, %d, %d, 0x%08lx, %u): stub\n", physDev->hdc, x, y, color, fillType);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_GetPixel
*/
-COLORREF TTYDRV_DC_GetPixel(DC *dc, INT x, INT y)
+COLORREF TTYDRV_DC_GetPixel(TTYDRV_PDEVICE *physDev, INT x, INT y)
{
- FIXME("(%p, %d, %d): stub\n", dc, x, y);
-
+ FIXME("(%x, %d, %d): stub\n", physDev->hdc, x, y);
return RGB(0,0,0); /* FIXME: Always returns black */
}
/***********************************************************************
* TTYDRV_DC_LineTo
*/
-BOOL TTYDRV_DC_LineTo(DC *dc, INT x, INT y)
+BOOL TTYDRV_DC_LineTo(TTYDRV_PDEVICE *physDev, INT x, INT y)
{
#ifdef WINE_CURSES
- TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
INT row1, col1, row2, col2;
+ DC *dc = physDev->dc;
- TRACE("(%p, %d, %d)\n", dc, x, y);
+ TRACE("(%x, %d, %d)\n", physDev->hdc, x, y);
if(!physDev->window)
return FALSE;
@@ -126,7 +120,7 @@
return TRUE;
#else /* defined(WINE_CURSES) */
- FIXME("(%p, %d, %d): stub\n", dc, x, y);
+ FIXME("(%x, %d, %d): stub\n", physDev->hdc, x, y);
return TRUE;
#endif /* defined(WINE_CURSES) */
@@ -135,61 +129,56 @@
/***********************************************************************
* TTYDRV_DC_PaintRgn
*/
-BOOL TTYDRV_DC_PaintRgn(DC *dc, HRGN hrgn)
+BOOL TTYDRV_DC_PaintRgn(TTYDRV_PDEVICE *physDev, HRGN hrgn)
{
- FIXME("(%p, 0x%04x): stub\n", dc, hrgn);
-
+ FIXME("(%x, 0x%04x): stub\n", physDev->hdc, hrgn);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_Pie
*/
-BOOL TTYDRV_DC_Pie(DC *dc, INT left, INT top, INT right, INT bottom,
+BOOL TTYDRV_DC_Pie(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
INT xstart, INT ystart, INT xend, INT yend)
{
- FIXME("(%p, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
- dc, left, top, right, bottom, xstart, ystart, xend, yend);
-
+ FIXME("(%x, %d, %d, %d, %d, %d, %d, %d, %d): stub\n",
+ physDev->hdc, left, top, right, bottom, xstart, ystart, xend, yend);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_Polygon
*/
-BOOL TTYDRV_DC_Polygon(DC *dc, const POINT* pt, INT count)
+BOOL TTYDRV_DC_Polygon(TTYDRV_PDEVICE *physDev, const POINT* pt, INT count)
{
- FIXME("(%p, %p, %d): stub\n", dc, pt, count);
-
+ FIXME("(%x, %p, %d): stub\n", physDev->hdc, pt, count);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_Polyline
*/
-BOOL TTYDRV_DC_Polyline(DC *dc, const POINT* pt, INT count)
+BOOL TTYDRV_DC_Polyline(TTYDRV_PDEVICE *physDev, const POINT* pt, INT count)
{
- FIXME("(%p, %p, %d): stub\n", dc, pt, count);
-
+ FIXME("(%x, %p, %d): stub\n", physDev->hdc, pt, count);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_PolyPolygon
*/
-BOOL TTYDRV_DC_PolyPolygon(DC *dc, const POINT* pt, const INT* counts, UINT polygons)
+BOOL TTYDRV_DC_PolyPolygon(TTYDRV_PDEVICE *physDev, const POINT* pt, const INT* counts, UINT polygons)
{
- FIXME("(%p, %p, %p, %u): stub\n", dc, pt, counts, polygons);
-
+ FIXME("(%x, %p, %p, %u): stub\n", physDev->hdc, pt, counts, polygons);
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_PolyPolyline
*/
-BOOL TTYDRV_DC_PolyPolyline(DC *dc, const POINT* pt, const DWORD* counts, DWORD polylines)
+BOOL TTYDRV_DC_PolyPolyline(TTYDRV_PDEVICE *physDev, const POINT* pt, const DWORD* counts, DWORD polylines)
{
- FIXME("(%p, %p, %p, %lu): stub\n", dc, pt, counts, polylines);
+ FIXME("(%x, %p, %p, %lu): stub\n", physDev->hdc, pt, counts, polylines);
return TRUE;
}
@@ -197,13 +186,13 @@
/***********************************************************************
* TTYDRV_DC_Rectangle
*/
-BOOL TTYDRV_DC_Rectangle(DC *dc, INT left, INT top, INT right, INT bottom)
+BOOL TTYDRV_DC_Rectangle(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom)
{
#ifdef WINE_CURSES
- TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
INT row1, col1, row2, col2;
+ DC *dc = physDev->dc;
- TRACE("(%p, %d, %d, %d, %d)\n", dc, left, top, right, bottom);
+ TRACE("(%x, %d, %d, %d, %d)\n", physDev->hdc, left, top, right, bottom);
if(!physDev->window)
return FALSE;
@@ -245,7 +234,7 @@
return TRUE;
#else /* defined(WINE_CURSES) */
- FIXME("(%p, %d, %d, %d, %d): stub\n", dc, left, top, right, bottom);
+ FIXME("(%x, %d, %d, %d, %d): stub\n", physDev->hdc, left, top, right, bottom);
return TRUE;
#endif /* defined(WINE_CURSES) */
@@ -254,40 +243,25 @@
/***********************************************************************
* TTYDRV_DC_RoundRect
*/
-BOOL TTYDRV_DC_RoundRect(DC *dc, INT left, INT top, INT right,
+BOOL TTYDRV_DC_RoundRect(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom, INT ell_width, INT ell_height)
{
- FIXME("(%p, %d, %d, %d, %d, %d, %d): stub\n",
- dc, left, top, right, bottom, ell_width, ell_height);
+ FIXME("(%x, %d, %d, %d, %d, %d, %d): stub\n",
+ physDev->hdc, left, top, right, bottom, ell_width, ell_height);
return TRUE;
}
/***********************************************************************
- * TTYDRV_DC_SetBkColor
- */
-COLORREF TTYDRV_DC_SetBkColor(DC *dc, COLORREF color)
-{
- COLORREF oldColor;
-
- TRACE("(%p, 0x%08lx)\n", dc, color);
-
- oldColor = dc->backgroundColor;
- dc->backgroundColor = color;
-
- return oldColor;
-}
-
-/***********************************************************************
* TTYDRV_DC_SetPixel
*/
-COLORREF TTYDRV_DC_SetPixel(DC *dc, INT x, INT y, COLORREF color)
+COLORREF TTYDRV_DC_SetPixel(TTYDRV_PDEVICE *physDev, INT x, INT y, COLORREF color)
{
#ifdef WINE_CURSES
- TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
INT row, col;
+ DC *dc = physDev->dc;
- TRACE("(%p, %d, %d, 0x%08lx)\n", dc, x, y, color);
+ TRACE("(%x, %d, %d, 0x%08lx)\n", physDev->hdc, x, y, color);
if(!physDev->window)
return FALSE;
@@ -300,69 +274,45 @@
return RGB(0,0,0); /* FIXME: Always returns black */
#else /* defined(WINE_CURSES) */
- FIXME("(%p, %d, %d, 0x%08lx): stub\n", dc, x, y, color);
+ FIXME("(%x, %d, %d, 0x%08lx): stub\n", physDev->hdc, x, y, color);
return RGB(0,0,0); /* FIXME: Always returns black */
#endif /* defined(WINE_CURSES) */
}
/***********************************************************************
- * TTYDRV_DC_SetTextColor
- */
-COLORREF TTYDRV_DC_SetTextColor(DC *dc, COLORREF color)
-{
- COLORREF oldColor;
-
- TRACE("(%p, 0x%08lx)\n", dc, color);
-
- oldColor = dc->textColor;
- dc->textColor = color;
-
- return oldColor;
-}
-
-
-/***********************************************************************
* TTYDRV_DC_BitBlt
*/
-BOOL TTYDRV_DC_BitBlt(DC *dcDst, INT xDst, INT yDst,
- INT width, INT height, DC *dcSrc,
+BOOL TTYDRV_DC_BitBlt(TTYDRV_PDEVICE *physDevDst, INT xDst, INT yDst,
+ INT width, INT height, TTYDRV_PDEVICE *physDevSrc,
INT xSrc, INT ySrc, DWORD rop)
{
- FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %lu): stub\n",
- dcDst, xDst, yDst, width, height,
- dcSrc, xSrc, ySrc, rop
- );
-
+ FIXME("(%x, %d, %d, %d, %d, %x, %d, %d, %lu): stub\n",
+ physDevDst->hdc, xDst, yDst, width, height, physDevSrc->hdc, xSrc, ySrc, rop );
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_PatBlt
*/
-BOOL TTYDRV_DC_PatBlt(DC *dc, INT left, INT top,
+BOOL TTYDRV_DC_PatBlt(TTYDRV_PDEVICE *physDev, INT left, INT top,
INT width, INT height, DWORD rop)
{
- FIXME("(%p, %d, %d, %d, %d, %lu): stub\n",
- dc, left, top, width, height, rop
- );
-
-
+ FIXME("(%x, %d, %d, %d, %d, %lu): stub\n", physDev->hdc, left, top, width, height, rop );
return TRUE;
}
/***********************************************************************
* TTYDRV_DC_StretchBlt
*/
-BOOL TTYDRV_DC_StretchBlt(DC *dcDst, INT xDst, INT yDst,
+BOOL TTYDRV_DC_StretchBlt(TTYDRV_PDEVICE *physDevDst, INT xDst, INT yDst,
INT widthDst, INT heightDst,
- DC *dcSrc, INT xSrc, INT ySrc,
+ TTYDRV_PDEVICE *physDevSrc, INT xSrc, INT ySrc,
INT widthSrc, INT heightSrc, DWORD rop)
{
- FIXME("(%p, %d, %d, %d, %d, %p, %d, %d, %d, %d, %lu): stub\n",
- dcDst, xDst, yDst, widthDst, heightDst,
- dcSrc, xSrc, ySrc, widthSrc, heightSrc, rop
- );
+ FIXME("(%x, %d, %d, %d, %d, %x, %d, %d, %d, %d, %lu): stub\n",
+ physDevDst->hdc, xDst, yDst, widthDst, heightDst,
+ physDevSrc->hdc, xSrc, ySrc, widthSrc, heightSrc, rop );
return TRUE;
}
@@ -370,18 +320,18 @@
/***********************************************************************
* TTYDRV_DC_ExtTextOut
*/
-BOOL TTYDRV_DC_ExtTextOut(DC *dc, INT x, INT y, UINT flags,
+BOOL TTYDRV_DC_ExtTextOut(TTYDRV_PDEVICE *physDev, INT x, INT y, UINT flags,
const RECT *lpRect, LPCWSTR str, UINT count,
const INT *lpDx)
{
#ifdef WINE_CURSES
- TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
INT row, col;
LPSTR ascii;
DWORD len;
+ DC *dc = physDev->dc;
- TRACE("(%p, %d, %d, 0x%08x, %p, %s, %d, %p)\n",
- dc, x, y, flags, lpRect, debugstr_wn(str, count), count, lpDx);
+ TRACE("(%x, %d, %d, 0x%08x, %p, %s, %d, %p)\n",
+ physDev->hdc, x, y, flags, lpRect, debugstr_wn(str, count), count, lpDx);
if(!physDev->window)
return FALSE;
@@ -411,8 +361,8 @@
return TRUE;
#else /* defined(WINE_CURSES) */
- FIXME("(%p, %d, %d, 0x%08x, %p, %s, %d, %p): stub\n",
- dc, x, y, flags, lpRect, debugstr_wn(str,count), count, lpDx);
+ FIXME("(%x, %d, %d, 0x%08x, %p, %s, %d, %p): stub\n",
+ physDev->hdc, x, y, flags, lpRect, debugstr_wn(str,count), count, lpDx);
return TRUE;
#endif /* defined(WINE_CURSES) */
@@ -421,13 +371,12 @@
/***********************************************************************
* TTYDRV_DC_GetCharWidth
*/
-BOOL TTYDRV_DC_GetCharWidth(DC *dc, UINT firstChar, UINT lastChar,
+BOOL TTYDRV_DC_GetCharWidth(TTYDRV_PDEVICE *physDev, UINT firstChar, UINT lastChar,
LPINT buffer)
{
UINT c;
- TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
- FIXME("(%p, %u, %u, %p): semistub\n", dc, firstChar, lastChar, buffer);
+ FIXME("(%x, %u, %u, %p): semistub\n", physDev->hdc, firstChar, lastChar, buffer);
for(c=firstChar; c<=lastChar; c++) {
buffer[c-firstChar] = physDev->cellWidth;
@@ -439,12 +388,10 @@
/***********************************************************************
* TTYDRV_DC_GetTextExtentPoint
*/
-BOOL TTYDRV_DC_GetTextExtentPoint(DC *dc, LPCWSTR str, INT count,
+BOOL TTYDRV_DC_GetTextExtentPoint(TTYDRV_PDEVICE *physDev, LPCWSTR str, INT count,
LPSIZE size)
{
- TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
-
- TRACE("(%p, %s, %d, %p)\n", dc, debugstr_wn(str, count), count, size);
+ TRACE("(%x, %s, %d, %p)\n", physDev->hdc, debugstr_wn(str, count), count, size);
size->cx = count * physDev->cellWidth;
size->cy = physDev->cellHeight;
@@ -455,11 +402,9 @@
/***********************************************************************
* TTYDRV_DC_GetTextMetrics
*/
-BOOL TTYDRV_DC_GetTextMetrics(DC *dc, LPTEXTMETRICW lptm)
+BOOL TTYDRV_DC_GetTextMetrics(TTYDRV_PDEVICE *physDev, LPTEXTMETRICW lptm)
{
- TTYDRV_PDEVICE *physDev = (TTYDRV_PDEVICE *) dc->physDev;
-
- TRACE("(%p, %p)\n", dc, lptm);
+ TRACE("(%x, %p)\n", physDev->hdc, lptm);
lptm->tmHeight = physDev->cellHeight;
lptm->tmAscent = 0;
diff --git a/dlls/ttydrv/objects.c b/dlls/ttydrv/objects.c
index 6737e5b..0980485 100644
--- a/dlls/ttydrv/objects.c
+++ b/dlls/ttydrv/objects.c
@@ -29,89 +29,20 @@
/**********************************************************************/
-extern HBITMAP TTYDRV_DC_BITMAP_SelectObject(DC *dc, HBITMAP hbitmap, BITMAPOBJ *bitmap);
extern BOOL TTYDRV_DC_BITMAP_DeleteObject(HBITMAP hbitmap, BITMAPOBJ *bitmap);
/***********************************************************************
- * TTYDRV_DC_BRUSH_SelectObject
+ * TTYDRV_SelectFont (TTYDRV.@)
*/
-static HBRUSH TTYDRV_DC_BRUSH_SelectObject(DC *dc, HBRUSH hbrush)
+HFONT TTYDRV_SelectFont(TTYDRV_PDEVICE *physDev, HFONT hfont)
{
- HBRUSH hPreviousBrush;
-
- TRACE("(%p, 0x%04x)\n", dc, hbrush);
-
- hPreviousBrush = dc->hBrush;
- dc->hBrush = hbrush;
-
- return hPreviousBrush;
-}
-
-/***********************************************************************
- * TTYDRV_DC_FONT_SelectObject
- */
-static HFONT TTYDRV_DC_FONT_SelectObject(DC* dc, HFONT hfont)
-{
- TRACE("(%p, 0x%04x)\n", dc, hfont);
+ TRACE("(%x, 0x%04x)\n", physDev->hdc, hfont);
return TRUE; /* Use device font */
}
/***********************************************************************
- * TTYDRV_DC_PEN_SelectObject
- */
-static HPEN TTYDRV_DC_PEN_SelectObject(DC *dc, HBRUSH hpen)
-{
- HPEN hPreviousPen;
-
- TRACE("(%p, 0x%04x)\n", dc, hpen);
-
- hPreviousPen = dc->hPen;
- dc->hPen = hpen;
-
- return hPreviousPen;
-}
-
-/***********************************************************************
- * TTYDRV_DC_SelectObject
- */
-HGDIOBJ TTYDRV_DC_SelectObject(DC *dc, HGDIOBJ handle)
-{
- GDIOBJHDR *ptr = GDI_GetObjPtr(handle, MAGIC_DONTCARE);
- HGDIOBJ result = 0;
-
- if(!ptr) return 0;
-
- switch(GDIMAGIC(ptr->wMagic))
- {
- case BITMAP_MAGIC:
- result = TTYDRV_DC_BITMAP_SelectObject(dc, handle, (BITMAPOBJ *) ptr);
- break;
- case BRUSH_MAGIC:
- result = TTYDRV_DC_BRUSH_SelectObject(dc, handle);
- break;
- case FONT_MAGIC:
- result = TTYDRV_DC_FONT_SelectObject(dc, handle);
- break;
- case PEN_MAGIC:
- result = TTYDRV_DC_PEN_SelectObject(dc, handle);
- break;
- case REGION_MAGIC:
- /* FIXME: Shouldn't be handled here */
- result = (HGDIOBJ) SelectClipRgn(dc->hSelf, handle);
- break;
- default:
- ERR("handle (0x%04x) has unknown magic (0x%04x)\n",
- handle, GDIMAGIC(ptr->wMagic));
- }
-
- GDI_ReleaseObj(handle);
-
- return result;
-}
-
-/***********************************************************************
* TTYDRV_DC_DeleteObject
*/
BOOL TTYDRV_DC_DeleteObject(HGDIOBJ handle)
@@ -133,8 +64,7 @@
result = TRUE;
break;
default:
- ERR("handle (0x%04x) has unknown magic (0x%04x)\n",
- handle, GDIMAGIC(ptr->wMagic));
+ ERR("handle (0x%04x) has unknown magic (0x%04x)\n", handle, GDIMAGIC(ptr->wMagic));
result = FALSE;
}
diff --git a/dlls/ttydrv/ttydrv.h b/dlls/ttydrv/ttydrv.h
index 3b18e46..69054ea 100644
--- a/dlls/ttydrv/ttydrv.h
+++ b/dlls/ttydrv/ttydrv.h
@@ -40,7 +40,6 @@
struct tagBITMAPOBJ;
struct tagCLASS;
-struct tagDC;
struct tagDESKTOP;
struct tagPALETTEOBJ;
struct tagWND;
@@ -56,24 +55,9 @@
* TTY GDI driver
*/
-extern BOOL TTYDRV_GDI_Initialize(void);
-
-/* TTY GDI bitmap driver */
-
-extern HBITMAP TTYDRV_BITMAP_CreateDIBSection(struct tagDC *dc, BITMAPINFO *bmi, UINT usage, LPVOID *bits, HANDLE section, DWORD offset);
-extern INT TTYDRV_BITMAP_SetDIBits(struct tagBITMAPOBJ *bmp, struct tagDC *dc, UINT startscan, UINT lines, LPCVOID bits, const BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap);
-extern INT TTYDRV_BITMAP_GetDIBits(struct tagBITMAPOBJ *bmp, struct tagDC *dc, UINT startscan, UINT lines, LPVOID bits, BITMAPINFO *info, UINT coloruse, HBITMAP hbitmap);
-extern void TTYDRV_BITMAP_DeleteDIBSection(struct tagBITMAPOBJ *bmp);
-extern UINT TTYDRV_BITMAP_SetDIBColorTable(struct tagBITMAPOBJ *,struct tagDC *,UINT,UINT,const RGBQUAD *);
-extern UINT TTYDRV_BITMAP_GetDIBColorTable(struct tagBITMAPOBJ *,struct tagDC *,UINT,UINT,RGBQUAD *);
-extern INT TTYDRV_BITMAP_Lock(struct tagBITMAPOBJ *,INT,BOOL);
-extern void TTYDRV_BITMAP_Unlock(struct tagBITMAPOBJ *,BOOL);
-
-#ifndef WINE_CURSES
-typedef struct { int dummy; } WINDOW;
-#endif
-
typedef struct {
+ HDC hdc;
+ DC *dc;
WINDOW *window;
int cellWidth;
int cellHeight;
@@ -83,42 +67,50 @@
int dummy; /* FIXME: Remove later */
} TTYDRV_PHYSBITMAP;
+extern BOOL TTYDRV_GDI_Initialize(void);
+
+/* TTY GDI bitmap driver */
+
+extern HBITMAP TTYDRV_BITMAP_CreateDIBSection(TTYDRV_PDEVICE *physDev, BITMAPINFO *bmi, UINT usage, LPVOID *bits, HANDLE section, DWORD offset);
+extern void TTYDRV_BITMAP_DeleteDIBSection(struct tagBITMAPOBJ *bmp);
+
+#ifndef WINE_CURSES
+typedef struct { int dummy; } WINDOW;
+#endif
+
extern BOOL TTYDRV_DC_CreateBitmap(HBITMAP hbitmap);
-extern BOOL TTYDRV_DC_Arc(struct tagDC *dc, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend);
+extern BOOL TTYDRV_DC_Arc(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend);
extern LONG TTYDRV_DC_BitmapBits(HBITMAP hbitmap, void *bits, LONG count, WORD flags);
extern BOOL TTYDRV_DC_CreateBitmap(HBITMAP hbitmap);
-extern BOOL TTYDRV_DC_CreateDC(struct tagDC *dc, LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODEA *initData);
-extern BOOL TTYDRV_DC_DeleteDC(struct tagDC *dc);
+extern BOOL TTYDRV_DC_CreateDC(DC *dc, LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODEA *initData);
+extern BOOL TTYDRV_DC_DeleteDC(TTYDRV_PDEVICE *physDev);
extern BOOL TTYDRV_DC_DeleteObject(HGDIOBJ handle);
-extern BOOL TTYDRV_DC_BitBlt(struct tagDC *dcDst, INT xDst, INT yDst, INT width, INT height, struct tagDC *dcSrc, INT xSrc, INT ySrc, DWORD rop);
-extern BOOL TTYDRV_DC_Chord(struct tagDC *dc, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend);
-extern BOOL TTYDRV_DC_Ellipse(struct tagDC *dc, INT left, INT top, INT right, INT bottom);
-extern INT TTYDRV_DC_Escape(struct tagDC *dc, INT nEscape, INT cbInput, SEGPTR lpInData, SEGPTR lpOutData);
-extern BOOL TTYDRV_DC_ExtFloodFill(struct tagDC *dc, INT x, INT y, COLORREF color, UINT fillType);
-extern BOOL TTYDRV_DC_ExtTextOut(struct tagDC *dc, INT x, INT y, UINT flags, const RECT *lpRect, LPCWSTR str, UINT count, const INT *lpDx);
-extern BOOL TTYDRV_DC_GetCharWidth(struct tagDC *dc, UINT firstChar, UINT lastChar, LPINT buffer);
-extern COLORREF TTYDRV_DC_GetPixel(struct tagDC *dc, INT x, INT y);
+extern BOOL TTYDRV_DC_BitBlt(TTYDRV_PDEVICE *physDevDst, INT xDst, INT yDst, INT width, INT height, TTYDRV_PDEVICE *physDevSrc, INT xSrc, INT ySrc, DWORD rop);
+extern BOOL TTYDRV_DC_Chord(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend);
+extern BOOL TTYDRV_DC_Ellipse(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom);
+extern INT TTYDRV_DC_Escape(TTYDRV_PDEVICE *physDev, INT nEscape, INT cbInput, SEGPTR lpInData, SEGPTR lpOutData);
+extern BOOL TTYDRV_DC_ExtFloodFill(TTYDRV_PDEVICE *physDev, INT x, INT y, COLORREF color, UINT fillType);
+extern BOOL TTYDRV_DC_ExtTextOut(TTYDRV_PDEVICE *physDev, INT x, INT y, UINT flags, const RECT *lpRect, LPCWSTR str, UINT count, const INT *lpDx);
+extern BOOL TTYDRV_DC_GetCharWidth(TTYDRV_PDEVICE *physDev, UINT firstChar, UINT lastChar, LPINT buffer);
+extern COLORREF TTYDRV_DC_GetPixel(TTYDRV_PDEVICE *physDev, INT x, INT y);
-extern BOOL TTYDRV_DC_GetTextExtentPoint(struct tagDC *dc, LPCWSTR str, INT count, LPSIZE size);
-extern BOOL TTYDRV_DC_GetTextMetrics(struct tagDC *dc, TEXTMETRICW *metrics);
-extern BOOL TTYDRV_DC_LineTo(struct tagDC *dc, INT x, INT y);
-extern BOOL TTYDRV_DC_PaintRgn(struct tagDC *dc, HRGN hrgn);
-extern BOOL TTYDRV_DC_PatBlt(struct tagDC *dc, INT left, INT top, INT width, INT height, DWORD rop);
-extern BOOL TTYDRV_DC_Pie(struct tagDC *dc, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend);
-extern BOOL TTYDRV_DC_Polygon(struct tagDC *dc, const POINT* pt, INT count);
-extern BOOL TTYDRV_DC_Polyline(struct tagDC *dc, const POINT* pt, INT count);
-extern BOOL TTYDRV_DC_PolyPolygon(struct tagDC *dc, const POINT* pt, const INT* counts, UINT polygons);
-extern BOOL TTYDRV_DC_PolyPolyline(struct tagDC *dc, const POINT* pt, const DWORD* counts, DWORD polylines);
-extern BOOL TTYDRV_DC_Rectangle(struct tagDC *dc, INT left, INT top, INT right, INT bottom);
-extern BOOL TTYDRV_DC_RoundRect(struct tagDC *dc, INT left, INT top, INT right, INT bottom, INT ell_width, INT ell_height);
-extern void TTYDRV_DC_SetDeviceClipping(struct tagDC *dc);
-extern HGDIOBJ TTYDRV_DC_SelectObject(struct tagDC *dc, HGDIOBJ handle);
-extern COLORREF TTYDRV_DC_SetBkColor(struct tagDC *dc, COLORREF color);
-extern COLORREF TTYDRV_DC_SetPixel(struct tagDC *dc, INT x, INT y, COLORREF color);
-extern COLORREF TTYDRV_DC_SetTextColor(struct tagDC *dc, COLORREF color);
-extern BOOL TTYDRV_DC_StretchBlt(struct tagDC *dcDst, INT xDst, INT yDst, INT widthDst, INT heightDst, struct tagDC *dcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, DWORD rop);
-INT TTYDRV_DC_SetDIBitsToDevice(struct tagDC *dc, INT xDest, INT yDest, DWORD cx, DWORD cy, INT xSrc, INT ySrc, UINT startscan, UINT lines, LPCVOID bits, const BITMAPINFO *info, UINT coloruse);
+extern BOOL TTYDRV_DC_GetTextExtentPoint(TTYDRV_PDEVICE *physDev, LPCWSTR str, INT count, LPSIZE size);
+extern BOOL TTYDRV_DC_GetTextMetrics(TTYDRV_PDEVICE *physDev, TEXTMETRICW *metrics);
+extern BOOL TTYDRV_DC_LineTo(TTYDRV_PDEVICE *physDev, INT x, INT y);
+extern BOOL TTYDRV_DC_PaintRgn(TTYDRV_PDEVICE *physDev, HRGN hrgn);
+extern BOOL TTYDRV_DC_PatBlt(TTYDRV_PDEVICE *physDev, INT left, INT top, INT width, INT height, DWORD rop);
+extern BOOL TTYDRV_DC_Pie(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend);
+extern BOOL TTYDRV_DC_Polygon(TTYDRV_PDEVICE *physDev, const POINT* pt, INT count);
+extern BOOL TTYDRV_DC_Polyline(TTYDRV_PDEVICE *physDev, const POINT* pt, INT count);
+extern BOOL TTYDRV_DC_PolyPolygon(TTYDRV_PDEVICE *physDev, const POINT* pt, const INT* counts, UINT polygons);
+extern BOOL TTYDRV_DC_PolyPolyline(TTYDRV_PDEVICE *physDev, const POINT* pt, const DWORD* counts, DWORD polylines);
+extern BOOL TTYDRV_DC_Rectangle(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom);
+extern BOOL TTYDRV_DC_RoundRect(TTYDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom, INT ell_width, INT ell_height);
+extern void TTYDRV_DC_SetDeviceClipping(TTYDRV_PDEVICE *physDev);
+extern COLORREF TTYDRV_DC_SetPixel(TTYDRV_PDEVICE *physDev, INT x, INT y, COLORREF color);
+extern BOOL TTYDRV_DC_StretchBlt(TTYDRV_PDEVICE *physDevDst, INT xDst, INT yDst, INT widthDst, INT heightDst, TTYDRV_PDEVICE *physDevSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, DWORD rop);
+INT TTYDRV_DC_SetDIBitsToDevice(TTYDRV_PDEVICE *physDev, INT xDest, INT yDest, DWORD cx, DWORD cy, INT xSrc, INT ySrc, UINT startscan, UINT lines, LPCVOID bits, const BITMAPINFO *info, UINT coloruse);
/* TTY GDI palette driver */
diff --git a/dlls/ttydrv/ttydrv.spec b/dlls/ttydrv/ttydrv.spec
index 20eecbd..f130895 100644
--- a/dlls/ttydrv/ttydrv.spec
+++ b/dlls/ttydrv/ttydrv.spec
@@ -37,12 +37,11 @@
@ cdecl Polyline(ptr ptr long) TTYDRV_DC_Polyline
@ cdecl Rectangle(ptr long long long long) TTYDRV_DC_Rectangle
@ cdecl RoundRect(ptr long long long long long long) TTYDRV_DC_RoundRect
-@ cdecl SelectObject(ptr long) TTYDRV_DC_SelectObject
-@ cdecl SetBkColor(ptr long) TTYDRV_DC_SetBkColor
-@ cdecl SetDeviceClipping(ptr) TTYDRV_DC_SetDeviceClipping
+@ cdecl SelectBitmap(ptr long) TTYDRV_SelectBitmap
+@ cdecl SelectFont(ptr long) TTYDRV_SelectFont
@ cdecl SetDIBitsToDevice(ptr long long long long long long long long ptr ptr long) TTYDRV_DC_SetDIBitsToDevice
+@ cdecl SetDeviceClipping(ptr) TTYDRV_DC_SetDeviceClipping
@ cdecl SetPixel(ptr long long long) TTYDRV_DC_SetPixel
-@ cdecl SetTextColor(ptr long) TTYDRV_DC_SetTextColor
@ cdecl StretchBlt(ptr long long long long ptr long long long long long) TTYDRV_DC_StretchBlt
# USER driver
diff --git a/dlls/ttydrv/user.c b/dlls/ttydrv/user.c
index 6aabf6e..9a488ab 100644
--- a/dlls/ttydrv/user.c
+++ b/dlls/ttydrv/user.c
@@ -21,6 +21,7 @@
#include "config.h"
#include "dinput.h"
+#include "gdi.h"
#include "ttydrv.h"
#include "wine/debug.h"
diff --git a/dlls/wineps/bitblt.c b/dlls/wineps/bitblt.c
index c800a87..99ab2bc 100644
--- a/dlls/wineps/bitblt.c
+++ b/dlls/wineps/bitblt.c
@@ -30,16 +30,17 @@
*
* PSDRV_PatBlt
*/
-BOOL PSDRV_PatBlt(DC *dc, INT x, INT y, INT width, INT height, DWORD dwRop)
+BOOL PSDRV_PatBlt(PSDRV_PDEVICE *physDev, INT x, INT y, INT width, INT height, DWORD dwRop)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
+ DC *dc = physDev->dc;
+
switch(dwRop) {
case PATCOPY:
- PSDRV_WriteGSave(dc);
- PSDRV_WriteRectangle(dc, XLPTODP(dc, x), YLPTODP(dc, y),
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteRectangle(physDev, XLPTODP(dc, x), YLPTODP(dc, y),
XLSTODS(dc, width), YLSTODS(dc, height));
- PSDRV_Brush(dc, FALSE);
- PSDRV_WriteGRestore(dc);
+ PSDRV_Brush(physDev, FALSE);
+ PSDRV_WriteGRestore(physDev);
return TRUE;
case BLACKNESS:
@@ -47,14 +48,14 @@
{
PSCOLOR pscol;
- PSDRV_WriteGSave(dc);
- PSDRV_WriteRectangle(dc, XLPTODP(dc, x), YLPTODP(dc, y),
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteRectangle(physDev, XLPTODP(dc, x), YLPTODP(dc, y),
XLSTODS(dc, width), YLSTODS(dc, height));
PSDRV_CreateColor( physDev, &pscol, (dwRop == BLACKNESS) ?
RGB(0,0,0) : RGB(0xff,0xff,0xff) );
- PSDRV_WriteSetColor(dc, &pscol);
- PSDRV_WriteFill(dc);
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteSetColor(physDev, &pscol);
+ PSDRV_WriteFill(physDev);
+ PSDRV_WriteGRestore(physDev);
return TRUE;
}
default:
diff --git a/dlls/wineps/bitmap.c b/dlls/wineps/bitmap.c
index cf11e0c..b08d1f5 100644
--- a/dlls/wineps/bitmap.c
+++ b/dlls/wineps/bitmap.c
@@ -19,13 +19,65 @@
*/
#include "psdrv.h"
-#include "wine/debug.h"
-#include "bitmap.h"
#include "winbase.h"
+#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(psdrv);
+/* Return the width of a DIB bitmap in bytes. DIB bitmap data is 32-bit aligned. */
+inline static int get_dib_width_bytes( int width, int depth )
+{
+ int words;
+
+ switch(depth)
+ {
+ case 1: words = (width + 31) / 32; break;
+ case 4: words = (width + 7) / 8; break;
+ case 8: words = (width + 3) / 4; break;
+ case 15:
+ case 16: words = (width + 1) / 2; break;
+ case 24: words = (width * 3 + 3)/4; break;
+ default:
+ WARN("(%d): Unsupported depth\n", depth );
+ /* fall through */
+ case 32: words = width; break;
+ }
+ return 4 * words;
+}
+
+/* get the bitmap info from either an INFOHEADER or COREHEADER bitmap */
+static BOOL get_bitmap_info( const void *ptr, LONG *width, LONG *height, WORD *bpp, WORD *compr )
+{
+ const BITMAPINFOHEADER *header = ptr;
+
+ switch(header->biSize)
+ {
+ case sizeof(BITMAPCOREHEADER):
+ {
+ const BITMAPCOREHEADER *core = (BITMAPCOREHEADER *)header;
+ *width = core->bcWidth;
+ *height = core->bcHeight;
+ *bpp = core->bcBitCount;
+ *compr = 0;
+ }
+ return TRUE;
+ case sizeof(BITMAPINFOHEADER):
+ case sizeof(BITMAPV4HEADER):
+ case sizeof(BITMAPV5HEADER):
+ /* V4 and V5 structures are a superset of the INFOHEADER structure */
+ *width = header->biWidth;
+ *height = header->biHeight;
+ *bpp = header->biBitCount;
+ *compr = header->biCompression;
+ return TRUE;
+ default:
+ ERR("(%ld): unknown/wrong size for header\n", header->biSize );
+ return FALSE;
+ }
+}
+
+
/***************************************************************************
* PSDRV_WriteImageHeader
*
@@ -35,7 +87,7 @@
* Uses level 2 PostScript
*/
-static BOOL PSDRV_WriteImageHeader(DC *dc, const BITMAPINFO *info, INT xDst,
+static BOOL PSDRV_WriteImageHeader(PSDRV_PDEVICE *physDev, const BITMAPINFO *info, INT xDst,
INT yDst, INT widthDst, INT heightDst,
INT widthSrc, INT heightSrc)
{
@@ -44,36 +96,36 @@
switch(info->bmiHeader.biBitCount) {
case 8:
- PSDRV_WriteIndexColorSpaceBegin(dc, 255);
+ PSDRV_WriteIndexColorSpaceBegin(physDev, 255);
for(i = 0; i < 256; i++) {
map[i] = info->bmiColors[i].rgbRed |
info->bmiColors[i].rgbGreen << 8 |
info->bmiColors[i].rgbBlue << 16;
}
- PSDRV_WriteRGB(dc, map, 256);
- PSDRV_WriteIndexColorSpaceEnd(dc);
+ PSDRV_WriteRGB(physDev, map, 256);
+ PSDRV_WriteIndexColorSpaceEnd(physDev);
break;
case 4:
- PSDRV_WriteIndexColorSpaceBegin(dc, 15);
+ PSDRV_WriteIndexColorSpaceBegin(physDev, 15);
for(i = 0; i < 16; i++) {
map[i] = info->bmiColors[i].rgbRed |
info->bmiColors[i].rgbGreen << 8 |
info->bmiColors[i].rgbBlue << 16;
}
- PSDRV_WriteRGB(dc, map, 16);
- PSDRV_WriteIndexColorSpaceEnd(dc);
+ PSDRV_WriteRGB(physDev, map, 16);
+ PSDRV_WriteIndexColorSpaceEnd(physDev);
break;
case 1:
- PSDRV_WriteIndexColorSpaceBegin(dc, 1);
+ PSDRV_WriteIndexColorSpaceBegin(physDev, 1);
for(i = 0; i < 2; i++) {
map[i] = info->bmiColors[i].rgbRed |
info->bmiColors[i].rgbGreen << 8 |
info->bmiColors[i].rgbBlue << 16;
}
- PSDRV_WriteRGB(dc, map, 2);
- PSDRV_WriteIndexColorSpaceEnd(dc);
+ PSDRV_WriteRGB(physDev, map, 2);
+ PSDRV_WriteIndexColorSpaceEnd(physDev);
break;
case 15:
@@ -84,7 +136,7 @@
PSCOLOR pscol;
pscol.type = PSCOLOR_RGB;
pscol.value.rgb.r = pscol.value.rgb.g = pscol.value.rgb.b = 0.0;
- PSDRV_WriteSetColor(dc, &pscol);
+ PSDRV_WriteSetColor(physDev, &pscol);
break;
}
@@ -94,7 +146,7 @@
break;
}
- PSDRV_WriteImageDict(dc, info->bmiHeader.biBitCount, xDst, yDst,
+ PSDRV_WriteImageDict(physDev, info->bmiHeader.biBitCount, xDst, yDst,
widthDst, heightDst, widthSrc, heightSrc, NULL);
return TRUE;
}
@@ -109,26 +161,26 @@
* bit depths.
* Compression not implemented.
*/
-INT PSDRV_StretchDIBits( DC *dc, INT xDst, INT yDst, INT widthDst,
+INT PSDRV_StretchDIBits( PSDRV_PDEVICE *physDev, INT xDst, INT yDst, INT widthDst,
INT heightDst, INT xSrc, INT ySrc,
INT widthSrc, INT heightSrc, const void *bits,
const BITMAPINFO *info, UINT wUsage, DWORD dwRop )
{
- DWORD fullSrcWidth;
- INT widthbytes, fullSrcHeight;
+ LONG fullSrcWidth, fullSrcHeight;
+ INT widthbytes;
WORD bpp, compression;
const char *ptr;
INT line;
+ DC *dc = physDev->dc;
- TRACE("%08x (%d,%d %dx%d) -> (%d,%d %dx%d)\n", dc->hSelf,
+ TRACE("%08x (%d,%d %dx%d) -> (%d,%d %dx%d)\n", physDev->hdc,
xSrc, ySrc, widthSrc, heightSrc, xDst, yDst, widthDst, heightDst);
- DIB_GetBitmapInfo((const BITMAPINFOHEADER *)info, &fullSrcWidth,
- &fullSrcHeight, &bpp, &compression);
+ if (!get_bitmap_info( info, &fullSrcWidth, &fullSrcHeight, &bpp, &compression )) return FALSE;
- widthbytes = DIB_GetDIBWidthBytes(fullSrcWidth, bpp);
+ widthbytes = get_dib_width_bytes(fullSrcWidth, bpp);
- TRACE("full size=%ldx%d bpp=%d compression=%d\n", fullSrcWidth,
+ TRACE("full size=%ldx%ld bpp=%d compression=%d\n", fullSrcWidth,
fullSrcHeight, bpp, compression);
@@ -145,71 +197,71 @@
switch(bpp) {
case 1:
- PSDRV_WriteGSave(dc);
- PSDRV_WriteImageHeader(dc, info, xDst, yDst, widthDst, heightDst,
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteImageHeader(physDev, info, xDst, yDst, widthDst, heightDst,
widthSrc, heightSrc);
ptr = bits;
ptr += (ySrc * widthbytes);
if(xSrc & 7)
FIXME("This won't work...\n");
for(line = 0; line < heightSrc; line++, ptr += widthbytes)
- PSDRV_WriteBytes(dc, ptr + xSrc/8, (widthSrc+7)/8);
+ PSDRV_WriteBytes(physDev, ptr + xSrc/8, (widthSrc+7)/8);
break;
case 4:
- PSDRV_WriteGSave(dc);
- PSDRV_WriteImageHeader(dc, info, xDst, yDst, widthDst, heightDst,
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteImageHeader(physDev, info, xDst, yDst, widthDst, heightDst,
widthSrc, heightSrc);
ptr = bits;
ptr += (ySrc * widthbytes);
if(xSrc & 1)
FIXME("This won't work...\n");
for(line = 0; line < heightSrc; line++, ptr += widthbytes)
- PSDRV_WriteBytes(dc, ptr + xSrc/2, (widthSrc+1)/2);
+ PSDRV_WriteBytes(physDev, ptr + xSrc/2, (widthSrc+1)/2);
break;
case 8:
- PSDRV_WriteGSave(dc);
- PSDRV_WriteImageHeader(dc, info, xDst, yDst, widthDst, heightDst,
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteImageHeader(physDev, info, xDst, yDst, widthDst, heightDst,
widthSrc, heightSrc);
ptr = bits;
ptr += (ySrc * widthbytes);
for(line = 0; line < heightSrc; line++, ptr += widthbytes)
- PSDRV_WriteBytes(dc, ptr + xSrc, widthSrc);
+ PSDRV_WriteBytes(physDev, ptr + xSrc, widthSrc);
break;
case 15:
case 16:
- PSDRV_WriteGSave(dc);
- PSDRV_WriteImageHeader(dc, info, xDst, yDst, widthDst, heightDst,
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteImageHeader(physDev, info, xDst, yDst, widthDst, heightDst,
widthSrc, heightSrc);
ptr = bits;
ptr += (ySrc * widthbytes);
for(line = 0; line < heightSrc; line++, ptr += widthbytes)
- PSDRV_WriteDIBits16(dc, (WORD *)ptr + xSrc, widthSrc);
+ PSDRV_WriteDIBits16(physDev, (WORD *)ptr + xSrc, widthSrc);
break;
case 24:
- PSDRV_WriteGSave(dc);
- PSDRV_WriteImageHeader(dc, info, xDst, yDst, widthDst, heightDst,
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteImageHeader(physDev, info, xDst, yDst, widthDst, heightDst,
widthSrc, heightSrc);
ptr = bits;
ptr += (ySrc * widthbytes);
for(line = 0; line < heightSrc; line++, ptr += widthbytes)
- PSDRV_WriteDIBits24(dc, ptr + xSrc * 3, widthSrc);
+ PSDRV_WriteDIBits24(physDev, ptr + xSrc * 3, widthSrc);
break;
case 32:
- PSDRV_WriteGSave(dc);
- PSDRV_WriteImageHeader(dc, info, xDst, yDst, widthDst, heightDst,
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteImageHeader(physDev, info, xDst, yDst, widthDst, heightDst,
widthSrc, heightSrc);
ptr = bits;
ptr += (ySrc * widthbytes);
for(line = 0; line < heightSrc; line++, ptr += widthbytes)
- PSDRV_WriteDIBits32(dc, ptr + xSrc * 3, widthSrc);
+ PSDRV_WriteDIBits32(physDev, ptr + xSrc * 3, widthSrc);
break;
default:
@@ -217,8 +269,8 @@
return FALSE;
}
- PSDRV_WriteSpool(dc, ">\n", 2); /* End-of-Data for /HexASCIIDecodeFilter */
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteSpool(physDev, ">\n", 2); /* End-of-Data for /HexASCIIDecodeFilter */
+ PSDRV_WriteGRestore(physDev);
return TRUE;
}
diff --git a/dlls/wineps/brush.c b/dlls/wineps/brush.c
index aa5cc33..6eb1845 100644
--- a/dlls/wineps/brush.c
+++ b/dlls/wineps/brush.c
@@ -25,18 +25,15 @@
WINE_DEFAULT_DEBUG_CHANNEL(psdrv);
/***********************************************************************
- * PSDRV_BRUSH_SelectObject
+ * PSDRV_SelectBrush (WINEPS.@)
*/
-HBRUSH PSDRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush )
+HBRUSH PSDRV_SelectBrush( PSDRV_PDEVICE *physDev, HBRUSH hbrush )
{
LOGBRUSH logbrush;
- HBRUSH prevbrush = dc->hBrush;
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
if (!GetObjectA( hbrush, sizeof(logbrush), &logbrush )) return 0;
TRACE("hbrush = %08x\n", hbrush);
- dc->hBrush = hbrush;
switch(logbrush.lbStyle) {
@@ -61,7 +58,7 @@
}
physDev->brush.set = FALSE;
- return prevbrush;
+ return hbrush;
}
@@ -70,13 +67,12 @@
* PSDRV_SetBrush
*
*/
-static BOOL PSDRV_SetBrush(DC *dc)
+static BOOL PSDRV_SetBrush(PSDRV_PDEVICE *physDev)
{
LOGBRUSH logbrush;
BOOL ret = TRUE;
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
- if (!GetObjectA( dc->hBrush, sizeof(logbrush), &logbrush ))
+ if (!GetObjectA( GetCurrentObject(physDev->hdc,OBJ_BRUSH), sizeof(logbrush), &logbrush ))
{
ERR("Can't get BRUSHOBJ\n");
return FALSE;
@@ -85,7 +81,7 @@
switch (logbrush.lbStyle) {
case BS_SOLID:
case BS_HATCHED:
- PSDRV_WriteSetColor(dc, &physDev->brush.color);
+ PSDRV_WriteSetColor(physDev, &physDev->brush.color);
break;
case BS_NULL:
@@ -106,12 +102,12 @@
* PSDRV_Fill
*
*/
-static BOOL PSDRV_Fill(DC *dc, BOOL EO)
+static BOOL PSDRV_Fill(PSDRV_PDEVICE *physDev, BOOL EO)
{
if(!EO)
- return PSDRV_WriteFill(dc);
+ return PSDRV_WriteFill(physDev);
else
- return PSDRV_WriteEOFill(dc);
+ return PSDRV_WriteEOFill(physDev);
}
@@ -120,12 +116,12 @@
* PSDRV_Clip
*
*/
-static BOOL PSDRV_Clip(DC *dc, BOOL EO)
+static BOOL PSDRV_Clip(PSDRV_PDEVICE *physDev, BOOL EO)
{
if(!EO)
- return PSDRV_WriteClip(dc);
+ return PSDRV_WriteClip(physDev);
else
- return PSDRV_WriteEOClip(dc);
+ return PSDRV_WriteEOClip(physDev);
}
/**********************************************************************
@@ -133,13 +129,12 @@
* PSDRV_Brush
*
*/
-BOOL PSDRV_Brush(DC *dc, BOOL EO)
+BOOL PSDRV_Brush(PSDRV_PDEVICE *physDev, BOOL EO)
{
LOGBRUSH logbrush;
BOOL ret = TRUE;
- PSDRV_PDEVICE *physDev = dc->physDev;
- if (!GetObjectA( dc->hBrush, sizeof(logbrush), &logbrush ))
+ if (!GetObjectA( GetCurrentObject(physDev->hdc,OBJ_BRUSH), sizeof(logbrush), &logbrush ))
{
ERR("Can't get BRUSHOBJ\n");
return FALSE;
@@ -147,55 +142,55 @@
switch (logbrush.lbStyle) {
case BS_SOLID:
- PSDRV_SetBrush(dc);
- PSDRV_WriteGSave(dc);
- PSDRV_Fill(dc, EO);
- PSDRV_WriteGRestore(dc);
+ PSDRV_SetBrush(physDev);
+ PSDRV_WriteGSave(physDev);
+ PSDRV_Fill(physDev, EO);
+ PSDRV_WriteGRestore(physDev);
break;
case BS_HATCHED:
- PSDRV_SetBrush(dc);
+ PSDRV_SetBrush(physDev);
switch(logbrush.lbHatch) {
case HS_VERTICAL:
case HS_CROSS:
- PSDRV_WriteGSave(dc);
- PSDRV_Clip(dc, EO);
- PSDRV_WriteHatch(dc);
- PSDRV_WriteStroke(dc);
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteGSave(physDev);
+ PSDRV_Clip(physDev, EO);
+ PSDRV_WriteHatch(physDev);
+ PSDRV_WriteStroke(physDev);
+ PSDRV_WriteGRestore(physDev);
if(logbrush.lbHatch == HS_VERTICAL)
break;
/* else fallthrough for HS_CROSS */
case HS_HORIZONTAL:
- PSDRV_WriteGSave(dc);
- PSDRV_Clip(dc, EO);
- PSDRV_WriteRotate(dc, 90.0);
- PSDRV_WriteHatch(dc);
- PSDRV_WriteStroke(dc);
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteGSave(physDev);
+ PSDRV_Clip(physDev, EO);
+ PSDRV_WriteRotate(physDev, 90.0);
+ PSDRV_WriteHatch(physDev);
+ PSDRV_WriteStroke(physDev);
+ PSDRV_WriteGRestore(physDev);
break;
case HS_FDIAGONAL:
case HS_DIAGCROSS:
- PSDRV_WriteGSave(dc);
- PSDRV_Clip(dc, EO);
- PSDRV_WriteRotate(dc, -45.0);
- PSDRV_WriteHatch(dc);
- PSDRV_WriteStroke(dc);
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteGSave(physDev);
+ PSDRV_Clip(physDev, EO);
+ PSDRV_WriteRotate(physDev, -45.0);
+ PSDRV_WriteHatch(physDev);
+ PSDRV_WriteStroke(physDev);
+ PSDRV_WriteGRestore(physDev);
if(logbrush.lbHatch == HS_FDIAGONAL)
break;
/* else fallthrough for HS_DIAGCROSS */
case HS_BDIAGONAL:
- PSDRV_WriteGSave(dc);
- PSDRV_Clip(dc, EO);
- PSDRV_WriteRotate(dc, 45.0);
- PSDRV_WriteHatch(dc);
- PSDRV_WriteStroke(dc);
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteGSave(physDev);
+ PSDRV_Clip(physDev, EO);
+ PSDRV_WriteRotate(physDev, 45.0);
+ PSDRV_WriteHatch(physDev);
+ PSDRV_WriteStroke(physDev);
+ PSDRV_WriteGRestore(physDev);
break;
default:
@@ -219,10 +214,10 @@
GetBitmapBits(logbrush.lbHatch, bm.bmWidthBytes * bm.bmHeight, bits);
if(physDev->pi->ppd->LanguageLevel > 1) {
- PSDRV_WriteGSave(dc);
- PSDRV_WritePatternDict(dc, &bm, bits);
- PSDRV_Fill(dc, EO);
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WritePatternDict(physDev, &bm, bits);
+ PSDRV_Fill(physDev, EO);
+ PSDRV_WriteGRestore(physDev);
} else {
FIXME("Trying to set a pattern brush on a level 1 printer\n");
ret = FALSE;
diff --git a/dlls/wineps/clipping.c b/dlls/wineps/clipping.c
index 5aae92a..d02c919 100644
--- a/dlls/wineps/clipping.c
+++ b/dlls/wineps/clipping.c
@@ -28,13 +28,14 @@
/***********************************************************************
* PSDRV_SetDeviceClipping
*/
-VOID PSDRV_SetDeviceClipping( DC *dc )
+VOID PSDRV_SetDeviceClipping( PSDRV_PDEVICE *physDev )
{
CHAR szArrayName[] = "clippath";
DWORD size;
RGNDATA *rgndata;
+ DC *dc = physDev->dc;
- TRACE("hdc=%04x\n", dc->hSelf);
+ TRACE("hdc=%04x\n", physDev->hdc);
if (dc->hGCClipRgn == 0) {
ERR("Rgn is 0. Please report this.\n");
@@ -55,20 +56,20 @@
GetRegionData(dc->hGCClipRgn, size, rgndata);
- PSDRV_WriteInitClip(dc);
+ PSDRV_WriteInitClip(physDev);
/* check for NULL region */
if (rgndata->rdh.nCount == 0)
{
/* set an empty clip path. */
- PSDRV_WriteRectClip(dc, 0, 0, 0, 0);
+ PSDRV_WriteRectClip(physDev, 0, 0, 0, 0);
}
/* optimize when it is a simple region */
else if (rgndata->rdh.nCount == 1)
{
RECT *pRect = (RECT *)rgndata->Buffer;
- PSDRV_WriteRectClip(dc, pRect->left, pRect->top,
+ PSDRV_WriteRectClip(physDev, pRect->left, pRect->top,
pRect->right - pRect->left,
pRect->bottom - pRect->top);
}
@@ -77,21 +78,21 @@
INT i;
RECT *pRect = (RECT *)rgndata->Buffer;
- PSDRV_WriteArrayDef(dc, szArrayName, rgndata->rdh.nCount * 4);
+ PSDRV_WriteArrayDef(physDev, szArrayName, rgndata->rdh.nCount * 4);
for (i = 0; i < rgndata->rdh.nCount; i++, pRect++)
{
- PSDRV_WriteArrayPut(dc, szArrayName, i * 4,
+ PSDRV_WriteArrayPut(physDev, szArrayName, i * 4,
pRect->left);
- PSDRV_WriteArrayPut(dc, szArrayName, i * 4 + 1,
+ PSDRV_WriteArrayPut(physDev, szArrayName, i * 4 + 1,
pRect->top);
- PSDRV_WriteArrayPut(dc, szArrayName, i * 4 + 2,
+ PSDRV_WriteArrayPut(physDev, szArrayName, i * 4 + 2,
pRect->right - pRect->left);
- PSDRV_WriteArrayPut(dc, szArrayName, i * 4 + 3,
+ PSDRV_WriteArrayPut(physDev, szArrayName, i * 4 + 3,
pRect->bottom - pRect->top);
}
- PSDRV_WriteRectClip2(dc, szArrayName);
+ PSDRV_WriteRectClip2(physDev, szArrayName);
}
HeapFree( GetProcessHeap(), 0, rgndata );
diff --git a/dlls/wineps/color.c b/dlls/wineps/color.c
index a75e536..fa3b600 100644
--- a/dlls/wineps/color.c
+++ b/dlls/wineps/color.c
@@ -117,33 +117,20 @@
/***********************************************************************
* PSDRV_SetBkColor
*/
-COLORREF PSDRV_SetBkColor( DC *dc, COLORREF color )
+COLORREF PSDRV_SetBkColor( PSDRV_PDEVICE *physDev, COLORREF color )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
- COLORREF oldColor;
-
- oldColor = dc->backgroundColor;
- dc->backgroundColor = color;
-
PSDRV_CreateColor(physDev, &physDev->bkColor, color);
-
- return oldColor;
+ return color;
}
/***********************************************************************
* PSDRV_SetTextColor
*/
-COLORREF PSDRV_SetTextColor( DC *dc, COLORREF color )
+COLORREF PSDRV_SetTextColor( PSDRV_PDEVICE *physDev, COLORREF color )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
- COLORREF oldColor;
-
- oldColor = dc->textColor;
- dc->textColor = color;
-
PSDRV_CreateColor(physDev, &physDev->font.color, color);
physDev->font.set = FALSE;
- return oldColor;
+ return color;
}
diff --git a/dlls/wineps/escape.c b/dlls/wineps/escape.c
index 54e139a..a6ba990 100644
--- a/dlls/wineps/escape.c
+++ b/dlls/wineps/escape.c
@@ -30,11 +30,9 @@
/**********************************************************************
* ExtEscape (WINEPS.@)
*/
-INT PSDRV_ExtEscape( DC *dc, INT nEscape, INT cbInput, LPCVOID in_data,
+INT PSDRV_ExtEscape( PSDRV_PDEVICE *physDev, INT nEscape, INT cbInput, LPCVOID in_data,
INT cbOutput, LPVOID out_data )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
switch(nEscape)
{
case QUERYESCSUPPORT:
@@ -84,7 +82,7 @@
r->bottom = 0;
TRACE("NEXTBAND rect to 0,0 - 0,0\n" );
physDev->job.banding = FALSE;
- return EndPage( dc->hSelf );
+ return EndPage( physDev->hdc );
}
case SETCOPYCOUNT:
@@ -223,16 +221,14 @@
/************************************************************************
* PSDRV_StartPage
*/
-INT PSDRV_StartPage( DC *dc )
+INT PSDRV_StartPage( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
if(!physDev->job.OutOfPage) {
FIXME("Already started a page?\n");
return 1;
}
physDev->job.PageNo++;
- if(!PSDRV_WriteNewPage( dc ))
+ if(!PSDRV_WriteNewPage( physDev ))
return 0;
physDev->job.OutOfPage = FALSE;
return 1;
@@ -242,15 +238,13 @@
/************************************************************************
* PSDRV_EndPage
*/
-INT PSDRV_EndPage( DC *dc )
+INT PSDRV_EndPage( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
if(physDev->job.OutOfPage) {
FIXME("Already ended a page?\n");
return 1;
}
- if(!PSDRV_WriteEndPage( dc ))
+ if(!PSDRV_WriteEndPage( physDev ))
return 0;
physDev->job.OutOfPage = TRUE;
return 1;
@@ -260,10 +254,8 @@
/************************************************************************
* PSDRV_StartDoc
*/
-INT PSDRV_StartDoc( DC *dc, const DOCINFOA *doc )
+INT PSDRV_StartDoc( PSDRV_PDEVICE *physDev, const DOCINFOA *doc )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
if(physDev->job.hJob) {
FIXME("hJob != 0. Now what?\n");
return 0;
@@ -274,8 +266,7 @@
physDev->job.output = HeapAlloc( PSDRV_Heap, 0, strlen(doc->lpszOutput)+1 );
strcpy( physDev->job.output, doc->lpszOutput );
}
- physDev->job.hJob = OpenJob16(physDev->job.output, doc->lpszDocName,
- dc->hSelf);
+ physDev->job.hJob = OpenJob16(physDev->job.output, doc->lpszDocName, physDev->hdc );
if(!physDev->job.hJob) {
WARN("OpenJob failed\n");
return 0;
@@ -283,7 +274,7 @@
physDev->job.banding = FALSE;
physDev->job.OutOfPage = TRUE;
physDev->job.PageNo = 0;
- if(!PSDRV_WriteHeader( dc, doc->lpszDocName ))
+ if(!PSDRV_WriteHeader( physDev, doc->lpszDocName ))
return 0;
return physDev->job.hJob;
@@ -293,10 +284,8 @@
/************************************************************************
* PSDRV_EndDoc
*/
-INT PSDRV_EndDoc( DC *dc )
+INT PSDRV_EndDoc( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
if(!physDev->job.hJob) {
FIXME("hJob == 0. Now what?\n");
return 0;
@@ -304,9 +293,9 @@
if(!physDev->job.OutOfPage) {
WARN("Somebody forgot a EndPage\n");
- PSDRV_EndPage( dc );
+ PSDRV_EndPage( physDev );
}
- if(!PSDRV_WriteFooter( dc ))
+ if(!PSDRV_WriteFooter( physDev ))
return 0;
if( CloseJob16( physDev->job.hJob ) == SP_ERROR ) {
diff --git a/dlls/wineps/font.c b/dlls/wineps/font.c
index 0ecc99d..c02b15a 100644
--- a/dlls/wineps/font.c
+++ b/dlls/wineps/font.c
@@ -138,12 +138,11 @@
}
/***********************************************************************
- * PSDRV_FONT_SelectObject
+ * PSDRV_SelectFont (WINEPS.@)
*/
-HFONT PSDRV_FONT_SelectObject( DC * dc, HFONT hfont )
+HFONT PSDRV_SelectFont( PSDRV_PDEVICE *physDev, HFONT hfont )
{
LOGFONTW lf;
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
BOOL bd = FALSE, it = FALSE;
AFMLISTENTRY *afmle;
FONTFAMILY *family;
@@ -257,7 +256,7 @@
physDev->font.afm = afmle->afm;
/* stock fonts ignore the mapping mode */
- if (!is_stock_font( hfont )) lf.lfHeight = INTERNAL_YWSTODS(dc, lf.lfHeight);
+ if (!is_stock_font( hfont )) lf.lfHeight = INTERNAL_YWSTODS(physDev->dc, lf.lfHeight);
ScaleFont(physDev->font.afm, lf.lfHeight,
&(physDev->font), &(physDev->font.tm));
@@ -274,10 +273,8 @@
/***********************************************************************
* PSDRV_GetTextMetrics
*/
-BOOL PSDRV_GetTextMetrics(DC *dc, TEXTMETRICW *metrics)
+BOOL PSDRV_GetTextMetrics(PSDRV_PDEVICE *physDev, TEXTMETRICW *metrics)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
memcpy(metrics, &(physDev->font.tm), sizeof(physDev->font.tm));
return TRUE;
}
@@ -324,9 +321,9 @@
/***********************************************************************
* PSDRV_GetTextExtentPoint
*/
-BOOL PSDRV_GetTextExtentPoint(DC *dc, LPCWSTR str, INT count, LPSIZE size)
+BOOL PSDRV_GetTextExtentPoint(PSDRV_PDEVICE *physDev, LPCWSTR str, INT count, LPSIZE size)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
+ DC *dc = physDev->dc;
int i;
float width = 0.0;
@@ -349,9 +346,8 @@
/***********************************************************************
* PSDRV_GetCharWidth
*/
-BOOL PSDRV_GetCharWidth(DC *dc, UINT firstChar, UINT lastChar, LPINT buffer)
+BOOL PSDRV_GetCharWidth(PSDRV_PDEVICE *physDev, UINT firstChar, UINT lastChar, LPINT buffer)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
UINT i;
TRACE("U+%.4X U+%.4X\n", firstChar, lastChar);
@@ -376,14 +372,12 @@
/***********************************************************************
* PSDRV_SetFont
*/
-BOOL PSDRV_SetFont( DC *dc )
+BOOL PSDRV_SetFont( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
- PSDRV_WriteSetColor(dc, &physDev->font.color);
+ PSDRV_WriteSetColor(physDev, &physDev->font.color);
if(physDev->font.set) return TRUE;
- PSDRV_WriteSetFont(dc);
+ PSDRV_WriteSetFont(physDev);
physDev->font.set = TRUE;
return TRUE;
}
diff --git a/dlls/wineps/graphics.c b/dlls/wineps/graphics.c
index 0b3509f..aadaa69 100644
--- a/dlls/wineps/graphics.c
+++ b/dlls/wineps/graphics.c
@@ -38,16 +38,18 @@
/***********************************************************************
* PSDRV_LineTo
*/
-BOOL PSDRV_LineTo(DC *dc, INT x, INT y)
+BOOL PSDRV_LineTo(PSDRV_PDEVICE *physDev, INT x, INT y)
{
+ DC *dc = physDev->dc;
+
TRACE("%d %d\n", x, y);
- PSDRV_SetPen(dc);
- PSDRV_WriteMoveTo(dc, INTERNAL_XWPTODP(dc, dc->CursPosX, dc->CursPosY),
- INTERNAL_YWPTODP(dc, dc->CursPosX, dc->CursPosY));
- PSDRV_WriteLineTo(dc, INTERNAL_XWPTODP(dc, x, y),
- INTERNAL_YWPTODP(dc, x, y));
- PSDRV_DrawLine(dc);
+ PSDRV_SetPen(physDev);
+ PSDRV_WriteMoveTo(physDev, INTERNAL_XWPTODP(dc, dc->CursPosX, dc->CursPosY),
+ INTERNAL_YWPTODP(dc, dc->CursPosX, dc->CursPosY));
+ PSDRV_WriteLineTo(physDev, INTERNAL_XWPTODP(dc, x, y),
+ INTERNAL_YWPTODP(dc, x, y));
+ PSDRV_DrawLine(physDev);
return TRUE;
}
@@ -56,21 +58,20 @@
/***********************************************************************
* PSDRV_Rectangle
*/
-BOOL PSDRV_Rectangle( DC *dc, INT left, INT top, INT right,
- INT bottom )
+BOOL PSDRV_Rectangle( PSDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom )
{
INT width;
INT height;
+ DC *dc = physDev->dc;
TRACE("%d %d - %d %d\n", left, top, right, bottom);
width = INTERNAL_XWSTODS(dc, right - left);
height = INTERNAL_YWSTODS(dc, bottom - top);
- PSDRV_WriteRectangle(dc, INTERNAL_XWPTODP(dc, left, top),
- INTERNAL_YWPTODP(dc, left, top),
- width, height);
- PSDRV_Brush(dc,0);
- PSDRV_SetPen(dc);
- PSDRV_DrawLine(dc);
+ PSDRV_WriteRectangle(physDev, INTERNAL_XWPTODP(dc, left, top),
+ INTERNAL_YWPTODP(dc, left, top), width, height);
+ PSDRV_Brush(physDev,0);
+ PSDRV_SetPen(physDev);
+ PSDRV_DrawLine(physDev);
return TRUE;
}
@@ -78,9 +79,11 @@
/***********************************************************************
* PSDRV_RoundRect
*/
-BOOL PSDRV_RoundRect( DC *dc, INT left, INT top, INT right,
- INT bottom, INT ell_width, INT ell_height )
+BOOL PSDRV_RoundRect( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
+ INT bottom, INT ell_width, INT ell_height )
{
+ DC *dc = physDev->dc;
+
left = XLPTODP( dc, left );
right = XLPTODP( dc, right );
top = YLPTODP( dc, top );
@@ -94,23 +97,23 @@
if(ell_width > right - left) ell_width = right - left;
if(ell_height > bottom - top) ell_height = bottom - top;
- PSDRV_WriteMoveTo( dc, left, top + ell_height/2 );
- PSDRV_WriteArc( dc, left + ell_width/2, top + ell_height/2, ell_width,
+ PSDRV_WriteMoveTo( physDev, left, top + ell_height/2 );
+ PSDRV_WriteArc( physDev, left + ell_width/2, top + ell_height/2, ell_width,
ell_height, 90.0, 180.0);
- PSDRV_WriteLineTo( dc, right - ell_width/2, top );
- PSDRV_WriteArc( dc, right - ell_width/2, top + ell_height/2, ell_width,
+ PSDRV_WriteLineTo( physDev, right - ell_width/2, top );
+ PSDRV_WriteArc( physDev, right - ell_width/2, top + ell_height/2, ell_width,
ell_height, 0.0, 90.0);
- PSDRV_WriteLineTo( dc, right, bottom - ell_height/2 );
- PSDRV_WriteArc( dc, right - ell_width/2, bottom - ell_height/2, ell_width,
+ PSDRV_WriteLineTo( physDev, right, bottom - ell_height/2 );
+ PSDRV_WriteArc( physDev, right - ell_width/2, bottom - ell_height/2, ell_width,
ell_height, -90.0, 0.0);
- PSDRV_WriteLineTo( dc, right - ell_width/2, bottom);
- PSDRV_WriteArc( dc, left + ell_width/2, bottom - ell_height/2, ell_width,
+ PSDRV_WriteLineTo( physDev, right - ell_width/2, bottom);
+ PSDRV_WriteArc( physDev, left + ell_width/2, bottom - ell_height/2, ell_width,
ell_height, 180.0, -90.0);
- PSDRV_WriteClosePath( dc );
+ PSDRV_WriteClosePath( physDev );
- PSDRV_Brush(dc,0);
- PSDRV_SetPen(dc);
- PSDRV_DrawLine(dc);
+ PSDRV_Brush(physDev,0);
+ PSDRV_SetPen(physDev);
+ PSDRV_DrawLine(physDev);
return TRUE;
}
@@ -119,12 +122,11 @@
*
* Does the work of Arc, Chord and Pie. lines is 0, 1 or 2 respectively.
*/
-static BOOL PSDRV_DrawArc( DC *dc, INT left, INT top,
- INT right, INT bottom,
- INT xstart, INT ystart,
- INT xend, INT yend,
- int lines )
+static BOOL PSDRV_DrawArc( PSDRV_PDEVICE *physDev, INT left, INT top,
+ INT right, INT bottom, INT xstart, INT ystart,
+ INT xend, INT yend, int lines )
{
+ DC *dc = physDev->dc;
INT x, y, h, w;
double start_angle, end_angle, ratio;
@@ -148,17 +150,17 @@
end_angle *= 180.0 / PI;
if(lines == 2) /* pie */
- PSDRV_WriteMoveTo(dc, x, y);
+ PSDRV_WriteMoveTo(physDev, x, y);
else
- PSDRV_WriteNewPath( dc );
+ PSDRV_WriteNewPath( physDev );
- PSDRV_WriteArc(dc, x, y, w, h, start_angle, end_angle);
+ PSDRV_WriteArc(physDev, x, y, w, h, start_angle, end_angle);
if(lines == 1 || lines == 2) { /* chord or pie */
- PSDRV_WriteClosePath(dc);
- PSDRV_Brush(dc,0);
+ PSDRV_WriteClosePath(physDev);
+ PSDRV_Brush(physDev,0);
}
- PSDRV_SetPen(dc);
- PSDRV_DrawLine(dc);
+ PSDRV_SetPen(physDev);
+ PSDRV_DrawLine(physDev);
return TRUE;
}
@@ -166,41 +168,39 @@
/***********************************************************************
* PSDRV_Arc
*/
-BOOL PSDRV_Arc( DC *dc, INT left, INT top, INT right, INT bottom,
- INT xstart, INT ystart, INT xend, INT yend )
+BOOL PSDRV_Arc( PSDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
+ INT xstart, INT ystart, INT xend, INT yend )
{
- return PSDRV_DrawArc( dc, left, top, right, bottom, xstart, ystart,
- xend, yend, 0 );
+ return PSDRV_DrawArc( physDev, left, top, right, bottom, xstart, ystart, xend, yend, 0 );
}
/***********************************************************************
* PSDRV_Chord
*/
-BOOL PSDRV_Chord( DC *dc, INT left, INT top, INT right, INT bottom,
- INT xstart, INT ystart, INT xend, INT yend )
+BOOL PSDRV_Chord( PSDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
+ INT xstart, INT ystart, INT xend, INT yend )
{
- return PSDRV_DrawArc( dc, left, top, right, bottom, xstart, ystart,
- xend, yend, 1 );
+ return PSDRV_DrawArc( physDev, left, top, right, bottom, xstart, ystart, xend, yend, 1 );
}
/***********************************************************************
* PSDRV_Pie
*/
-BOOL PSDRV_Pie( DC *dc, INT left, INT top, INT right, INT bottom,
- INT xstart, INT ystart, INT xend, INT yend )
+BOOL PSDRV_Pie( PSDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom,
+ INT xstart, INT ystart, INT xend, INT yend )
{
- return PSDRV_DrawArc( dc, left, top, right, bottom, xstart, ystart,
- xend, yend, 2 );
+ return PSDRV_DrawArc( physDev, left, top, right, bottom, xstart, ystart, xend, yend, 2 );
}
/***********************************************************************
* PSDRV_Ellipse
*/
-BOOL PSDRV_Ellipse( DC *dc, INT left, INT top, INT right, INT bottom)
+BOOL PSDRV_Ellipse( PSDRV_PDEVICE *physDev, INT left, INT top, INT right, INT bottom)
{
INT x, y, w, h;
+ DC *dc = physDev->dc;
TRACE("%d %d - %d %d\n", left, top, right, bottom);
@@ -210,12 +210,12 @@
w = XLSTODS(dc, (right - left));
h = YLSTODS(dc, (bottom - top));
- PSDRV_WriteNewPath(dc);
- PSDRV_WriteArc(dc, x, y, w, h, 0.0, 360.0);
- PSDRV_WriteClosePath(dc);
- PSDRV_Brush(dc,0);
- PSDRV_SetPen(dc);
- PSDRV_DrawLine(dc);
+ PSDRV_WriteNewPath(physDev);
+ PSDRV_WriteArc(physDev, x, y, w, h, 0.0, 360.0);
+ PSDRV_WriteClosePath(physDev);
+ PSDRV_Brush(physDev,0);
+ PSDRV_SetPen(physDev);
+ PSDRV_DrawLine(physDev);
return TRUE;
}
@@ -223,24 +223,26 @@
/***********************************************************************
* PSDRV_PolyPolyline
*/
-BOOL PSDRV_PolyPolyline( DC *dc, const POINT* pts, const DWORD* counts,
+BOOL PSDRV_PolyPolyline( PSDRV_PDEVICE *physDev, const POINT* pts, const DWORD* counts,
DWORD polylines )
{
DWORD polyline, line;
const POINT* pt;
+ DC *dc = physDev->dc;
+
TRACE("\n");
pt = pts;
for(polyline = 0; polyline < polylines; polyline++) {
- PSDRV_WriteMoveTo(dc, INTERNAL_XWPTODP(dc, pt->x, pt->y), INTERNAL_YWPTODP(dc, pt->x, pt->y));
+ PSDRV_WriteMoveTo(physDev, INTERNAL_XWPTODP(dc, pt->x, pt->y), INTERNAL_YWPTODP(dc, pt->x, pt->y));
pt++;
for(line = 1; line < counts[polyline]; line++) {
- PSDRV_WriteLineTo(dc, INTERNAL_XWPTODP(dc, pt->x, pt->y), INTERNAL_YWPTODP(dc, pt->x, pt->y));
+ PSDRV_WriteLineTo(physDev, INTERNAL_XWPTODP(dc, pt->x, pt->y), INTERNAL_YWPTODP(dc, pt->x, pt->y));
pt++;
}
}
- PSDRV_SetPen(dc);
- PSDRV_DrawLine(dc);
+ PSDRV_SetPen(physDev);
+ PSDRV_DrawLine(physDev);
return TRUE;
}
@@ -248,39 +250,41 @@
/***********************************************************************
* PSDRV_Polyline
*/
-BOOL PSDRV_Polyline( DC *dc, const POINT* pt, INT count )
+BOOL PSDRV_Polyline( PSDRV_PDEVICE *physDev, const POINT* pt, INT count )
{
- return PSDRV_PolyPolyline( dc, pt, (LPDWORD) &count, 1 );
+ return PSDRV_PolyPolyline( physDev, pt, (LPDWORD) &count, 1 );
}
/***********************************************************************
* PSDRV_PolyPolygon
*/
-BOOL PSDRV_PolyPolygon( DC *dc, const POINT* pts, const INT* counts,
+BOOL PSDRV_PolyPolygon( PSDRV_PDEVICE *physDev, const POINT* pts, const INT* counts,
UINT polygons )
{
DWORD polygon, line;
const POINT* pt;
+ DC *dc = physDev->dc;
+
TRACE("\n");
pt = pts;
for(polygon = 0; polygon < polygons; polygon++) {
- PSDRV_WriteMoveTo(dc, INTERNAL_XWPTODP(dc, pt->x, pt->y), INTERNAL_YWPTODP(dc, pt->x, pt->y));
+ PSDRV_WriteMoveTo(physDev, INTERNAL_XWPTODP(dc, pt->x, pt->y), INTERNAL_YWPTODP(dc, pt->x, pt->y));
pt++;
for(line = 1; line < counts[polygon]; line++) {
- PSDRV_WriteLineTo(dc, INTERNAL_XWPTODP(dc, pt->x, pt->y), INTERNAL_YWPTODP(dc, pt->x, pt->y));
+ PSDRV_WriteLineTo(physDev, INTERNAL_XWPTODP(dc, pt->x, pt->y), INTERNAL_YWPTODP(dc, pt->x, pt->y));
pt++;
}
- PSDRV_WriteClosePath(dc);
+ PSDRV_WriteClosePath(physDev);
}
- if(dc->polyFillMode == ALTERNATE)
- PSDRV_Brush(dc, 1);
+ if(GetPolyFillMode( physDev->hdc ) == ALTERNATE)
+ PSDRV_Brush(physDev, 1);
else /* WINDING */
- PSDRV_Brush(dc, 0);
- PSDRV_SetPen(dc);
- PSDRV_DrawLine(dc);
+ PSDRV_Brush(physDev, 0);
+ PSDRV_SetPen(physDev);
+ PSDRV_DrawLine(physDev);
return TRUE;
}
@@ -288,27 +292,27 @@
/***********************************************************************
* PSDRV_Polygon
*/
-BOOL PSDRV_Polygon( DC *dc, const POINT* pt, INT count )
+BOOL PSDRV_Polygon( PSDRV_PDEVICE *physDev, const POINT* pt, INT count )
{
- return PSDRV_PolyPolygon( dc, pt, &count, 1 );
+ return PSDRV_PolyPolygon( physDev, pt, &count, 1 );
}
/***********************************************************************
* PSDRV_SetPixel
*/
-COLORREF PSDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color )
+COLORREF PSDRV_SetPixel( PSDRV_PDEVICE *physDev, INT x, INT y, COLORREF color )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
PSCOLOR pscolor;
+ DC *dc = physDev->dc;
x = INTERNAL_XWPTODP(dc, x, y);
y = INTERNAL_YWPTODP(dc, x, y);
- PSDRV_WriteRectangle( dc, x, y, 0, 0 );
+ PSDRV_WriteRectangle( physDev, x, y, 0, 0 );
PSDRV_CreateColor( physDev, &pscolor, color );
- PSDRV_WriteSetColor( dc, &pscolor );
- PSDRV_WriteFill( dc );
+ PSDRV_WriteSetColor( physDev, &pscolor );
+ PSDRV_WriteFill( physDev );
return color;
}
@@ -316,12 +320,10 @@
/***********************************************************************
* PSDRV_DrawLine
*/
-VOID PSDRV_DrawLine( DC *dc )
+VOID PSDRV_DrawLine( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
if (physDev->pen.style == PS_NULL)
- PSDRV_WriteNewPath(dc);
+ PSDRV_WriteNewPath(physDev);
else
- PSDRV_WriteStroke(dc);
+ PSDRV_WriteStroke(physDev);
}
diff --git a/dlls/wineps/init.c b/dlls/wineps/init.c
index 2c15932..4a5f049 100644
--- a/dlls/wineps/init.c
+++ b/dlls/wineps/init.c
@@ -171,7 +171,9 @@
physDev = (PSDRV_PDEVICE *)HeapAlloc( PSDRV_Heap, HEAP_ZERO_MEMORY,
sizeof(*physDev) );
if (!physDev) return FALSE;
- dc->physDev = physDev;
+ dc->physDev = (PHYSDEV)physDev;
+ physDev->hdc = dc->hSelf;
+ physDev->dc = dc;
physDev->pi = pi;
@@ -251,16 +253,14 @@
/**********************************************************************
* PSDRV_DeleteDC
*/
-BOOL PSDRV_DeleteDC( DC *dc )
+BOOL PSDRV_DeleteDC( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
TRACE("\n");
HeapFree( PSDRV_Heap, 0, physDev->Devmode );
HeapFree( PSDRV_Heap, 0, physDev->job.output );
+ physDev->dc->physDev = NULL;
HeapFree( PSDRV_Heap, 0, physDev );
- dc->physDev = NULL;
return TRUE;
}
@@ -342,9 +342,8 @@
/***********************************************************************
* GetDeviceCaps (WINEPS.@)
*/
-INT PSDRV_GetDeviceCaps( DC *dc, INT cap )
+INT PSDRV_GetDeviceCaps( PSDRV_PDEVICE *physDev, INT cap )
{
- PSDRV_PDEVICE *physDev = dc->physDev;
POINT pt;
switch(cap)
@@ -427,7 +426,7 @@
case BTLALIGNMENT:
return 0;
default:
- FIXME("(%04x): unsupported capability %d, will return 0\n", dc->hSelf, cap );
+ FIXME("(%04x): unsupported capability %d, will return 0\n", physDev->hdc, cap );
return 0;
}
}
diff --git a/dlls/wineps/objects.c b/dlls/wineps/objects.c
index 48d3835..ad6126b 100644
--- a/dlls/wineps/objects.c
+++ b/dlls/wineps/objects.c
@@ -24,46 +24,10 @@
WINE_DEFAULT_DEBUG_CHANNEL(psdrv);
/***********************************************************************
- * PSDRV_BITMAP_SelectObject
+ * PSDRV_SelectBitmap (WINEPS.@)
*/
-static HBITMAP PSDRV_BITMAP_SelectObject( DC * dc, HBITMAP hbitmap )
+HBITMAP PSDRV_SelectBitmap( PSDRV_PDEVICE *physDev, HBITMAP hbitmap )
{
FIXME("stub\n");
return 0;
}
-
-
-/***********************************************************************
- * PSDRV_SelectObject
- */
-HGDIOBJ PSDRV_SelectObject( DC *dc, HGDIOBJ handle )
-{
- HGDIOBJ ret = 0;
-
- TRACE("hdc=%04x %04x\n", dc->hSelf, handle );
-
- switch(GetObjectType( handle ))
- {
- case OBJ_PEN:
- ret = PSDRV_PEN_SelectObject( dc, handle );
- break;
- case OBJ_BRUSH:
- ret = PSDRV_BRUSH_SelectObject( dc, handle );
- break;
- case OBJ_BITMAP:
- ret = PSDRV_BITMAP_SelectObject( dc, handle );
- break;
- case OBJ_FONT:
- ret = PSDRV_FONT_SelectObject( dc, handle );
- break;
- case OBJ_REGION:
- ret = (HGDIOBJ)SelectClipRgn( dc->hSelf, handle );
- break;
- case 0: /* invalid handle */
- break;
- default:
- ERR("Unknown object type %ld\n", GetObjectType(handle) );
- break;
- }
- return ret;
-}
diff --git a/dlls/wineps/pen.c b/dlls/wineps/pen.c
index 1f9c3a2..fb3e547 100644
--- a/dlls/wineps/pen.c
+++ b/dlls/wineps/pen.c
@@ -30,21 +30,17 @@
static char PEN_alternate[] = "1";
/***********************************************************************
- * PSDRV_PEN_SelectObject
+ * PSDRV_SelectPen (WINEPS.@)
*/
-HPEN PSDRV_PEN_SelectObject( DC * dc, HPEN hpen )
+HPEN PSDRV_SelectPen( PSDRV_PDEVICE *physDev, HPEN hpen )
{
LOGPEN logpen;
- HPEN prevpen = dc->hPen;
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
if (!GetObjectA( hpen, sizeof(logpen), &logpen )) return 0;
TRACE("hpen = %08x colour = %08lx\n", hpen, logpen.lopnColor);
- dc->hPen = hpen;
-
- physDev->pen.width = INTERNAL_XWSTODS(dc, logpen.lopnWidth.x);
+ physDev->pen.width = INTERNAL_XWSTODS(physDev->dc, logpen.lopnWidth.x);
if(physDev->pen.width < 0)
physDev->pen.width = -physDev->pen.width;
@@ -82,7 +78,7 @@
}
physDev->pen.set = FALSE;
- return prevpen;
+ return hpen;
}
@@ -91,15 +87,13 @@
* PSDRV_SetPen
*
*/
-BOOL PSDRV_SetPen(DC *dc)
+BOOL PSDRV_SetPen(PSDRV_PDEVICE *physDev)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
if (physDev->pen.style != PS_NULL) {
- PSDRV_WriteSetColor(dc, &physDev->pen.color);
+ PSDRV_WriteSetColor(physDev, &physDev->pen.color);
if(!physDev->pen.set) {
- PSDRV_WriteSetPen(dc);
+ PSDRV_WriteSetPen(physDev);
physDev->pen.set = TRUE;
}
}
diff --git a/dlls/wineps/ps.c b/dlls/wineps/ps.c
index 6f8d67c..d0c30e6 100644
--- a/dlls/wineps/ps.c
+++ b/dlls/wineps/ps.c
@@ -188,12 +188,10 @@
"/%s %d array def\n";
-int PSDRV_WriteSpool(DC *dc, LPSTR lpData, WORD cch)
+int PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPSTR lpData, WORD cch)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
if(physDev->job.OutOfPage) { /* Will get here after NEWFRAME Escape */
- if( !PSDRV_StartPage(dc) )
+ if( !PSDRV_StartPage(physDev) )
return FALSE;
}
return WriteSpool16( physDev->job.hJob, lpData, cch );
@@ -221,9 +219,8 @@
-INT PSDRV_WriteHeader( DC *dc, LPCSTR title )
+INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
char *buf, *orient;
INPUTSLOT *slot;
PAGESIZE *page;
@@ -296,9 +293,8 @@
}
-INT PSDRV_WriteFooter( DC *dc )
+INT PSDRV_WriteFooter( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
char *buf;
buf = (char *)HeapAlloc( PSDRV_Heap, 0, sizeof(psfooter) + 100 );
@@ -321,10 +317,8 @@
-INT PSDRV_WriteEndPage( DC *dc )
+INT PSDRV_WriteEndPage( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-
if( WriteSpool16( physDev->job.hJob, psendpage, sizeof(psendpage)-1 ) !=
sizeof(psendpage)-1 ) {
WARN("WriteSpool error\n");
@@ -336,9 +330,8 @@
-INT PSDRV_WriteNewPage( DC *dc )
+INT PSDRV_WriteNewPage( PSDRV_PDEVICE *physDev )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
char *buf;
char name[100];
signed int xtrans, ytrans, rotation;
@@ -382,49 +375,49 @@
}
-BOOL PSDRV_WriteMoveTo(DC *dc, INT x, INT y)
+BOOL PSDRV_WriteMoveTo(PSDRV_PDEVICE *physDev, INT x, INT y)
{
char buf[100];
sprintf(buf, psmoveto, x, y);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteLineTo(DC *dc, INT x, INT y)
+BOOL PSDRV_WriteLineTo(PSDRV_PDEVICE *physDev, INT x, INT y)
{
char buf[100];
sprintf(buf, pslineto, x, y);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteStroke(DC *dc)
+BOOL PSDRV_WriteStroke(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, psstroke, sizeof(psstroke)-1);
+ return PSDRV_WriteSpool(physDev, psstroke, sizeof(psstroke)-1);
}
-BOOL PSDRV_WriteRectangle(DC *dc, INT x, INT y, INT width,
+BOOL PSDRV_WriteRectangle(PSDRV_PDEVICE *physDev, INT x, INT y, INT width,
INT height)
{
char buf[100];
sprintf(buf, psrectangle, x, y, width, height, -width);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteRRectangle(DC *dc, INT x, INT y, INT width,
+BOOL PSDRV_WriteRRectangle(PSDRV_PDEVICE *physDev, INT x, INT y, INT width,
INT height)
{
char buf[100];
sprintf(buf, psrrectangle, x, y, width, height, -width);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteArc(DC *dc, INT x, INT y, INT w, INT h, double ang1,
+BOOL PSDRV_WriteArc(PSDRV_PDEVICE *physDev, INT x, INT y, INT w, INT h, double ang1,
double ang2)
{
char buf[256];
@@ -432,12 +425,11 @@
/* Make angles -ve and swap order because we're working with an upside
down y-axis */
sprintf(buf, psarc, x, y, w, h, -ang2, -ang1);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteSetFont(DC *dc)
+BOOL PSDRV_WriteSetFont(PSDRV_PDEVICE *physDev)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
char *buf;
buf = (char *)HeapAlloc( PSDRV_Heap, 0,
@@ -452,14 +444,13 @@
physDev->font.size, -physDev->font.size,
-physDev->font.escapement);
- PSDRV_WriteSpool(dc, buf, strlen(buf));
+ PSDRV_WriteSpool(physDev, buf, strlen(buf));
HeapFree(PSDRV_Heap, 0, buf);
return TRUE;
}
-BOOL PSDRV_WriteSetColor(DC *dc, PSCOLOR *color)
+BOOL PSDRV_WriteSetColor(PSDRV_PDEVICE *physDev, PSCOLOR *color)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
char buf[256];
PSDRV_CopyColor(&physDev->inkColor, color);
@@ -467,11 +458,11 @@
case PSCOLOR_RGB:
sprintf(buf, pssetrgbcolor, color->value.rgb.r, color->value.rgb.g,
color->value.rgb.b);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
case PSCOLOR_GRAY:
sprintf(buf, pssetgray, color->value.gray.i);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
default:
ERR("Unkonwn colour type %d\n", color->type);
@@ -481,23 +472,22 @@
return FALSE;
}
-BOOL PSDRV_WriteSetPen(DC *dc)
+BOOL PSDRV_WriteSetPen(PSDRV_PDEVICE *physDev)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
char buf[256];
sprintf(buf, pssetlinewidth, physDev->pen.width);
- PSDRV_WriteSpool(dc, buf, strlen(buf));
+ PSDRV_WriteSpool(physDev, buf, strlen(buf));
if(physDev->pen.dash) {
sprintf(buf, pssetdash, physDev->pen.dash, 0);
- PSDRV_WriteSpool(dc, buf, strlen(buf));
+ PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
return TRUE;
}
-BOOL PSDRV_WriteGlyphShow(DC *dc, LPCWSTR str, INT count)
+BOOL PSDRV_WriteGlyphShow(PSDRV_PDEVICE *physDev, LPCWSTR str, INT count)
{
char buf[128];
int i;
@@ -507,8 +497,7 @@
LPCSTR name;
int l;
- name = PSDRV_UVMetrics(str[i],
- ((PSDRV_PDEVICE *)dc->physDev)->font.afm)->N->sz;
+ name = PSDRV_UVMetrics(str[i], physDev->font.afm)->N->sz;
l = snprintf(buf, sizeof(buf), psglyphshow, name);
if (l < sizeof(psglyphshow) - 2 || l > sizeof(buf) - 1)
@@ -517,84 +506,84 @@
continue;
}
- PSDRV_WriteSpool(dc, buf, l);
+ PSDRV_WriteSpool(physDev, buf, l);
}
return TRUE;
}
-BOOL PSDRV_WriteFill(DC *dc)
+BOOL PSDRV_WriteFill(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, psfill, sizeof(psfill)-1);
+ return PSDRV_WriteSpool(physDev, psfill, sizeof(psfill)-1);
}
-BOOL PSDRV_WriteEOFill(DC *dc)
+BOOL PSDRV_WriteEOFill(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, pseofill, sizeof(pseofill)-1);
+ return PSDRV_WriteSpool(physDev, pseofill, sizeof(pseofill)-1);
}
-BOOL PSDRV_WriteGSave(DC *dc)
+BOOL PSDRV_WriteGSave(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, psgsave, sizeof(psgsave)-1);
+ return PSDRV_WriteSpool(physDev, psgsave, sizeof(psgsave)-1);
}
-BOOL PSDRV_WriteGRestore(DC *dc)
+BOOL PSDRV_WriteGRestore(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, psgrestore, sizeof(psgrestore)-1);
+ return PSDRV_WriteSpool(physDev, psgrestore, sizeof(psgrestore)-1);
}
-BOOL PSDRV_WriteNewPath(DC *dc)
+BOOL PSDRV_WriteNewPath(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, psnewpath, sizeof(psnewpath)-1);
+ return PSDRV_WriteSpool(physDev, psnewpath, sizeof(psnewpath)-1);
}
-BOOL PSDRV_WriteClosePath(DC *dc)
+BOOL PSDRV_WriteClosePath(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, psclosepath, sizeof(psclosepath)-1);
+ return PSDRV_WriteSpool(physDev, psclosepath, sizeof(psclosepath)-1);
}
-BOOL PSDRV_WriteClip(DC *dc)
+BOOL PSDRV_WriteClip(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, psclip, sizeof(psclip)-1);
+ return PSDRV_WriteSpool(physDev, psclip, sizeof(psclip)-1);
}
-BOOL PSDRV_WriteEOClip(DC *dc)
+BOOL PSDRV_WriteEOClip(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, pseoclip, sizeof(pseoclip)-1);
+ return PSDRV_WriteSpool(physDev, pseoclip, sizeof(pseoclip)-1);
}
-BOOL PSDRV_WriteInitClip(DC *dc)
+BOOL PSDRV_WriteInitClip(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, psinitclip, sizeof(psinitclip)-1);
+ return PSDRV_WriteSpool(physDev, psinitclip, sizeof(psinitclip)-1);
}
-BOOL PSDRV_WriteHatch(DC *dc)
+BOOL PSDRV_WriteHatch(PSDRV_PDEVICE *physDev)
{
- return PSDRV_WriteSpool(dc, pshatch, sizeof(pshatch)-1);
+ return PSDRV_WriteSpool(physDev, pshatch, sizeof(pshatch)-1);
}
-BOOL PSDRV_WriteRotate(DC *dc, float ang)
+BOOL PSDRV_WriteRotate(PSDRV_PDEVICE *physDev, float ang)
{
char buf[256];
sprintf(buf, psrotate, ang);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteIndexColorSpaceBegin(DC *dc, int size)
+BOOL PSDRV_WriteIndexColorSpaceBegin(PSDRV_PDEVICE *physDev, int size)
{
char buf[256];
sprintf(buf, "[/Indexed /DeviceRGB %d\n<\n", size);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteIndexColorSpaceEnd(DC *dc)
+BOOL PSDRV_WriteIndexColorSpaceEnd(PSDRV_PDEVICE *physDev)
{
char buf[] = ">\n] setcolorspace\n";
- return PSDRV_WriteSpool(dc, buf, sizeof(buf) - 1);
+ return PSDRV_WriteSpool(physDev, buf, sizeof(buf) - 1);
}
-BOOL PSDRV_WriteRGB(DC *dc, COLORREF *map, int number)
+BOOL PSDRV_WriteRGB(PSDRV_PDEVICE *physDev, COLORREF *map, int number)
{
char *buf = HeapAlloc(PSDRV_Heap, 0, number * 7 + 1), *ptr;
int i;
@@ -606,13 +595,13 @@
((i & 0x7) == 0x7) || (i == number - 1) ? '\n' : ' ');
ptr += 7;
}
- PSDRV_WriteSpool(dc, buf, number * 7);
+ PSDRV_WriteSpool(physDev, buf, number * 7);
HeapFree(PSDRV_Heap, 0, buf);
return TRUE;
}
-BOOL PSDRV_WriteImageDict(DC *dc, WORD depth, INT xDst, INT yDst,
+BOOL PSDRV_WriteImageDict(PSDRV_PDEVICE *physDev, WORD depth, INT xDst, INT yDst,
INT widthDst, INT heightDst, INT widthSrc,
INT heightSrc, char *bits)
{
@@ -631,7 +620,7 @@
sprintf(buf, start, xDst, yDst, widthDst, heightDst, widthSrc, heightSrc,
(depth < 8) ? depth : 8, widthSrc, -heightSrc, heightSrc);
- PSDRV_WriteSpool(dc, buf, strlen(buf));
+ PSDRV_WriteSpool(physDev, buf, strlen(buf));
switch(depth) {
case 8:
@@ -651,13 +640,13 @@
break;
}
- PSDRV_WriteSpool(dc, buf, strlen(buf));
+ PSDRV_WriteSpool(physDev, buf, strlen(buf));
if(!bits)
- PSDRV_WriteSpool(dc, end, sizeof(end) - 1);
+ PSDRV_WriteSpool(physDev, end, sizeof(end) - 1);
else {
sprintf(buf, endbits, bits);
- PSDRV_WriteSpool(dc, buf, strlen(buf));
+ PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
HeapFree(PSDRV_Heap, 0, buf);
@@ -665,7 +654,7 @@
}
-BOOL PSDRV_WriteBytes(DC *dc, const BYTE *bytes, int number)
+BOOL PSDRV_WriteBytes(PSDRV_PDEVICE *physDev, const BYTE *bytes, int number)
{
char *buf = HeapAlloc(PSDRV_Heap, 0, number * 3 + 1);
char *ptr;
@@ -678,13 +667,13 @@
((i & 0xf) == 0xf) || (i == number - 1) ? '\n' : ' ');
ptr += 3;
}
- PSDRV_WriteSpool(dc, buf, number * 3);
+ PSDRV_WriteSpool(physDev, buf, number * 3);
HeapFree(PSDRV_Heap, 0, buf);
return TRUE;
}
-BOOL PSDRV_WriteDIBits16(DC *dc, const WORD *words, int number)
+BOOL PSDRV_WriteDIBits16(PSDRV_PDEVICE *physDev, const WORD *words, int number)
{
char *buf = HeapAlloc(PSDRV_Heap, 0, number * 7 + 1);
char *ptr;
@@ -707,13 +696,13 @@
((i & 0x7) == 0x7) || (i == number - 1) ? '\n' : ' ');
ptr += 7;
}
- PSDRV_WriteSpool(dc, buf, number * 7);
+ PSDRV_WriteSpool(physDev, buf, number * 7);
HeapFree(PSDRV_Heap, 0, buf);
return TRUE;
}
-BOOL PSDRV_WriteDIBits24(DC *dc, const BYTE *bits, int number)
+BOOL PSDRV_WriteDIBits24(PSDRV_PDEVICE *physDev, const BYTE *bits, int number)
{
char *buf = HeapAlloc(PSDRV_Heap, 0, number * 7 + 1);
char *ptr;
@@ -727,13 +716,13 @@
((i & 0x7) == 0x7) || (i == number - 1) ? '\n' : ' ');
ptr += 7;
}
- PSDRV_WriteSpool(dc, buf, number * 7);
+ PSDRV_WriteSpool(physDev, buf, number * 7);
HeapFree(PSDRV_Heap, 0, buf);
return TRUE;
}
-BOOL PSDRV_WriteDIBits32(DC *dc, const BYTE *bits, int number)
+BOOL PSDRV_WriteDIBits32(PSDRV_PDEVICE *physDev, const BYTE *bits, int number)
{
char *buf = HeapAlloc(PSDRV_Heap, 0, number * 7 + 1);
char *ptr;
@@ -747,53 +736,53 @@
((i & 0x7) == 0x7) || (i == number - 1) ? '\n' : ' ');
ptr += 7;
}
- PSDRV_WriteSpool(dc, buf, number * 7);
+ PSDRV_WriteSpool(physDev, buf, number * 7);
HeapFree(PSDRV_Heap, 0, buf);
return TRUE;
}
-BOOL PSDRV_WriteArrayGet(DC *dc, CHAR *pszArrayName, INT nIndex)
+BOOL PSDRV_WriteArrayGet(PSDRV_PDEVICE *physDev, CHAR *pszArrayName, INT nIndex)
{
char buf[100];
sprintf(buf, psarrayget, pszArrayName, nIndex);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteArrayPut(DC *dc, CHAR *pszArrayName, INT nIndex, LONG lObject)
+BOOL PSDRV_WriteArrayPut(PSDRV_PDEVICE *physDev, CHAR *pszArrayName, INT nIndex, LONG lObject)
{
char buf[100];
sprintf(buf, psarrayput, pszArrayName, nIndex, lObject);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteArrayDef(DC *dc, CHAR *pszArrayName, INT nSize)
+BOOL PSDRV_WriteArrayDef(PSDRV_PDEVICE *physDev, CHAR *pszArrayName, INT nSize)
{
char buf[100];
sprintf(buf, psarraydef, pszArrayName, nSize);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteRectClip(DC *dc, INT x, INT y, INT w, INT h)
+BOOL PSDRV_WriteRectClip(PSDRV_PDEVICE *physDev, INT x, INT y, INT w, INT h)
{
char buf[100];
sprintf(buf, psrectclip, x, y, w, h);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WriteRectClip2(DC *dc, CHAR *pszArrayName)
+BOOL PSDRV_WriteRectClip2(PSDRV_PDEVICE *physDev, CHAR *pszArrayName)
{
char buf[100];
sprintf(buf, psrectclip2, pszArrayName);
- return PSDRV_WriteSpool(dc, buf, strlen(buf));
+ return PSDRV_WriteSpool(physDev, buf, strlen(buf));
}
-BOOL PSDRV_WritePatternDict(DC *dc, BITMAP *bm, BYTE *bits)
+BOOL PSDRV_WritePatternDict(PSDRV_PDEVICE *physDev, BITMAP *bm, BYTE *bits)
{
char start[] = "<<\n /PaintType 1\n /PatternType 1\n /TilingType 1\n "
"/BBox [0 0 %d %d]\n /XStep %d\n /YStep %d\n /PaintProc {\n begin\n";
@@ -808,12 +797,12 @@
buf = HeapAlloc(PSDRV_Heap, 0, sizeof(start) + 100);
sprintf(buf, start, w, h, w, h);
- PSDRV_WriteSpool(dc, buf, strlen(buf));
- PSDRV_WriteIndexColorSpaceBegin(dc, 1);
- map[0] = dc->textColor;
- map[1] = dc->backgroundColor;
- PSDRV_WriteRGB(dc, map, 2);
- PSDRV_WriteIndexColorSpaceEnd(dc);
+ PSDRV_WriteSpool(physDev, buf, strlen(buf));
+ PSDRV_WriteIndexColorSpaceBegin(physDev, 1);
+ map[0] = GetTextColor( physDev->hdc );
+ map[1] = GetBkColor( physDev->hdc );
+ PSDRV_WriteRGB(physDev, map, 2);
+ PSDRV_WriteIndexColorSpaceEnd(physDev);
ptr = buf;
for(y = h-1; y >= 0; y--) {
for(x = 0; x < w/8; x++) {
@@ -821,8 +810,8 @@
ptr += 2;
}
}
- PSDRV_WriteImageDict(dc, 1, 0, 0, 8, 8, 8, 8, buf);
- PSDRV_WriteSpool(dc, end, sizeof(end) - 1);
+ PSDRV_WriteImageDict(physDev, 1, 0, 0, 8, 8, 8, 8, buf);
+ PSDRV_WriteSpool(physDev, end, sizeof(end) - 1);
HeapFree(PSDRV_Heap, 0, buf);
return TRUE;
}
diff --git a/dlls/wineps/psdrv.h b/dlls/wineps/psdrv.h
index 0e1009e..675fd58 100644
--- a/dlls/wineps/psdrv.h
+++ b/dlls/wineps/psdrv.h
@@ -267,6 +267,8 @@
} JOB;
typedef struct {
+ HDC hdc;
+ DC *dc;
PSFONT font; /* Current PS font */
PSPEN pen;
PSBRUSH brush;
@@ -327,13 +329,10 @@
extern void PSDRV_FreeAFMList( FONTFAMILY *head );
extern BOOL WINAPI PSDRV_Init(HINSTANCE hinst, DWORD reason, LPVOID reserved);
-extern HFONT PSDRV_FONT_SelectObject( DC *dc, HFONT hfont );
-extern HPEN PSDRV_PEN_SelectObject( DC * dc, HPEN hpen );
-extern HBRUSH PSDRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush );
-extern BOOL PSDRV_Brush(DC *dc, BOOL EO);
-extern BOOL PSDRV_SetFont( DC *dc );
-extern BOOL PSDRV_SetPen( DC *dc );
+extern BOOL PSDRV_Brush(PSDRV_PDEVICE *physDev, BOOL EO);
+extern BOOL PSDRV_SetFont( PSDRV_PDEVICE *physDev );
+extern BOOL PSDRV_SetPen( PSDRV_PDEVICE *physDev );
extern BOOL PSDRV_CmpColor(PSCOLOR *col1, PSCOLOR *col2);
extern BOOL PSDRV_CopyColor(PSCOLOR *col1, PSCOLOR *col2);
@@ -341,98 +340,95 @@
COLORREF wincolor );
extern char PSDRV_UnicodeToANSI(int u);
-extern INT PSDRV_WriteHeader( DC *dc, LPCSTR title );
-extern INT PSDRV_WriteFooter( DC *dc );
-extern INT PSDRV_WriteNewPage( DC *dc );
-extern INT PSDRV_WriteEndPage( DC *dc );
-extern BOOL PSDRV_WriteMoveTo(DC *dc, INT x, INT y);
-extern BOOL PSDRV_WriteLineTo(DC *dc, INT x, INT y);
-extern BOOL PSDRV_WriteStroke(DC *dc);
-extern BOOL PSDRV_WriteRectangle(DC *dc, INT x, INT y, INT width,
+extern INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title );
+extern INT PSDRV_WriteFooter( PSDRV_PDEVICE *physDev );
+extern INT PSDRV_WriteNewPage( PSDRV_PDEVICE *physDev );
+extern INT PSDRV_WriteEndPage( PSDRV_PDEVICE *physDev );
+extern BOOL PSDRV_WriteMoveTo(PSDRV_PDEVICE *physDev, INT x, INT y);
+extern BOOL PSDRV_WriteLineTo(PSDRV_PDEVICE *physDev, INT x, INT y);
+extern BOOL PSDRV_WriteStroke(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteRectangle(PSDRV_PDEVICE *physDev, INT x, INT y, INT width,
INT height);
-extern BOOL PSDRV_WriteRRectangle(DC *dc, INT x, INT y, INT width,
+extern BOOL PSDRV_WriteRRectangle(PSDRV_PDEVICE *physDev, INT x, INT y, INT width,
INT height);
-extern BOOL PSDRV_WriteSetFont(DC *dc);
-extern BOOL PSDRV_WriteGlyphShow(DC *dc, LPCWSTR str, INT count);
-extern BOOL PSDRV_WriteSetPen(DC *dc);
-extern BOOL PSDRV_WriteArc(DC *dc, INT x, INT y, INT w, INT h,
+extern BOOL PSDRV_WriteSetFont(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteGlyphShow(PSDRV_PDEVICE *physDev, LPCWSTR str, INT count);
+extern BOOL PSDRV_WriteSetPen(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteArc(PSDRV_PDEVICE *physDev, INT x, INT y, INT w, INT h,
double ang1, double ang2);
-extern BOOL PSDRV_WriteSetColor(DC *dc, PSCOLOR *color);
-extern BOOL PSDRV_WriteSetBrush(DC *dc);
-extern BOOL PSDRV_WriteFill(DC *dc);
-extern BOOL PSDRV_WriteEOFill(DC *dc);
-extern BOOL PSDRV_WriteGSave(DC *dc);
-extern BOOL PSDRV_WriteGRestore(DC *dc);
-extern BOOL PSDRV_WriteNewPath(DC *dc);
-extern BOOL PSDRV_WriteClosePath(DC *dc);
-extern BOOL PSDRV_WriteInitClip(DC *dc);
-extern BOOL PSDRV_WriteClip(DC *dc);
-extern BOOL PSDRV_WriteRectClip(DC *dc, INT x, INT y, INT w, INT h);
-extern BOOL PSDRV_WriteRectClip2(DC *dc, CHAR *pszArrayName);
-extern BOOL PSDRV_WriteEOClip(DC *dc);
-extern BOOL PSDRV_WriteHatch(DC *dc);
-extern BOOL PSDRV_WriteRotate(DC *dc, float ang);
-extern BOOL PSDRV_WriteIndexColorSpaceBegin(DC *dc, int size);
-extern BOOL PSDRV_WriteIndexColorSpaceEnd(DC *dc);
-extern BOOL PSDRV_WriteRGB(DC *dc, COLORREF *map, int number);
-extern BOOL PSDRV_WriteImageDict(DC *dc, WORD depth, INT xDst, INT yDst,
+extern BOOL PSDRV_WriteSetColor(PSDRV_PDEVICE *physDev, PSCOLOR *color);
+extern BOOL PSDRV_WriteSetBrush(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteFill(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteEOFill(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteGSave(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteGRestore(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteNewPath(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteClosePath(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteInitClip(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteClip(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteRectClip(PSDRV_PDEVICE *physDev, INT x, INT y, INT w, INT h);
+extern BOOL PSDRV_WriteRectClip2(PSDRV_PDEVICE *physDev, CHAR *pszArrayName);
+extern BOOL PSDRV_WriteEOClip(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteHatch(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteRotate(PSDRV_PDEVICE *physDev, float ang);
+extern BOOL PSDRV_WriteIndexColorSpaceBegin(PSDRV_PDEVICE *physDev, int size);
+extern BOOL PSDRV_WriteIndexColorSpaceEnd(PSDRV_PDEVICE *physDev);
+extern BOOL PSDRV_WriteRGB(PSDRV_PDEVICE *physDev, COLORREF *map, int number);
+extern BOOL PSDRV_WriteImageDict(PSDRV_PDEVICE *physDev, WORD depth, INT xDst, INT yDst,
INT widthDst, INT heightDst, INT widthSrc,
INT heightSrc, char *bits);
-extern BOOL PSDRV_WriteBytes(DC *dc, const BYTE *bytes, int number);
-extern BOOL PSDRV_WriteDIBits16(DC *dc, const WORD *words, int number);
-extern BOOL PSDRV_WriteDIBits24(DC *dc, const BYTE *bits, int number);
-extern BOOL PSDRV_WriteDIBits32(DC *dc, const BYTE *bits, int number);
-extern int PSDRV_WriteSpool(DC *dc, LPSTR lpData, WORD cch);
-extern BOOL PSDRV_WritePatternDict(DC *dc, BITMAP *bm, BYTE *bits);
-extern BOOL PSDRV_WriteArrayPut(DC *dc, CHAR *pszArrayName, INT nIndex, LONG lCoord);
-extern BOOL PSDRV_WriteArrayDef(DC *dc, CHAR *pszArrayName, INT nSize);
+extern BOOL PSDRV_WriteBytes(PSDRV_PDEVICE *physDev, const BYTE *bytes, int number);
+extern BOOL PSDRV_WriteDIBits16(PSDRV_PDEVICE *physDev, const WORD *words, int number);
+extern BOOL PSDRV_WriteDIBits24(PSDRV_PDEVICE *physDev, const BYTE *bits, int number);
+extern BOOL PSDRV_WriteDIBits32(PSDRV_PDEVICE *physDev, const BYTE *bits, int number);
+extern int PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPSTR lpData, WORD cch);
+extern BOOL PSDRV_WritePatternDict(PSDRV_PDEVICE *physDev, BITMAP *bm, BYTE *bits);
+extern BOOL PSDRV_WriteArrayPut(PSDRV_PDEVICE *physDev, CHAR *pszArrayName, INT nIndex, LONG lCoord);
+extern BOOL PSDRV_WriteArrayDef(PSDRV_PDEVICE *physDev, CHAR *pszArrayName, INT nSize);
-extern BOOL PSDRV_Arc( DC *dc, INT left, INT top, INT right,
+extern BOOL PSDRV_Arc( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom, INT xstart, INT ystart,
INT xend, INT yend );
-extern BOOL PSDRV_Chord( DC *dc, INT left, INT top, INT right,
+extern BOOL PSDRV_Chord( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom, INT xstart, INT ystart,
INT xend, INT yend );
-extern BOOL PSDRV_Ellipse( DC *dc, INT left, INT top, INT right,
+extern BOOL PSDRV_Ellipse( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom );
-extern INT PSDRV_EndDoc( DC *dc );
-extern INT PSDRV_EndPage( DC *dc );
+extern INT PSDRV_EndDoc( PSDRV_PDEVICE *physDev );
+extern INT PSDRV_EndPage( PSDRV_PDEVICE *physDev );
extern BOOL PSDRV_EnumDeviceFonts( HDC hdc, LPLOGFONTW plf,
DEVICEFONTENUMPROC proc, LPARAM lp );
-extern INT PSDRV_Escape( DC *dc, INT nEscape, INT cbInput,
- SEGPTR lpInData, SEGPTR lpOutData );
-extern BOOL PSDRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+extern BOOL PSDRV_ExtTextOut( PSDRV_PDEVICE *physDev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR str, UINT count,
const INT *lpDx );
-extern BOOL PSDRV_GetCharWidth( DC *dc, UINT firstChar, UINT lastChar,
+extern BOOL PSDRV_GetCharWidth( PSDRV_PDEVICE *physDev, UINT firstChar, UINT lastChar,
LPINT buffer );
-extern BOOL PSDRV_GetTextExtentPoint( DC *dc, LPCWSTR str, INT count,
+extern BOOL PSDRV_GetTextExtentPoint( PSDRV_PDEVICE *physDev, LPCWSTR str, INT count,
LPSIZE size );
-extern BOOL PSDRV_GetTextMetrics( DC *dc, TEXTMETRICW *metrics );
-extern BOOL PSDRV_LineTo( DC *dc, INT x, INT y );
-extern BOOL PSDRV_PatBlt( DC *dc, INT x, INT y, INT width, INT height, DWORD
+extern BOOL PSDRV_GetTextMetrics( PSDRV_PDEVICE *physDev, TEXTMETRICW *metrics );
+extern BOOL PSDRV_LineTo( PSDRV_PDEVICE *physDev, INT x, INT y );
+extern BOOL PSDRV_PatBlt( PSDRV_PDEVICE *physDev, INT x, INT y, INT width, INT height, DWORD
dwRop);
-extern BOOL PSDRV_Pie( DC *dc, INT left, INT top, INT right,
+extern BOOL PSDRV_Pie( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom, INT xstart, INT ystart,
INT xend, INT yend );
-extern BOOL PSDRV_Polygon( DC *dc, const POINT* pt, INT count );
-extern BOOL PSDRV_Polyline( DC *dc, const POINT* pt, INT count );
-extern BOOL PSDRV_PolyPolygon( DC *dc, const POINT* pts, const INT* counts,
+extern BOOL PSDRV_Polygon( PSDRV_PDEVICE *physDev, const POINT* pt, INT count );
+extern BOOL PSDRV_Polyline( PSDRV_PDEVICE *physDev, const POINT* pt, INT count );
+extern BOOL PSDRV_PolyPolygon( PSDRV_PDEVICE *physDev, const POINT* pts, const INT* counts,
UINT polygons );
-extern BOOL PSDRV_PolyPolyline( DC *dc, const POINT* pts, const DWORD* counts,
+extern BOOL PSDRV_PolyPolyline( PSDRV_PDEVICE *physDev, const POINT* pts, const DWORD* counts,
DWORD polylines );
-extern BOOL PSDRV_Rectangle( DC *dc, INT left, INT top, INT right,
+extern BOOL PSDRV_Rectangle( PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom );
-extern BOOL PSDRV_RoundRect(DC *dc, INT left, INT top, INT right,
+extern BOOL PSDRV_RoundRect(PSDRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom, INT ell_width, INT ell_height);
-extern HGDIOBJ PSDRV_SelectObject( DC *dc, HGDIOBJ handle );
-extern COLORREF PSDRV_SetBkColor( DC *dc, COLORREF color );
-extern VOID PSDRV_SetDeviceClipping( DC *dc );
-extern COLORREF PSDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color );
-extern COLORREF PSDRV_SetTextColor( DC *dc, COLORREF color );
-extern INT PSDRV_StartDoc( DC *dc, const DOCINFOA *doc );
-extern INT PSDRV_StartPage( DC *dc );
-extern INT PSDRV_StretchDIBits( DC *dc, INT xDst, INT yDst,
+extern COLORREF PSDRV_SetBkColor( PSDRV_PDEVICE *physDev, COLORREF color );
+extern VOID PSDRV_SetDeviceClipping( PSDRV_PDEVICE *physDev );
+extern COLORREF PSDRV_SetPixel( PSDRV_PDEVICE *physDev, INT x, INT y, COLORREF color );
+extern COLORREF PSDRV_SetTextColor( PSDRV_PDEVICE *physDev, COLORREF color );
+extern INT PSDRV_StartDoc( PSDRV_PDEVICE *physDev, const DOCINFOA *doc );
+extern INT PSDRV_StartPage( PSDRV_PDEVICE *physDev );
+extern INT PSDRV_StretchDIBits( PSDRV_PDEVICE *physDev, INT xDst, INT yDst,
INT widthDst, INT heightDst, INT xSrc,
INT ySrc, INT widthSrc, INT heightSrc,
const void *bits, const BITMAPINFO *info,
@@ -447,7 +443,7 @@
LPCSTR lpszPort,
WORD fwCapability, LPSTR lpszOutput,
LPDEVMODEA lpdm);
-VOID PSDRV_DrawLine( DC *dc );
+VOID PSDRV_DrawLine( PSDRV_PDEVICE *physDev );
INT PSDRV_GlyphListInit(void);
const GLYPHNAME *PSDRV_GlyphName(LPCSTR szName);
VOID PSDRV_IndexGlyphList(void);
diff --git a/dlls/wineps/text.c b/dlls/wineps/text.c
index 56c8fa6..8b36fba 100644
--- a/dlls/wineps/text.c
+++ b/dlls/wineps/text.c
@@ -24,27 +24,27 @@
WINE_DEFAULT_DEBUG_CHANNEL(psdrv);
-static BOOL PSDRV_Text(DC *dc, INT x, INT y, LPCWSTR str, UINT count,
+static BOOL PSDRV_Text(PSDRV_PDEVICE *physDev, INT x, INT y, LPCWSTR str, UINT count,
BOOL bDrawBackground, const INT *lpDx);
/***********************************************************************
* PSDRV_ExtTextOut
*/
-BOOL PSDRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+BOOL PSDRV_ExtTextOut( PSDRV_PDEVICE *physDev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR str, UINT count,
const INT *lpDx )
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
BOOL bResult = TRUE;
BOOL bClipped = FALSE;
BOOL bOpaque = FALSE;
RECT rect;
+ DC *dc = physDev->dc;
TRACE("(x=%d, y=%d, flags=0x%08x, str=%s, count=%d, lpDx=%p)\n", x, y,
flags, debugstr_wn(str, count), count, lpDx);
/* write font if not already written */
- PSDRV_SetFont(dc);
+ PSDRV_SetFont(physDev);
/* set clipping and/or draw background */
if ((flags & (ETO_CLIPPED | ETO_OPAQUE)) && (lprect != NULL))
@@ -54,31 +54,31 @@
rect.top = INTERNAL_YWPTODP(dc, lprect->left, lprect->top);
rect.bottom = INTERNAL_YWPTODP(dc, lprect->right, lprect->bottom);
- PSDRV_WriteGSave(dc);
- PSDRV_WriteRectangle(dc, rect.left, rect.top, rect.right - rect.left,
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteRectangle(physDev, rect.left, rect.top, rect.right - rect.left,
rect.bottom - rect.top);
if (flags & ETO_OPAQUE)
{
bOpaque = TRUE;
- PSDRV_WriteGSave(dc);
- PSDRV_WriteSetColor(dc, &physDev->bkColor);
- PSDRV_WriteFill(dc);
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteSetColor(physDev, &physDev->bkColor);
+ PSDRV_WriteFill(physDev);
+ PSDRV_WriteGRestore(physDev);
}
if (flags & ETO_CLIPPED)
{
bClipped = TRUE;
- PSDRV_WriteClip(dc);
+ PSDRV_WriteClip(physDev);
}
- bResult = PSDRV_Text(dc, x, y, str, count, !(bClipped && bOpaque), lpDx);
- PSDRV_WriteGRestore(dc);
+ bResult = PSDRV_Text(physDev, x, y, str, count, !(bClipped && bOpaque), lpDx);
+ PSDRV_WriteGRestore(physDev);
}
else
{
- bResult = PSDRV_Text(dc, x, y, str, count, TRUE, lpDx);
+ bResult = PSDRV_Text(physDev, x, y, str, count, TRUE, lpDx);
}
return bResult;
@@ -87,12 +87,13 @@
/***********************************************************************
* PSDRV_Text
*/
-static BOOL PSDRV_Text(DC *dc, INT x, INT y, LPCWSTR str, UINT count,
+static BOOL PSDRV_Text(PSDRV_PDEVICE *physDev, INT x, INT y, LPCWSTR str, UINT count,
BOOL bDrawBackground, const INT *lpDx)
{
- PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
LPWSTR strbuf;
SIZE sz;
+ DC *dc = physDev->dc;
+ UINT align = GetTextAlign( physDev->hdc );
if (!count)
return TRUE;
@@ -103,7 +104,7 @@
return FALSE;
}
- if(dc->textAlign & TA_UPDATECP) {
+ if(align & TA_UPDATECP) {
x = dc->CursPosX;
y = dc->CursPosY;
}
@@ -111,12 +112,12 @@
x = INTERNAL_XWPTODP(dc, x, y);
y = INTERNAL_YWPTODP(dc, x, y);
- GetTextExtentPoint32W(dc->hSelf, str, count, &sz);
+ GetTextExtentPoint32W(physDev->hdc, str, count, &sz);
if(lpDx) {
SIZE tmpsz;
INT i;
/* Get the width of the last char and add on all the offsets */
- GetTextExtentPoint32W(dc->hSelf, str + count - 1, 1, &tmpsz);
+ GetTextExtentPoint32W(physDev->hdc, str + count - 1, 1, &tmpsz);
for(i = 0; i < count-1; i++)
tmpsz.cx += lpDx[i];
sz.cx = tmpsz.cx; /* sz.cy remains untouched */
@@ -124,10 +125,10 @@
sz.cx = INTERNAL_XWSTODS(dc, sz.cx);
sz.cy = INTERNAL_YWSTODS(dc, sz.cy);
- TRACE("textAlign = %x\n", dc->textAlign);
- switch(dc->textAlign & (TA_LEFT | TA_CENTER | TA_RIGHT) ) {
+ TRACE("textAlign = %x\n", align);
+ switch(align & (TA_LEFT | TA_CENTER | TA_RIGHT) ) {
case TA_LEFT:
- if(dc->textAlign & TA_UPDATECP) {
+ if(align & TA_UPDATECP) {
dc->CursPosX = INTERNAL_XDPTOWP(dc, x + sz.cx, y);
}
break;
@@ -138,13 +139,13 @@
case TA_RIGHT:
x -= sz.cx;
- if(dc->textAlign & TA_UPDATECP) {
+ if(align & TA_UPDATECP) {
dc->CursPosX = INTERNAL_XDPTOWP(dc, x, y);
}
break;
}
- switch(dc->textAlign & (TA_TOP | TA_BASELINE | TA_BOTTOM) ) {
+ switch(align & (TA_TOP | TA_BASELINE | TA_BOTTOM) ) {
case TA_TOP:
y += physDev->font.tm.tmAscent;
break;
@@ -160,22 +161,22 @@
memcpy(strbuf, str, count * sizeof(WCHAR));
*(strbuf + count) = '\0';
- if ((dc->backgroundMode != TRANSPARENT) && (bDrawBackground != FALSE))
+ if ((GetBkMode( physDev->hdc ) != TRANSPARENT) && bDrawBackground)
{
- PSDRV_WriteGSave(dc);
- PSDRV_WriteNewPath(dc);
- PSDRV_WriteRectangle(dc, x, y - physDev->font.tm.tmAscent, sz.cx,
+ PSDRV_WriteGSave(physDev);
+ PSDRV_WriteNewPath(physDev);
+ PSDRV_WriteRectangle(physDev, x, y - physDev->font.tm.tmAscent, sz.cx,
physDev->font.tm.tmAscent +
physDev->font.tm.tmDescent);
- PSDRV_WriteSetColor(dc, &physDev->bkColor);
- PSDRV_WriteFill(dc);
- PSDRV_WriteGRestore(dc);
+ PSDRV_WriteSetColor(physDev, &physDev->bkColor);
+ PSDRV_WriteFill(physDev);
+ PSDRV_WriteGRestore(physDev);
}
- PSDRV_WriteMoveTo(dc, x, y);
+ PSDRV_WriteMoveTo(physDev, x, y);
if(!lpDx)
- PSDRV_WriteGlyphShow(dc, strbuf, lstrlenW(strbuf));
+ PSDRV_WriteGlyphShow(physDev, strbuf, lstrlenW(strbuf));
else {
INT i;
float dx = 0.0, dy = 0.0;
@@ -183,13 +184,13 @@
float sin_theta = sin(physDev->font.escapement * M_PI / 1800.0);
for(i = 0; i < count-1; i++) {
TRACE("lpDx[%d] = %d\n", i, lpDx[i]);
- PSDRV_WriteGlyphShow(dc, &strbuf[i], 1);
+ PSDRV_WriteGlyphShow(physDev, &strbuf[i], 1);
dx += lpDx[i] * cos_theta;
dy -= lpDx[i] * sin_theta;
- PSDRV_WriteMoveTo(dc, x + INTERNAL_XWSTODS(dc, dx),
+ PSDRV_WriteMoveTo(physDev, x + INTERNAL_XWSTODS(dc, dx),
y + INTERNAL_YWSTODS(dc, dy));
}
- PSDRV_WriteGlyphShow(dc, &strbuf[i], 1);
+ PSDRV_WriteGlyphShow(physDev, &strbuf[i], 1);
}
/*
@@ -210,56 +211,56 @@
/* Get the width of the text */
- PSDRV_GetTextExtentPoint(dc, strbuf, lstrlenW(strbuf), &size);
+ PSDRV_GetTextExtentPoint(physDev, strbuf, lstrlenW(strbuf), &size);
size.cx = INTERNAL_XWSTODS(dc, size.cx);
/* Do the underline */
if (physDev->font.tm.tmUnderlined) {
- PSDRV_WriteNewPath(dc); /* will be closed by WriteRectangle */
+ PSDRV_WriteNewPath(physDev); /* will be closed by WriteRectangle */
if (escapement != 0) /* rotated text */
{
- PSDRV_WriteGSave(dc); /* save the graphics state */
- PSDRV_WriteMoveTo(dc, x, y); /* move to the start */
+ PSDRV_WriteGSave(physDev); /* save the graphics state */
+ PSDRV_WriteMoveTo(physDev, x, y); /* move to the start */
/* temporarily rotate the coord system */
- PSDRV_WriteRotate(dc, -escapement/10);
+ PSDRV_WriteRotate(physDev, -escapement/10);
/* draw the underline relative to the starting point */
- PSDRV_WriteRRectangle(dc, 0, (INT)pos, size.cx, (INT)thick);
+ PSDRV_WriteRRectangle(physDev, 0, (INT)pos, size.cx, (INT)thick);
}
else
- PSDRV_WriteRectangle(dc, x, y + (INT)pos, size.cx, (INT)thick);
+ PSDRV_WriteRectangle(physDev, x, y + (INT)pos, size.cx, (INT)thick);
- PSDRV_WriteFill(dc);
+ PSDRV_WriteFill(physDev);
if (escapement != 0) /* rotated text */
- PSDRV_WriteGRestore(dc); /* restore the graphics state */
+ PSDRV_WriteGRestore(physDev); /* restore the graphics state */
}
/* Do the strikeout */
if (physDev->font.tm.tmStruckOut) {
pos = -physDev->font.tm.tmAscent / 2;
- PSDRV_WriteNewPath(dc); /* will be closed by WriteRectangle */
+ PSDRV_WriteNewPath(physDev); /* will be closed by WriteRectangle */
if (escapement != 0) /* rotated text */
{
- PSDRV_WriteGSave(dc); /* save the graphics state */
- PSDRV_WriteMoveTo(dc, x, y); /* move to the start */
+ PSDRV_WriteGSave(physDev); /* save the graphics state */
+ PSDRV_WriteMoveTo(physDev, x, y); /* move to the start */
/* temporarily rotate the coord system */
- PSDRV_WriteRotate(dc, -escapement/10);
+ PSDRV_WriteRotate(physDev, -escapement/10);
/* draw the underline relative to the starting point */
- PSDRV_WriteRRectangle(dc, 0, (INT)pos, size.cx, (INT)thick);
+ PSDRV_WriteRRectangle(physDev, 0, (INT)pos, size.cx, (INT)thick);
}
else
- PSDRV_WriteRectangle(dc, x, y + (INT)pos, size.cx, (INT)thick);
+ PSDRV_WriteRectangle(physDev, x, y + (INT)pos, size.cx, (INT)thick);
- PSDRV_WriteFill(dc);
+ PSDRV_WriteFill(physDev);
if (escapement != 0) /* rotated text */
- PSDRV_WriteGRestore(dc); /* restore the graphics state */
+ PSDRV_WriteGRestore(physDev); /* restore the graphics state */
}
}
diff --git a/dlls/wineps/wineps.spec b/dlls/wineps/wineps.spec
index ef1fc3a..a8df866 100644
--- a/dlls/wineps/wineps.spec
+++ b/dlls/wineps/wineps.spec
@@ -39,7 +39,10 @@
@ cdecl Polyline(ptr ptr long) PSDRV_Polyline
@ cdecl Rectangle(ptr long long long long) PSDRV_Rectangle
@ cdecl RoundRect(ptr long long long long long long) PSDRV_RoundRect
-@ cdecl SelectObject(ptr long) PSDRV_SelectObject
+@ cdecl SelectBitmap(ptr long) PSDRV_SelectBitmap
+@ cdecl SelectBrush(ptr long) PSDRV_SelectBrush
+@ cdecl SelectFont(ptr long) PSDRV_SelectFont
+@ cdecl SelectPen(ptr long) PSDRV_SelectPen
@ cdecl SetBkColor(ptr long) PSDRV_SetBkColor
@ cdecl SetDeviceClipping(ptr) PSDRV_SetDeviceClipping
@ cdecl SetPixel(ptr long long long) PSDRV_SetPixel
diff --git a/dlls/x11drv/x11drv.spec b/dlls/x11drv/x11drv.spec
index 655f1d5..49978b0 100644
--- a/dlls/x11drv/x11drv.spec
+++ b/dlls/x11drv/x11drv.spec
@@ -26,11 +26,13 @@
@ cdecl DescribePixelFormat(ptr long long ptr) X11DRV_DescribePixelFormat
@ cdecl Ellipse(ptr long long long long) X11DRV_Ellipse
@ cdecl EnumDeviceFonts(long ptr ptr long) X11DRV_EnumDeviceFonts
-@ cdecl ExtFloodFill(ptr long long long long) X11DRV_ExtFloodFill
@ cdecl ExtEscape(ptr long long ptr long ptr) X11DRV_ExtEscape
+@ cdecl ExtFloodFill(ptr long long long long) X11DRV_ExtFloodFill
@ cdecl ExtTextOut(ptr long long long ptr ptr long ptr) X11DRV_ExtTextOut
@ cdecl GetCharWidth(ptr long long ptr) X11DRV_GetCharWidth
@ cdecl GetDCOrgEx(ptr ptr) X11DRV_GetDCOrgEx
+@ cdecl GetDIBColorTable(ptr long long ptr) X11DRV_GetDIBColorTable
+@ cdecl GetDIBits(ptr long long long ptr ptr long) X11DRV_GetDIBits
@ cdecl GetDeviceCaps(ptr long) X11DRV_GetDeviceCaps
@ cdecl GetDeviceGammaRamp(ptr ptr) X11DRV_GetDeviceGammaRamp
@ cdecl GetPixel(ptr long long) X11DRV_GetPixel
@@ -47,8 +49,13 @@
@ cdecl Polyline(ptr ptr long) X11DRV_Polyline
@ cdecl Rectangle(ptr long long long long) X11DRV_Rectangle
@ cdecl RoundRect(ptr long long long long long long) X11DRV_RoundRect
-@ cdecl SelectObject(ptr long) X11DRV_SelectObject
+@ cdecl SelectBitmap(ptr long) X11DRV_SelectBitmap
+@ cdecl SelectBrush(ptr long) X11DRV_SelectBrush
+@ cdecl SelectFont(ptr long) X11DRV_SelectFont
+@ cdecl SelectPen(ptr long) X11DRV_SelectPen
@ cdecl SetBkColor(ptr long) X11DRV_SetBkColor
+@ cdecl SetDIBColorTable(ptr long long ptr) X11DRV_SetDIBColorTable
+@ cdecl SetDIBits(ptr long long long ptr ptr long) X11DRV_SetDIBits
@ cdecl SetDIBitsToDevice(ptr long long long long long long long long ptr ptr long) X11DRV_SetDIBitsToDevice
@ cdecl SetDeviceClipping(ptr) X11DRV_SetDeviceClipping
@ cdecl SetDeviceGammaRamp(ptr ptr) X11DRV_SetDeviceGammaRamp
diff --git a/dlls/x11drv/xrender.c b/dlls/x11drv/xrender.c
index 3ab276e..0db5ce1 100644
--- a/dlls/x11drv/xrender.c
+++ b/dlls/x11drv/xrender.c
@@ -301,16 +301,15 @@
/***********************************************************************
* X11DRV_XRender_SelectFont
*/
-BOOL X11DRV_XRender_SelectFont(DC *dc, HFONT hfont)
+BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE *physDev, HFONT hfont)
{
- X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
LFANDSIZE lfsz;
GetObjectW(hfont, sizeof(lfsz.lf), &lfsz.lf);
TRACE("h=%ld w=%ld weight=%ld it=%d charset=%d name=%s\n",
lfsz.lf.lfHeight, lfsz.lf.lfWidth, lfsz.lf.lfWeight,
lfsz.lf.lfItalic, lfsz.lf.lfCharSet, debugstr_w(lfsz.lf.lfFaceName));
- lfsz.xform = dc->xformWorld2Vport;
+ lfsz.xform = physDev->dc->xformWorld2Vport;
lfsz_calc_hash(&lfsz);
if(!physDev->xrender)
@@ -326,10 +325,8 @@
/***********************************************************************
* X11DRV_XRender_DeleteDC
*/
-void X11DRV_XRender_DeleteDC(DC *dc)
+void X11DRV_XRender_DeleteDC(X11DRV_PDEVICE *physDev)
{
- X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
-
if(physDev->xrender->tile_pict)
TSXRenderFreePicture(gdi_display, physDev->xrender->tile_pict);
@@ -337,7 +334,7 @@
TSXFreePixmap(gdi_display, physDev->xrender->tile_xpm);
if(physDev->xrender->pict) {
- TRACE("freeing pict = %lx dc = %p\n", physDev->xrender->pict, dc);
+ TRACE("freeing pict = %lx dc = %p\n", physDev->xrender->pict, physDev->dc);
TSXRenderFreePicture(gdi_display, physDev->xrender->pict);
}
@@ -356,21 +353,18 @@
* drawable changes. However at the moment we delete the pict at the end of
* every ExtTextOut so this is basically a NOP.
*/
-void X11DRV_XRender_UpdateDrawable(DC *dc)
+void X11DRV_XRender_UpdateDrawable(X11DRV_PDEVICE *physDev)
{
- X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
-
if(physDev->xrender->pict) {
- TRACE("freeing pict %08lx from dc %p\n", physDev->xrender->pict, dc);
+ TRACE("freeing pict %08lx from dc %p\n", physDev->xrender->pict, physDev->dc);
TSXRenderFreePicture(gdi_display, physDev->xrender->pict);
}
physDev->xrender->pict = 0;
return;
}
-static BOOL UploadGlyph(DC *dc, WCHAR glyph)
+static BOOL UploadGlyph(X11DRV_PDEVICE *physDev, WCHAR glyph)
{
- X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
int buflen;
char *buf;
Glyph gid;
@@ -397,13 +391,13 @@
ggo_format = GGO_BITMAP;
}
- buflen = GetGlyphOutlineW(dc->hSelf, glyph, ggo_format, &gm, 0, NULL,
+ buflen = GetGlyphOutlineW(physDev->hdc, glyph, ggo_format, &gm, 0, NULL,
NULL);
if(buflen == GDI_ERROR)
return FALSE;
buf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buflen);
- GetGlyphOutlineW(dc->hSelf, glyph, ggo_format, &gm, buflen, buf, NULL);
+ GetGlyphOutlineW(physDev->hdc, glyph, ggo_format, &gm, buflen, buf, NULL);
TRACE("buflen = %d. Got metrics: %dx%d adv=%d,%d origin=%ld,%ld\n",
buflen,
@@ -477,14 +471,13 @@
/***********************************************************************
* X11DRV_XRender_ExtTextOut
*/
-BOOL X11DRV_XRender_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR wstr, UINT count,
const INT *lpDx )
{
XRenderColor col;
int idx;
TEXTMETRICW tm;
- X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
RGNOBJ *obj;
XRectangle *pXrect;
SIZE sz;
@@ -495,22 +488,22 @@
XGCValues xgcval;
LOGFONTW lf;
int render_op = PictOpOver;
+ HDC hdc = physDev->hdc;
+ DC *dc = physDev->dc;
- TRACE("%04x, %d, %d, %08x, %p, %s, %d, %p)\n", dc->hSelf, x, y, flags,
+ TRACE("%04x, %d, %d, %08x, %p, %s, %d, %p)\n", hdc, x, y, flags,
lprect, debugstr_wn(wstr, count), count, lpDx);
if(lprect)
TRACE("rect: %d,%d - %d,%d\n", lprect->left, lprect->top, lprect->right,
lprect->bottom);
- TRACE("align = %x bkmode = %x mapmode = %x\n", dc->textAlign,
- dc->backgroundMode,
- dc->MapMode);
+ TRACE("align = %x bkmode = %x mapmode = %x\n", dc->textAlign, GetBkMode(hdc), dc->MapMode);
if(dc->textAlign & TA_UPDATECP) {
x = dc->CursPosX;
y = dc->CursPosY;
}
- GetObjectW(GetCurrentObject(dc->hSelf, OBJ_FONT), sizeof(lf), &lf);
+ GetObjectW(GetCurrentObject(hdc, OBJ_FONT), sizeof(lf), &lf);
if(lf.lfEscapement != 0) {
cosEsc = cos(lf.lfEscapement * M_PI / 1800);
sinEsc = sin(lf.lfEscapement * M_PI / 1800);
@@ -522,7 +515,7 @@
if(flags & (ETO_CLIPPED | ETO_OPAQUE)) {
if(!lprect) {
if(flags & ETO_CLIPPED) return FALSE;
- GetTextExtentPointW(dc->hSelf, wstr, count, &sz);
+ GetTextExtentPointW(hdc, wstr, count, &sz);
done_extents = TRUE;
rc.left = x;
rc.top = y;
@@ -547,7 +540,7 @@
TSXChangeGC( gdi_display, physDev->gc,
GCFunction | GCBackground | GCFillStyle, &xgcval );
- X11DRV_LockDIBSection( dc, DIB_Status_GdiMod, FALSE );
+ X11DRV_LockDIBSection( physDev, DIB_Status_GdiMod, FALSE );
if(flags & ETO_OPAQUE) {
TSXSetForeground( gdi_display, physDev->gc, physDev->backgroundPixel );
@@ -557,7 +550,7 @@
}
if(count == 0) {
- X11DRV_UnlockDIBSection( dc, TRUE );
+ X11DRV_UnlockDIBSection( physDev, TRUE );
return TRUE;
}
@@ -572,7 +565,7 @@
width += lpDx[idx];
} else {
if(!done_extents) {
- GetTextExtentPointW(dc->hSelf, wstr, count, &sz);
+ GetTextExtentPointW(hdc, wstr, count, &sz);
done_extents = TRUE;
}
width = sz.cx;
@@ -581,7 +574,7 @@
xwidth = width * cosEsc;
ywidth = width * sinEsc;
- GetTextMetricsW(dc->hSelf, &tm);
+ GetTextMetricsW(hdc, &tm);
switch( dc->textAlign & (TA_LEFT | TA_RIGHT | TA_CENTER) ) {
case TA_LEFT:
@@ -623,7 +616,7 @@
if (flags & ETO_CLIPPED)
{
- SaveVisRgn16( dc->hSelf );
+ SaveVisRgn16( hdc );
CLIPPING_IntersectVisRect( dc, rc.left, rc.top, rc.right,
rc.bottom, FALSE );
}
@@ -691,7 +684,7 @@
GDI_ReleaseObj( dc->hGCClipRgn );
- if(dc->backgroundMode != TRANSPARENT) {
+ if(GetBkMode(hdc) != TRANSPARENT) {
if(!((flags & ETO_CLIPPED) && (flags & ETO_OPAQUE))) {
if(!(flags & ETO_OPAQUE) || x < rc.left || x + width >= rc.right ||
y - tm.tmAscent < rc.top || y + tm.tmDescent >= rc.bottom) {
@@ -751,7 +744,7 @@
for(idx = 0; idx < count; idx++) {
if(wstr[idx] >= physDev->xrender->cacheEntry->nrealized ||
physDev->xrender->cacheEntry->realized[wstr[idx]] == FALSE) {
- UploadGlyph(dc, wstr[idx]);
+ UploadGlyph(physDev, wstr[idx]);
}
}
@@ -764,7 +757,7 @@
physDev->xrender->pict,
physDev->xrender->cacheEntry->font_format,
physDev->xrender->cacheEntry->glyphset,
- 0, 0, dc->DCOrgX + x, dc->DCOrgY + y, wstr,
+ 0, 0, dc->DCOrgX + x, dc->DCOrgY + y, (unsigned short *)wstr,
count);
else {
@@ -777,7 +770,7 @@
physDev->xrender->cacheEntry->glyphset,
0, 0, dc->DCOrgX + x + xoff,
dc->DCOrgY + y + yoff,
- wstr + idx, 1);
+ (unsigned short *)wstr + idx, 1);
offset += INTERNAL_XWSTODS(dc, lpDx[idx]);
xoff = offset * cosEsc;
yoff = offset * sinEsc;
@@ -791,9 +784,9 @@
if (flags & ETO_CLIPPED)
- RestoreVisRgn16( dc->hSelf );
+ RestoreVisRgn16( hdc );
- X11DRV_UnlockDIBSection( dc, TRUE );
+ X11DRV_UnlockDIBSection( physDev, TRUE );
return TRUE;
}
@@ -811,19 +804,19 @@
return;
}
-BOOL X11DRV_XRender_SelectFont(DC *dc, HFONT hfont)
+BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE *physDev, HFONT hfont)
{
assert(0);
return FALSE;
}
-void X11DRV_XRender_DeleteDC(DC *dc)
+void X11DRV_XRender_DeleteDC(X11DRV_PDEVICE *physDev)
{
assert(0);
return;
}
-BOOL X11DRV_XRender_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
+BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR wstr, UINT count,
const INT *lpDx )
{
@@ -831,7 +824,7 @@
return FALSE;
}
-void X11DRV_XRender_UpdateDrawable(DC *dc)
+void X11DRV_XRender_UpdateDrawable(X11DRV_PDEVICE *physDev)
{
assert(0);
return;
diff --git a/dlls/x11drv/xvidmode.c b/dlls/x11drv/xvidmode.c
index 7976d4b..108f7b6 100644
--- a/dlls/x11drv/xvidmode.c
+++ b/dlls/x11drv/xvidmode.c
@@ -365,7 +365,7 @@
* the stuff in graphics/x11drv/ has been moved to dlls/x11drv, so that
* they can include xvidmode.h directly
*/
-BOOL X11DRV_GetDeviceGammaRamp(DC *dc, LPVOID ramp)
+BOOL X11DRV_GetDeviceGammaRamp(X11DRV_PDEVICE *physDev, LPVOID ramp)
{
#ifdef HAVE_LIBXXF86VM
return X11DRV_XF86VM_GetGammaRamp(ramp);
@@ -381,7 +381,7 @@
* the stuff in graphics/x11drv/ has been moved to dlls/x11drv, so that
* they can include xvidmode.h directly
*/
-BOOL X11DRV_SetDeviceGammaRamp(DC *dc, LPVOID ramp)
+BOOL X11DRV_SetDeviceGammaRamp(X11DRV_PDEVICE *physDev, LPVOID ramp)
{
#ifdef HAVE_LIBXXF86VM
return X11DRV_XF86VM_SetGammaRamp(ramp);