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/include/x11drv.h b/include/x11drv.h
index d5fa2a3..41ae701 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -45,8 +45,6 @@
struct tagBITMAPOBJ;
struct tagCURSORICONINFO;
-struct tagDC;
-struct tagDeviceCaps;
struct tagPALETTEOBJ;
struct tagWINDOWPOS;
@@ -80,6 +78,8 @@
/* X physical device */
typedef struct
{
+ HDC hdc;
+ DC *dc; /* direct pointer to DC, should go away */
GC gc; /* X Window GC */
Drawable drawable;
X_PHYSFONT font;
@@ -105,77 +105,75 @@
/* Wine driver X11 functions */
-extern BOOL X11DRV_BitBlt( struct tagDC *dcDst, INT xDst, INT yDst,
- INT width, INT height, struct tagDC *dcSrc,
+extern BOOL X11DRV_BitBlt( X11DRV_PDEVICE *physDevDst, INT xDst, INT yDst,
+ INT width, INT height, X11DRV_PDEVICE *physDevSrc,
INT xSrc, INT ySrc, DWORD rop );
extern BOOL X11DRV_EnumDeviceFonts( HDC hdc, LPLOGFONTW plf,
DEVICEFONTENUMPROC dfeproc, LPARAM lp );
-extern BOOL X11DRV_GetCharWidth( struct tagDC *dc, UINT firstChar,
+extern BOOL X11DRV_GetCharWidth( X11DRV_PDEVICE *physDev, UINT firstChar,
UINT lastChar, LPINT buffer );
-extern BOOL X11DRV_GetDCOrgEx( struct tagDC *dc, LPPOINT lpp );
-extern BOOL X11DRV_GetTextExtentPoint( struct tagDC *dc, LPCWSTR str,
+extern BOOL X11DRV_GetDCOrgEx( X11DRV_PDEVICE *physDev, LPPOINT lpp );
+extern BOOL X11DRV_GetTextExtentPoint( X11DRV_PDEVICE *physDev, LPCWSTR str,
INT count, LPSIZE size );
-extern BOOL X11DRV_GetTextMetrics(struct tagDC *dc, TEXTMETRICW *metrics);
-extern BOOL X11DRV_PatBlt( struct tagDC *dc, INT left, INT top,
+extern BOOL X11DRV_GetTextMetrics(X11DRV_PDEVICE *physDev, TEXTMETRICW *metrics);
+extern BOOL X11DRV_PatBlt( X11DRV_PDEVICE *physDev, INT left, INT top,
INT width, INT height, DWORD rop );
-extern VOID X11DRV_SetDeviceClipping(struct tagDC *dc);
-extern BOOL X11DRV_StretchBlt( struct tagDC *dcDst, INT xDst, INT yDst,
+extern VOID X11DRV_SetDeviceClipping(X11DRV_PDEVICE *physDev);
+extern BOOL X11DRV_StretchBlt( X11DRV_PDEVICE *physDevDst, INT xDst, INT yDst,
INT widthDst, INT heightDst,
- struct tagDC *dcSrc, INT xSrc, INT ySrc,
+ X11DRV_PDEVICE *physDevSrc, INT xSrc, INT ySrc,
INT widthSrc, INT heightSrc, DWORD rop );
-extern BOOL X11DRV_LineTo( struct tagDC *dc, INT x, INT y);
-extern BOOL X11DRV_Arc( struct tagDC *dc, INT left, INT top, INT right,
+extern BOOL X11DRV_LineTo( X11DRV_PDEVICE *physDev, INT x, INT y);
+extern BOOL X11DRV_Arc( X11DRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom, INT xstart, INT ystart, INT xend,
INT yend );
-extern BOOL X11DRV_Pie( struct tagDC *dc, INT left, INT top, INT right,
+extern BOOL X11DRV_Pie( X11DRV_PDEVICE *physDev, INT left, INT top, INT right,
INT bottom, INT xstart, INT ystart, INT xend,
INT yend );
-extern BOOL X11DRV_Chord( struct tagDC *dc, INT left, INT top,
+extern BOOL X11DRV_Chord( X11DRV_PDEVICE *physDev, INT left, INT top,
INT right, INT bottom, INT xstart,
INT ystart, INT xend, INT yend );
-extern BOOL X11DRV_Ellipse( struct tagDC *dc, INT left, INT top,
+extern BOOL X11DRV_Ellipse( X11DRV_PDEVICE *physDev, INT left, INT top,
INT right, INT bottom );
-extern BOOL X11DRV_Rectangle(struct tagDC *dc, INT left, INT top,
+extern BOOL X11DRV_Rectangle(X11DRV_PDEVICE *physDev, INT left, INT top,
INT right, INT bottom);
-extern BOOL X11DRV_RoundRect( struct tagDC *dc, INT left, INT top,
+extern BOOL X11DRV_RoundRect( X11DRV_PDEVICE *physDev, INT left, INT top,
INT right, INT bottom, INT ell_width,
INT ell_height );
-extern COLORREF X11DRV_SetPixel( struct tagDC *dc, INT x, INT y,
+extern COLORREF X11DRV_SetPixel( X11DRV_PDEVICE *physDev, INT x, INT y,
COLORREF color );
-extern COLORREF X11DRV_GetPixel( struct tagDC *dc, INT x, INT y);
-extern BOOL X11DRV_PaintRgn( struct tagDC *dc, HRGN hrgn );
-extern BOOL X11DRV_Polyline( struct tagDC *dc,const POINT* pt,INT count);
-extern BOOL X11DRV_Polygon( struct tagDC *dc, const POINT* pt, INT count );
-extern BOOL X11DRV_PolyPolygon( struct tagDC *dc, const POINT* pt,
+extern COLORREF X11DRV_GetPixel( X11DRV_PDEVICE *physDev, INT x, INT y);
+extern BOOL X11DRV_PaintRgn( X11DRV_PDEVICE *physDev, HRGN hrgn );
+extern BOOL X11DRV_Polyline( X11DRV_PDEVICE *physDev,const POINT* pt,INT count);
+extern BOOL X11DRV_Polygon( X11DRV_PDEVICE *physDev, const POINT* pt, INT count );
+extern BOOL X11DRV_PolyPolygon( X11DRV_PDEVICE *physDev, const POINT* pt,
const INT* counts, UINT polygons);
-extern BOOL X11DRV_PolyPolyline( struct tagDC *dc, const POINT* pt,
+extern BOOL X11DRV_PolyPolyline( X11DRV_PDEVICE *physDev, const POINT* pt,
const DWORD* counts, DWORD polylines);
-extern HGDIOBJ X11DRV_SelectObject( struct tagDC *dc, HGDIOBJ handle );
-
-extern COLORREF X11DRV_SetBkColor( struct tagDC *dc, COLORREF color );
-extern COLORREF X11DRV_SetTextColor( struct tagDC *dc, COLORREF color );
-extern BOOL X11DRV_ExtFloodFill( struct tagDC *dc, INT x, INT y,
+extern COLORREF X11DRV_SetBkColor( X11DRV_PDEVICE *physDev, COLORREF color );
+extern COLORREF X11DRV_SetTextColor( X11DRV_PDEVICE *physDev, COLORREF color );
+extern BOOL X11DRV_ExtFloodFill( X11DRV_PDEVICE *physDev, INT x, INT y,
COLORREF color, UINT fillType );
-extern BOOL X11DRV_ExtTextOut( struct tagDC *dc, INT x, INT y,
+extern BOOL X11DRV_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y,
UINT flags, const RECT *lprect,
LPCWSTR str, UINT count, const INT *lpDx );
extern BOOL X11DRV_CreateBitmap( HBITMAP hbitmap );
extern BOOL X11DRV_DeleteObject( HGDIOBJ handle );
extern LONG X11DRV_BitmapBits( HBITMAP hbitmap, void *bits, LONG count,
WORD flags );
-extern INT X11DRV_SetDIBitsToDevice( struct tagDC *dc, INT xDest,
+extern INT X11DRV_SetDIBitsToDevice( X11DRV_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 );
-extern INT X11DRV_DeviceBitmapBits( struct tagDC *dc, HBITMAP hbitmap,
+extern INT X11DRV_DeviceBitmapBits( X11DRV_PDEVICE *physDev, HBITMAP hbitmap,
WORD fGet, UINT startscan,
UINT lines, LPSTR bits,
LPBITMAPINFO info, UINT coloruse );
-extern BOOL X11DRV_GetDeviceGammaRamp( struct tagDC *dc, LPVOID ramp );
-extern BOOL X11DRV_SetDeviceGammaRamp( struct tagDC *dc, LPVOID ramp );
+extern BOOL X11DRV_GetDeviceGammaRamp( X11DRV_PDEVICE *physDev, LPVOID ramp );
+extern BOOL X11DRV_SetDeviceGammaRamp( X11DRV_PDEVICE *physDev, LPVOID ramp );
/* OpenGL / X11 driver functions */
extern int X11DRV_ChoosePixelFormat(DC *dc, const PIXELFORMATDESCRIPTOR *pppfd) ;
@@ -188,10 +186,6 @@
extern BOOL X11DRV_BITMAP_Init(void);
extern int X11DRV_FONT_Init( int *log_pixels_x, int *log_pixels_y );
-extern HBRUSH X11DRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush );
-extern HFONT X11DRV_FONT_SelectObject( DC * dc, HFONT hfont );
-extern HPEN X11DRV_PEN_SelectObject( DC * dc, HPEN hpen );
-extern HBITMAP X11DRV_BITMAP_SelectObject( DC * dc, HBITMAP hbitmap );
extern BOOL X11DRV_BITMAP_DeleteObject( HBITMAP hbitmap );
struct tagBITMAPOBJ;
@@ -207,10 +201,10 @@
extern void X11DRV_StartGraphicsExposures( HDC hdc );
extern void X11DRV_EndGraphicsExposures( HDC hdc, HRGN hrgn );
-extern BOOL X11DRV_SetupGCForPatBlt( struct tagDC *dc, GC gc, BOOL fMapColors );
-extern BOOL X11DRV_SetupGCForBrush( struct tagDC *dc );
-extern BOOL X11DRV_SetupGCForPen( struct tagDC *dc );
-extern BOOL X11DRV_SetupGCForText( struct tagDC *dc );
+extern BOOL X11DRV_SetupGCForPatBlt( X11DRV_PDEVICE *physDev, GC gc, BOOL fMapColors );
+extern BOOL X11DRV_SetupGCForBrush( X11DRV_PDEVICE *physDev );
+extern BOOL X11DRV_SetupGCForPen( X11DRV_PDEVICE *physDev );
+extern BOOL X11DRV_SetupGCForText( X11DRV_PDEVICE *physDev );
extern const int X11DRV_XROPfunction[];
@@ -219,12 +213,12 @@
extern BOOL X11DRV_XRender_Installed;
extern void X11DRV_XRender_Init(void);
extern void X11DRV_XRender_Finalize(void);
-extern BOOL X11DRV_XRender_SelectFont(struct tagDC*, HFONT);
-extern void X11DRV_XRender_DeleteDC(struct tagDC*);
-extern BOOL X11DRV_XRender_ExtTextOut(DC *dc, INT x, INT y, UINT flags,
+extern BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE*, HFONT);
+extern void X11DRV_XRender_DeleteDC(X11DRV_PDEVICE*);
+extern BOOL X11DRV_XRender_ExtTextOut(X11DRV_PDEVICE *physDev, INT x, INT y, UINT flags,
const RECT *lprect, LPCWSTR wstr,
UINT count, const INT *lpDx);
-extern void X11DRV_XRender_UpdateDrawable(DC *dc);
+extern void X11DRV_XRender_UpdateDrawable(X11DRV_PDEVICE *physDev);
/* exported dib functions for now */
@@ -258,37 +252,25 @@
} X11DRV_DIBSECTION;
-extern int *X11DRV_DIB_BuildColorMap( struct tagDC *dc, WORD coloruse,
+extern int *X11DRV_DIB_BuildColorMap( X11DRV_PDEVICE *physDev, WORD coloruse,
WORD depth, const BITMAPINFO *info,
int *nColors );
-extern INT X11DRV_CoerceDIBSection(struct tagDC *dc,INT,BOOL);
-extern INT X11DRV_LockDIBSection(struct tagDC *dc,INT,BOOL);
-extern void X11DRV_UnlockDIBSection(struct tagDC *dc,BOOL);
+extern INT X11DRV_CoerceDIBSection(X11DRV_PDEVICE *physDev,INT,BOOL);
+extern INT X11DRV_LockDIBSection(X11DRV_PDEVICE *physDev,INT,BOOL);
+extern void X11DRV_UnlockDIBSection(X11DRV_PDEVICE *physDev,BOOL);
extern INT X11DRV_CoerceDIBSection2(HBITMAP bmp,INT,BOOL);
extern INT X11DRV_LockDIBSection2(HBITMAP bmp,INT,BOOL);
extern void X11DRV_UnlockDIBSection2(HBITMAP bmp,BOOL);
-extern HBITMAP X11DRV_DIB_CreateDIBSection(struct tagDC *dc, BITMAPINFO *bmi, UINT usage,
+extern HBITMAP X11DRV_DIB_CreateDIBSection(X11DRV_PDEVICE *physDev, BITMAPINFO *bmi, UINT usage,
LPVOID *bits, HANDLE section, DWORD offset, DWORD ovr_pitch);
-
-extern struct tagBITMAP_DRIVER X11DRV_BITMAP_Driver;
-
-extern INT X11DRV_DIB_SetDIBits(struct tagBITMAPOBJ *bmp, struct tagDC *dc, UINT startscan,
- UINT lines, LPCVOID bits, const BITMAPINFO *info,
- UINT coloruse, HBITMAP hbitmap);
-extern INT X11DRV_DIB_GetDIBits(struct tagBITMAPOBJ *bmp, struct tagDC *dc, UINT startscan,
- UINT lines, LPVOID bits, BITMAPINFO *info,
- UINT coloruse, HBITMAP hbitmap);
extern void X11DRV_DIB_DeleteDIBSection(struct tagBITMAPOBJ *bmp);
-extern UINT X11DRV_DIB_SetDIBColorTable(struct tagBITMAPOBJ *,struct tagDC*,UINT,UINT,const RGBQUAD *);
-extern UINT X11DRV_DIB_GetDIBColorTable(struct tagBITMAPOBJ *,struct tagDC*,UINT,UINT,RGBQUAD *);
extern INT X11DRV_DIB_Coerce(struct tagBITMAPOBJ *,INT,BOOL);
extern INT X11DRV_DIB_Lock(struct tagBITMAPOBJ *,INT,BOOL);
extern void X11DRV_DIB_Unlock(struct tagBITMAPOBJ *,BOOL);
-void X11DRV_DIB_CopyDIBSection(DC *dcSrc, DC *dcDst,
- DWORD xSrc, DWORD ySrc,
- DWORD xDest, DWORD yDest,
- DWORD width, DWORD height);
+void X11DRV_DIB_CopyDIBSection(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst,
+ DWORD xSrc, DWORD ySrc, DWORD xDest, DWORD yDest,
+ DWORD width, DWORD height);
struct _DCICMD;
extern INT X11DRV_DCICommand(INT cbInput, const struct _DCICMD *lpCmd, LPVOID lpOutData);
@@ -321,7 +303,7 @@
extern void X11DRV_PALETTE_Cleanup(void);
extern COLORREF X11DRV_PALETTE_ToLogical(int pixel);
-extern int X11DRV_PALETTE_ToPhysical(struct tagDC *dc, COLORREF color);
+extern int X11DRV_PALETTE_ToPhysical(X11DRV_PDEVICE *physDev, COLORREF color);
extern struct tagPALETTE_DRIVER X11DRV_PALETTE_Driver;