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/graphics/x11drv/init.c b/graphics/x11drv/init.c
index dc7001f..abc07c0 100644
--- a/graphics/x11drv/init.c
+++ b/graphics/x11drv/init.c
@@ -36,17 +36,6 @@
 
 const DC_FUNCTIONS *X11DRV_DC_Funcs = NULL;  /* hack */
 
-BITMAP_DRIVER X11DRV_BITMAP_Driver =
-{
-  X11DRV_DIB_SetDIBits,
-  X11DRV_DIB_GetDIBits,
-  X11DRV_DIB_DeleteDIBSection,
-  X11DRV_DIB_SetDIBColorTable,
-  X11DRV_DIB_GetDIBColorTable,
-  X11DRV_DIB_Lock,
-  X11DRV_DIB_Unlock
-};
-
 PALETTE_DRIVER X11DRV_PALETTE_Driver =
 {
   X11DRV_PALETTE_SetMapping,
@@ -74,7 +63,6 @@
     Screen *screen = DefaultScreenOfDisplay(display);
 
     gdi_display = display;
-    BITMAP_Driver = &X11DRV_BITMAP_Driver;
     PALETTE_Driver = &X11DRV_PALETTE_Driver;
 
     palette_size = X11DRV_PALETTE_Init();
@@ -114,12 +102,14 @@
 
     if (!X11DRV_DC_Funcs) X11DRV_DC_Funcs = dc->funcs;  /* hack */
 
-    dc->physDev = physDev = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
-				       sizeof(*physDev) );
+    physDev = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*physDev) );
     if(!physDev) {
         ERR("Can't allocate physDev\n");
 	return FALSE;
     }
+    dc->physDev = (PHYSDEV)physDev;
+    physDev->hdc = dc->hSelf;
+    physDev->dc  = dc;  /* FIXME */
 
     if (dc->flags & DC_MEMORY)
     {
@@ -172,12 +162,12 @@
 /**********************************************************************
  *	     X11DRV_DeleteDC
  */
-BOOL X11DRV_DeleteDC( DC *dc )
+BOOL X11DRV_DeleteDC( X11DRV_PDEVICE *physDev )
 {
-    X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+    DC *dc = physDev->dc;
 
     if(physDev->xrender)
-      X11DRV_XRender_DeleteDC(dc);
+      X11DRV_XRender_DeleteDC( physDev );
     wine_tsx11_lock();
     XFreeGC( gdi_display, physDev->gc );
     while (physDev->used_visuals-- > 0)
@@ -192,7 +182,7 @@
 /***********************************************************************
  *           GetDeviceCaps    (X11DRV.@)
  */
-INT X11DRV_GetDeviceCaps( DC *dc, INT cap )
+INT X11DRV_GetDeviceCaps( X11DRV_PDEVICE *physDev, INT cap )
 {
     switch(cap)
     {
@@ -254,7 +244,7 @@
     case LOGPIXELSY:
         return log_pixels_y;
     case CAPS1:
-        FIXME("(%04x): CAPS1 is unimplemented, will return 0\n", dc->hSelf );
+        FIXME("(%04x): CAPS1 is unimplemented, will return 0\n", physDev->hdc );
         /* please see wingdi.h for the possible bit-flag values that need
            to be returned. also, see 
            http://msdn.microsoft.com/library/ddkdoc/win95ddk/graphcnt_1m0p.htm */
@@ -275,7 +265,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;
     }
 }
@@ -284,11 +274,9 @@
 /**********************************************************************
  *           ExtEscape  (X11DRV.@)
  */
-INT X11DRV_ExtEscape( DC *dc, INT escape, INT in_count, LPCVOID in_data,
+INT X11DRV_ExtEscape( X11DRV_PDEVICE *physDev, INT escape, INT in_count, LPCVOID in_data,
                       INT out_count, LPVOID out_data )
 {
-    X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
-
     switch(escape)
     {
     case QUERYESCSUPPORT: