Remove X_DC_INFO from DC and make it behave like any other PDEVICE.
diff --git a/graphics/ddraw.c b/graphics/ddraw.c
index 6e3056f..bd5ecf2 100644
--- a/graphics/ddraw.c
+++ b/graphics/ddraw.c
@@ -19,6 +19,7 @@
#include "ts_xlib.h"
#include <sys/signal.h>
#include <fcntl.h>
+#include <string.h>
#include "windows.h"
#include "winerror.h"
@@ -35,6 +36,7 @@
#include "compobj.h"
#include "spy.h"
#include "message.h"
+#include "x11drv.h"
#ifdef HAVE_LIBXXF86DGA
#include "ts_xf86dga.h"
diff --git a/graphics/painting.c b/graphics/painting.c
index abb8f8c..69dc22c 100644
--- a/graphics/painting.c
+++ b/graphics/painting.c
@@ -25,6 +25,7 @@
#include "path.h"
#include "debug.h"
#include "winerror.h"
+#include "x11drv.h"
/***********************************************************************
* LineTo16 (GDI.19)
@@ -623,9 +624,11 @@
HPEN32 hOldPen, hnewPen;
INT32 oldDrawMode, oldBkMode;
INT32 left, top, right, bottom;
+ X11DRV_PDEVICE *physDev;
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
if (!dc) return;
+ physDev = (X11DRV_PDEVICE *)dc->physDev;
left = XLPTODP( dc, rc->left );
top = YLPTODP( dc, rc->top );
@@ -641,10 +644,10 @@
oldBkMode = SetBkMode32(hdc, TRANSPARENT);
/* Hack: make sure the XORPEN operation has an effect */
- dc->u.x.pen.pixel = (1 << screenDepth) - 1;
+ physDev->pen.pixel = (1 << screenDepth) - 1;
if (X11DRV_SetupGCForPen( dc ))
- TSXDrawRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawRectangle( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1 );
diff --git a/graphics/wing.c b/graphics/wing.c
index 3654cad..52c9288 100644
--- a/graphics/wing.c
+++ b/graphics/wing.c
@@ -17,6 +17,7 @@
#include "dc.h"
#include "gdi.h"
#include "xmalloc.h"
+#include "x11drv.h"
#include "debug.h"
typedef enum WING_DITHER_TYPE
@@ -262,9 +263,12 @@
/* destDC is a display DC, srcDC is a memory DC */
DC *dcDst, *dcSrc;
+ X11DRV_PDEVICE *physDevDst, *physDevSrc;
if (!(dcDst = (DC *)GDI_GetObjPtr( destDC, DC_MAGIC ))) return FALSE;
if (!(dcSrc = (DC *) GDI_GetObjPtr( srcDC, DC_MAGIC ))) return FALSE;
+ physDevDst = (X11DRV_PDEVICE *)dcDst->physDev;
+ physDevSrc = (X11DRV_PDEVICE *)dcSrc->physDev;
if (dcDst->w.flags & DC_DIRTY) CLIPPING_UpdateGCRegion( dcDst );
@@ -275,10 +279,10 @@
widDest = widDest * dcDst->vportExtX / dcDst->wndExtX;
heiDest = heiDest * dcDst->vportExtY / dcDst->wndExtY;
- TSXSetFunction( display, dcDst->u.x.gc, GXcopy );
- TSXCopyArea( display, dcSrc->u.x.drawable,
- dcDst->u.x.drawable, dcDst->u.x.gc,
- xSrc, ySrc, widDest, heiDest, xDest, yDest );
+ TSXSetFunction( display, physDevDst->gc, GXcopy );
+ TSXCopyArea( display, physDevSrc->drawable,
+ physDevDst->drawable, physDevDst->gc,
+ xSrc, ySrc, widDest, heiDest, xDest, yDest );
return TRUE;
}
diff --git a/graphics/x11drv/bitblt.c b/graphics/x11drv/bitblt.c
index 80e5243..7d43a65 100644
--- a/graphics/x11drv/bitblt.c
+++ b/graphics/x11drv/bitblt.c
@@ -816,6 +816,8 @@
RECT32 *visRectSrc, RECT32 *visRectDst )
{
XImage *imageSrc, *imageDst;
+ X11DRV_PDEVICE *physDevSrc = (X11DRV_PDEVICE *)dcSrc->physDev;
+ X11DRV_PDEVICE *physDevDst = (X11DRV_PDEVICE *)dcDst->physDev;
RECT32 rectSrc = *visRectSrc;
RECT32 rectDst = *visRectDst;
@@ -828,7 +830,7 @@
OffsetRect32( &rectDst, -xDst, -yDst );
/* FIXME: avoid BadMatch errors */
- imageSrc = XGetImage( display, dcSrc->u.x.drawable,
+ imageSrc = XGetImage( display, physDevSrc->drawable,
visRectSrc->left, visRectSrc->top,
visRectSrc->right - visRectSrc->left,
visRectSrc->bottom - visRectSrc->top,
@@ -837,9 +839,9 @@
rectDst.bottom - rectDst.top, dcDst->w.bitsPerPixel );
BITBLT_StretchImage( imageSrc, imageDst, widthSrc, heightSrc,
widthDst, heightDst, &rectSrc, &rectDst,
- dcDst->u.x.textPixel, dcDst->w.bitsPerPixel != 1 ?
- dcDst->u.x.backgroundPixel :
- dcSrc->u.x.backgroundPixel,
+ physDevDst->textPixel, dcDst->w.bitsPerPixel != 1 ?
+ physDevDst->backgroundPixel :
+ physDevSrc->backgroundPixel,
dcDst->w.stretchBltMode );
XPutImage( display, pixmap, gc, imageDst, 0, 0, 0, 0,
rectDst.right - rectDst.left, rectDst.bottom - rectDst.top );
@@ -861,25 +863,27 @@
register INT32 x, y;
INT32 width = visRectSrc->right - visRectSrc->left;
INT32 height = visRectSrc->bottom - visRectSrc->top;
+ X11DRV_PDEVICE *physDevSrc = (X11DRV_PDEVICE *)dcSrc->physDev;
+ X11DRV_PDEVICE *physDevDst = (X11DRV_PDEVICE *)dcDst->physDev;
if (dcSrc->w.bitsPerPixel == dcDst->w.bitsPerPixel)
{
if (!COLOR_PixelToPalette ||
(dcDst->w.bitsPerPixel == 1)) /* monochrome -> monochrome */
{
- XCopyArea( display, dcSrc->u.x.drawable, pixmap, gc,
+ XCopyArea( display, physDevSrc->drawable, pixmap, gc,
visRectSrc->left, visRectSrc->top, width, height, 0, 0);
}
else /* color -> color */
{
if (dcSrc->w.flags & DC_MEMORY)
- imageSrc = XGetImage( display, dcSrc->u.x.drawable,
+ imageSrc = XGetImage( display, physDevSrc->drawable,
visRectSrc->left, visRectSrc->top,
width, height, AllPlanes, ZPixmap );
else
{
/* Make sure we don't get a BadMatch error */
- XCopyArea( display, dcSrc->u.x.drawable, pixmap, gc,
+ XCopyArea( display, physDevSrc->drawable, pixmap, gc,
visRectSrc->left, visRectSrc->top,
width, height, 0, 0);
imageSrc = XGetImage( display, pixmap, 0, 0, width, height,
@@ -901,30 +905,30 @@
if (COLOR_PixelToPalette)
{
XSetBackground( display, gc,
- COLOR_PixelToPalette[dcDst->u.x.textPixel] );
+ COLOR_PixelToPalette[physDevDst->textPixel] );
XSetForeground( display, gc,
- COLOR_PixelToPalette[dcDst->u.x.backgroundPixel]);
+ COLOR_PixelToPalette[physDevDst->backgroundPixel]);
}
else
{
- XSetBackground( display, gc, dcDst->u.x.textPixel );
- XSetForeground( display, gc, dcDst->u.x.backgroundPixel );
+ XSetBackground( display, gc, physDevDst->textPixel );
+ XSetForeground( display, gc, physDevDst->backgroundPixel );
}
- XCopyPlane( display, dcSrc->u.x.drawable, pixmap, gc,
+ XCopyPlane( display, physDevSrc->drawable, pixmap, gc,
visRectSrc->left, visRectSrc->top,
width, height, 0, 0, 1 );
}
else /* color -> monochrome */
{
/* FIXME: avoid BadMatch error */
- imageSrc = XGetImage( display, dcSrc->u.x.drawable,
+ imageSrc = XGetImage( display, physDevSrc->drawable,
visRectSrc->left, visRectSrc->top,
width, height, AllPlanes, ZPixmap );
XCREATEIMAGE( imageDst, width, height, dcDst->w.bitsPerPixel );
for (y = 0; y < height; y++)
for (x = 0; x < width; x++)
XPutPixel(imageDst, x, y, (XGetPixel(imageSrc,x,y) ==
- dcSrc->u.x.backgroundPixel) );
+ physDevSrc->backgroundPixel) );
XPutImage( display, pixmap, gc, imageDst,
0, 0, 0, 0, width, height );
XDestroyImage( imageSrc );
@@ -944,11 +948,12 @@
{
INT32 width = visRectDst->right - visRectDst->left;
INT32 height = visRectDst->bottom - visRectDst->top;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
if (!COLOR_PixelToPalette || (dc->w.bitsPerPixel == 1) ||
(COLOR_GetSystemPaletteFlags() & COLOR_VIRTUAL) )
{
- XCopyArea( display, dc->u.x.drawable, pixmap, gc,
+ XCopyArea( display, physDev->drawable, pixmap, gc,
visRectDst->left, visRectDst->top, width, height, 0, 0 );
}
else
@@ -957,13 +962,13 @@
XImage *image;
if (dc->w.flags & DC_MEMORY)
- image = XGetImage( display, dc->u.x.drawable,
+ image = XGetImage( display, physDev->drawable,
visRectDst->left, visRectDst->top,
width, height, AllPlanes, ZPixmap );
else
{
/* Make sure we don't get a BadMatch error */
- XCopyArea( display, dc->u.x.drawable, pixmap, gc,
+ XCopyArea( display, physDev->drawable, pixmap, gc,
visRectDst->left, visRectDst->top, width, height, 0, 0);
image = XGetImage( display, pixmap, 0, 0, width, height,
AllPlanes, ZPixmap );
@@ -988,13 +993,14 @@
{
INT32 width = visRectDst->right - visRectDst->left;
INT32 height = visRectDst->bottom - visRectDst->top;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
/* !COLOR_PaletteToPixel is _NOT_ enough */
if (!COLOR_PaletteToPixel || (dc->w.bitsPerPixel == 1) ||
(COLOR_GetSystemPaletteFlags() & COLOR_VIRTUAL) )
{
- XCopyArea( display, pixmap, dc->u.x.drawable, gc, 0, 0,
+ XCopyArea( display, pixmap, physDev->drawable, gc, 0, 0,
width, height, visRectDst->left, visRectDst->top );
}
else
@@ -1008,7 +1014,7 @@
XPutPixel( image, x, y,
COLOR_PaletteToPixel[XGetPixel( image, x, y )]);
}
- XPutImage( display, dc->u.x.drawable, gc, image, 0, 0,
+ XPutImage( display, physDev->drawable, gc, image, 0, 0,
visRectDst->left, visRectDst->top, width, height );
XDestroyImage( image );
}
@@ -1101,7 +1107,10 @@
const BYTE *opcode;
Pixmap pixmaps[3] = { 0, 0, 0 }; /* pixmaps for DST, SRC, TMP */
GC tmpGC = 0;
+ X11DRV_PDEVICE *physDevSrc = NULL;
+ X11DRV_PDEVICE *physDevDst = (X11DRV_PDEVICE *)dcDst->physDev;
+ if(dcSrc) physDevSrc = (X11DRV_PDEVICE *)dcSrc->physDev;
usePat = (((rop >> 4) & 0x0f0000) != (rop & 0x0f0000));
useSrc = (((rop >> 2) & 0x330000) != (rop & 0x330000));
useDst = (((rop >> 1) & 0x550000) != (rop & 0x550000));
@@ -1169,14 +1178,14 @@
{
case BLACKNESS: /* 0x00 */
if ((dcDst->w.bitsPerPixel == 1) || !COLOR_PaletteToPixel)
- XSetFunction( display, dcDst->u.x.gc, GXclear );
+ XSetFunction( display, physDevDst->gc, GXclear );
else
{
- XSetFunction( display, dcDst->u.x.gc, GXcopy );
- XSetForeground( display, dcDst->u.x.gc, COLOR_PaletteToPixel[0] );
- XSetFillStyle( display, dcDst->u.x.gc, FillSolid );
+ XSetFunction( display, physDevDst->gc, GXcopy );
+ XSetForeground( display, physDevDst->gc, COLOR_PaletteToPixel[0] );
+ XSetFillStyle( display, physDevDst->gc, FillSolid );
}
- XFillRectangle( display, dcDst->u.x.drawable, dcDst->u.x.gc,
+ XFillRectangle( display, physDevDst->drawable, physDevDst->gc,
visRectDst.left, visRectDst.top, width, height );
return TRUE;
@@ -1184,10 +1193,10 @@
if ((dcDst->w.bitsPerPixel == 1) || !COLOR_PaletteToPixel ||
!Options.perfectGraphics)
{
- XSetFunction( display, dcDst->u.x.gc, GXinvert );
+ XSetFunction( display, physDevDst->gc, GXinvert );
if( COLOR_GetSystemPaletteFlags() & (COLOR_PRIVATE | COLOR_VIRTUAL) )
- XSetFunction( display, dcDst->u.x.gc, GXinvert);
+ XSetFunction( display, physDevDst->gc, GXinvert);
else
{
/* Xor is much better when we do not have full colormap. */
@@ -1195,11 +1204,11 @@
/* and white. */
Pixel xor_pix = (WhitePixelOfScreen(screen) ^
BlackPixelOfScreen(screen));
- XSetFunction( display, dcDst->u.x.gc, GXxor );
- XSetForeground( display, dcDst->u.x.gc, xor_pix);
- XSetFillStyle( display, dcDst->u.x.gc, FillSolid );
+ XSetFunction( display, physDevDst->gc, GXxor );
+ XSetForeground( display, physDevDst->gc, xor_pix);
+ XSetFillStyle( display, physDevDst->gc, FillSolid );
}
- XFillRectangle( display, dcDst->u.x.drawable, dcDst->u.x.gc,
+ XFillRectangle( display, physDevDst->drawable, physDevDst->gc,
visRectDst.left, visRectDst.top, width, height );
return TRUE;
}
@@ -1209,8 +1218,8 @@
if (Options.perfectGraphics) break;
if (X11DRV_SetupGCForBrush( dcDst ))
{
- XSetFunction( display, dcDst->u.x.gc, GXxor );
- XFillRectangle( display, dcDst->u.x.drawable, dcDst->u.x.gc,
+ XSetFunction( display, physDevDst->gc, GXxor );
+ XFillRectangle( display, physDevDst->drawable, physDevDst->gc,
visRectDst.left, visRectDst.top, width, height );
}
return TRUE;
@@ -1219,8 +1228,8 @@
if (Options.perfectGraphics) break;
if (X11DRV_SetupGCForBrush( dcDst ))
{
- XSetFunction( display, dcDst->u.x.gc, GXequiv );
- XFillRectangle( display, dcDst->u.x.drawable, dcDst->u.x.gc,
+ XSetFunction( display, physDevDst->gc, GXequiv );
+ XFillRectangle( display, physDevDst->drawable, physDevDst->gc,
visRectDst.left, visRectDst.top, width, height );
}
return TRUE;
@@ -1228,53 +1237,54 @@
case SRCCOPY: /* 0xcc */
if (dcSrc->w.bitsPerPixel == dcDst->w.bitsPerPixel)
{
- XSetGraphicsExposures( display, dcDst->u.x.gc, True );
- XSetFunction( display, dcDst->u.x.gc, GXcopy );
- XCopyArea( display, dcSrc->u.x.drawable,
- dcDst->u.x.drawable, dcDst->u.x.gc,
+ XSetGraphicsExposures( display, physDevDst->gc, True );
+ XSetFunction( display, physDevDst->gc, GXcopy );
+ XCopyArea( display, physDevSrc->drawable,
+ physDevDst->drawable, physDevDst->gc,
visRectSrc.left, visRectSrc.top,
width, height, visRectDst.left, visRectDst.top );
- XSetGraphicsExposures( display, dcDst->u.x.gc, False );
+ XSetGraphicsExposures( display, physDevDst->gc, False );
return TRUE;
}
if (dcSrc->w.bitsPerPixel == 1)
{
- XSetBackground( display, dcDst->u.x.gc, dcDst->u.x.textPixel );
- XSetForeground( display, dcDst->u.x.gc, dcDst->u.x.backgroundPixel );
- XSetFunction( display, dcDst->u.x.gc, GXcopy );
- XSetGraphicsExposures( display, dcDst->u.x.gc, True );
- XCopyPlane( display, dcSrc->u.x.drawable,
- dcDst->u.x.drawable, dcDst->u.x.gc,
+ XSetBackground( display, physDevDst->gc, physDevDst->textPixel );
+ XSetForeground( display, physDevDst->gc,
+ physDevDst->backgroundPixel );
+ XSetFunction( display, physDevDst->gc, GXcopy );
+ XSetGraphicsExposures( display, physDevDst->gc, True );
+ XCopyPlane( display, physDevSrc->drawable,
+ physDevDst->drawable, physDevDst->gc,
visRectSrc.left, visRectSrc.top,
width, height, visRectDst.left, visRectDst.top, 1 );
- XSetGraphicsExposures( display, dcDst->u.x.gc, False );
+ XSetGraphicsExposures( display, physDevDst->gc, False );
return TRUE;
}
break;
case PATCOPY: /* 0xf0 */
if (!X11DRV_SetupGCForBrush( dcDst )) return TRUE;
- XSetFunction( display, dcDst->u.x.gc, GXcopy );
- XFillRectangle( display, dcDst->u.x.drawable, dcDst->u.x.gc,
+ XSetFunction( display, physDevDst->gc, GXcopy );
+ XFillRectangle( display, physDevDst->drawable, physDevDst->gc,
visRectDst.left, visRectDst.top, width, height );
return TRUE;
case WHITENESS: /* 0xff */
if ((dcDst->w.bitsPerPixel == 1) || !COLOR_PaletteToPixel)
- XSetFunction( display, dcDst->u.x.gc, GXset );
+ XSetFunction( display, physDevDst->gc, GXset );
else
{
- XSetFunction( display, dcDst->u.x.gc, GXcopy );
- XSetForeground( display, dcDst->u.x.gc,
+ XSetFunction( display, physDevDst->gc, GXcopy );
+ XSetForeground( display, physDevDst->gc,
COLOR_PaletteToPixel[COLOR_GetSystemPaletteSize() - 1]);
- XSetFillStyle( display, dcDst->u.x.gc, FillSolid );
+ XSetFillStyle( display, physDevDst->gc, FillSolid );
}
- XFillRectangle( display, dcDst->u.x.drawable, dcDst->u.x.gc,
+ XFillRectangle( display, physDevDst->drawable, physDevDst->gc,
visRectDst.left, visRectDst.top, width, height );
return TRUE;
}
- tmpGC = XCreateGC( display, dcDst->u.x.drawable, 0, NULL );
+ tmpGC = XCreateGC( display, physDevDst->drawable, 0, NULL );
pixmaps[DST] = XCreatePixmap( display, rootWindow, width, height,
dcDst->w.bitsPerPixel );
if (useSrc)
@@ -1331,9 +1341,9 @@
break;
}
}
- XSetFunction( display, dcDst->u.x.gc, GXcopy );
+ XSetFunction( display, physDevDst->gc, GXcopy );
BITBLT_PutDstArea( dcDst, pixmaps[destUsed ? DST : SRC],
- dcDst->u.x.gc, &visRectDst );
+ physDevDst->gc, &visRectDst );
XFreePixmap( display, pixmaps[DST] );
if (pixmaps[SRC]) XFreePixmap( display, pixmaps[SRC] );
if (pixmaps[TMP]) XFreePixmap( display, pixmaps[TMP] );
diff --git a/graphics/x11drv/bitmap.c b/graphics/x11drv/bitmap.c
index 8ea1f26..a9f7338 100644
--- a/graphics/x11drv/bitmap.c
+++ b/graphics/x11drv/bitmap.c
@@ -58,6 +58,8 @@
HRGN32 hrgn;
HBITMAP32 prevHandle = dc->w.hBitmap;
X11DRV_PHYSBITMAP *pbitmap;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
if (!(dc->w.flags & DC_MEMORY)) return 0;
@@ -66,7 +68,7 @@
return 0;
if(bmp->DDBitmap->funcs != dc->funcs) {
- WARN(bitmap, "Trying to select non-X11 DDB into an X11 dc\n");
+ WARN(x11drv, "Trying to select non-X11 DDB into an X11 dc\n");
return 0;
}
@@ -87,15 +89,15 @@
dc->w.hVisRgn = hrgn;
}
- dc->u.x.drawable = pbitmap->pixmap;
- dc->w.hBitmap = hbitmap;
+ physDev->drawable = pbitmap->pixmap;
+ dc->w.hBitmap = hbitmap;
/* Change GC depth if needed */
if (dc->w.bitsPerPixel != bmp->bitmap.bmBitsPixel)
{
- TSXFreeGC( display, dc->u.x.gc );
- dc->u.x.gc = TSXCreateGC( display, dc->u.x.drawable, 0, NULL );
+ TSXFreeGC( display, physDev->gc );
+ physDev->gc = TSXCreateGC( display, physDev->drawable, 0, NULL );
dc->w.bitsPerPixel = bmp->bitmap.bmBitsPixel;
DC_InitDC( dc );
}
@@ -139,19 +141,18 @@
X11DRV_PHYSBITMAP *pbitmap;
if(!(bmp->DDBitmap = HeapAlloc(GetProcessHeap(), 0, sizeof(DDBITMAP)))) {
- WARN(bitmap, "Can't alloc DDBITMAP\n");
+ WARN(x11drv, "Can't alloc DDBITMAP\n");
return NULL;
}
if(!(pbitmap = HeapAlloc(GetProcessHeap(), 0,sizeof(X11DRV_PHYSBITMAP)))) {
- WARN(bitmap, "Can't alloc X11DRV_PHYSBITMAP\n");
+ WARN(x11drv, "Can't alloc X11DRV_PHYSBITMAP\n");
HeapFree(GetProcessHeap(), 0, bmp->DDBitmap);
return NULL;
}
bmp->DDBitmap->physBitmap = pbitmap;
bmp->DDBitmap->funcs = DRIVER_FindDriver( "DISPLAY" );
-
return pbitmap;
}
@@ -172,7 +173,7 @@
BITMAPOBJ *bmp = (BITMAPOBJ *) GDI_GetObjPtr( hbitmap, BITMAP_MAGIC );
if(!bmp) {
- WARN(bitmap, "Bad bitmap handle %08x\n", hbitmap);
+ WARN(x11drv, "Bad bitmap handle %08x\n", hbitmap);
return FALSE;
}
@@ -180,6 +181,8 @@
if (bmp->bitmap.bmPlanes != 1) return 0;
if ((bmp->bitmap.bmBitsPixel != 1) &&
(bmp->bitmap.bmBitsPixel != screenDepth)) {
+ ERR(x11drv, "Trying to make bitmap with planes=%d, bpp=%d\n",
+ bmp->bitmap.bmPlanes, bmp->bitmap.bmBitsPixel);
GDI_HEAP_UNLOCK( hbitmap );
return FALSE;
}
@@ -194,7 +197,7 @@
pbitmap->pixmap = TSXCreatePixmap(display, rootWindow, bmp->bitmap.bmWidth,
bmp->bitmap.bmHeight, bmp->bitmap.bmBitsPixel);
if (!pbitmap->pixmap) {
- WARN(bitmap, "Can't create Pixmap\n");
+ WARN(x11drv, "Can't create Pixmap\n");
HeapFree(GetProcessHeap(), 0, bmp->DDBitmap->physBitmap);
HeapFree(GetProcessHeap(), 0, bmp->DDBitmap);
GDI_HEAP_UNLOCK( hbitmap );
@@ -239,7 +242,7 @@
LPBYTE tbuf;
int h, w, pad;
- TRACE(x11drv, "(bmp=%p, buffer=%p, count=%lx)\n", bmp, buffer, count);
+ TRACE(x11drv, "(bmp=%p, buffer=%p, count=0x%lx)\n", bmp, buffer, count);
pad = BITMAP_GetPadding(bmp->bitmap.bmWidth, bmp->bitmap.bmBitsPixel);
@@ -340,7 +343,7 @@
}
break;
default:
- FIXME(bitmap, "Unhandled bits:%d\n", bmp->bitmap.bmBitsPixel);
+ FIXME(x11drv, "Unhandled bits:%d\n", bmp->bitmap.bmBitsPixel);
}
XDestroyImage( image );
LeaveCriticalSection( &X11DRV_CritSection );
@@ -365,7 +368,7 @@
LPBYTE sbuf;
int w, h, pad;
- TRACE(x11drv, "(bmp=%p, bits=%p, count=%lx)\n", bmp, bits, count);
+ TRACE(x11drv, "(bmp=%p, bits=%p, count=0x%lx)\n", bmp, bits, count);
pad = BITMAP_GetPadding(bmp->bitmap.bmWidth, bmp->bitmap.bmBitsPixel);
@@ -451,7 +454,7 @@
}
break;
default:
- FIXME(bitmap, "Unhandled bits:%d\n", bmp->bitmap.bmBitsPixel);
+ FIXME(x11drv, "Unhandled bits:%d\n", bmp->bitmap.bmBitsPixel);
}
@@ -475,7 +478,7 @@
BITMAPOBJ *bmp = (BITMAPOBJ *) GDI_GetObjPtr( hbitmap, BITMAP_MAGIC );
LONG ret;
if(!bmp) {
- WARN(bitmap, "Bad bitmap handle %08x\n", hbitmap);
+ WARN(x11drv, "Bad bitmap handle %08x\n", hbitmap);
return FALSE;
}
@@ -484,7 +487,7 @@
else if(flags == DDB_SET)
ret = X11DRV_SetBitmapBits(bmp, bits, count);
else {
- ERR(bitmap, "Unknown flags value %d\n", flags);
+ ERR(x11drv, "Unknown flags value %d\n", flags);
ret = 0;
}
diff --git a/graphics/x11drv/brush.c b/graphics/x11drv/brush.c
index 1d25c91..379857e 100644
--- a/graphics/x11drv/brush.c
+++ b/graphics/x11drv/brush.c
@@ -1,5 +1,5 @@
/*
- * GDI brush objects
+ * X11DRV brush objects
*
* Copyright 1993, 1994 Alexandre Julliard
*/
@@ -142,18 +142,20 @@
*/
static void BRUSH_SelectSolidBrush( DC *dc, COLORREF color )
{
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
if ((dc->w.bitsPerPixel > 1) && (screenDepth <= 8) && !COLOR_IsSolid( color ))
{
/* Dithered brush */
- dc->u.x.brush.pixmap = BRUSH_DitherColor( dc, color );
- dc->u.x.brush.fillStyle = FillTiled;
- dc->u.x.brush.pixel = 0;
+ physDev->brush.pixmap = BRUSH_DitherColor( dc, color );
+ physDev->brush.fillStyle = FillTiled;
+ physDev->brush.pixel = 0;
}
else
{
/* Solid brush */
- dc->u.x.brush.pixel = COLOR_ToPhysical( dc, color );
- dc->u.x.brush.fillStyle = FillSolid;
+ physDev->brush.pixel = COLOR_ToPhysical( dc, color );
+ physDev->brush.fillStyle = FillSolid;
}
}
@@ -164,6 +166,7 @@
static BOOL32 BRUSH_SelectPatternBrush( DC * dc, HBITMAP32 hbitmap )
{
X11DRV_PHYSBITMAP *pbitmap;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
BITMAPOBJ * bmp = (BITMAPOBJ *) GDI_GetObjPtr( hbitmap, BITMAP_MAGIC );
if (!bmp) return FALSE;
@@ -181,28 +184,28 @@
if ((dc->w.bitsPerPixel == 1) && (bmp->bitmap.bmBitsPixel != 1))
{
/* Special case: a color pattern on a monochrome DC */
- dc->u.x.brush.pixmap = TSXCreatePixmap( display, rootWindow, 8, 8, 1 );
+ physDev->brush.pixmap = TSXCreatePixmap( display, rootWindow, 8, 8, 1);
/* FIXME: should probably convert to monochrome instead */
- TSXCopyPlane( display, pbitmap->pixmap, dc->u.x.brush.pixmap,
+ TSXCopyPlane( display, pbitmap->pixmap, physDev->brush.pixmap,
BITMAP_monoGC, 0, 0, 8, 8, 0, 0, 1 );
}
else
{
- dc->u.x.brush.pixmap = TSXCreatePixmap( display, rootWindow,
- 8, 8, bmp->bitmap.bmBitsPixel );
- TSXCopyArea( display, pbitmap->pixmap, dc->u.x.brush.pixmap,
+ physDev->brush.pixmap = TSXCreatePixmap( display, rootWindow,
+ 8, 8, bmp->bitmap.bmBitsPixel );
+ TSXCopyArea( display, pbitmap->pixmap, physDev->brush.pixmap,
BITMAP_GC(bmp), 0, 0, 8, 8, 0, 0 );
}
if (bmp->bitmap.bmBitsPixel > 1)
{
- dc->u.x.brush.fillStyle = FillTiled;
- dc->u.x.brush.pixel = 0; /* Ignored */
+ physDev->brush.fillStyle = FillTiled;
+ physDev->brush.pixel = 0; /* Ignored */
}
else
{
- dc->u.x.brush.fillStyle = FillOpaqueStippled;
- dc->u.x.brush.pixel = -1; /* Special case (see DC_SetupGCForBrush) */
+ physDev->brush.fillStyle = FillOpaqueStippled;
+ physDev->brush.pixel = -1; /* Special case (see DC_SetupGCForBrush) */
}
GDI_HEAP_UNLOCK( hbitmap );
return TRUE;
@@ -219,38 +222,19 @@
HBITMAP16 hBitmap;
BITMAPINFO * bmpInfo;
HBRUSH16 prevHandle = dc->w.hBrush;
-
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
TRACE(gdi, "hdc=%04x hbrush=%04x\n",
dc->hSelf,hbrush);
-#ifdef NOTDEF
- if (dc->header.wMagic == METAFILE_DC_MAGIC)
- {
- LOGBRUSH16 logbrush = { brush->logbrush.lbStyle,
- brush->logbrush.lbColor,
- brush->logbrush.lbHatch };
- switch (brush->logbrush.lbStyle)
- {
- case BS_SOLID:
- case BS_HATCHED:
- case BS_HOLLOW:
- if (!MF_CreateBrushIndirect( dc, hbrush, &logbrush )) return 0;
- break;
- case BS_PATTERN:
- case BS_DIBPATTERN:
- if (!MF_CreatePatternBrush( dc, hbrush, &logbrush )) return 0;
- break;
- }
- return 1; /* FIXME? */
- }
-#endif
+
dc->w.hBrush = hbrush;
- if (dc->u.x.brush.pixmap)
+ if (physDev->brush.pixmap)
{
- TSXFreePixmap( display, dc->u.x.brush.pixmap );
- dc->u.x.brush.pixmap = 0;
+ TSXFreePixmap( display, physDev->brush.pixmap );
+ physDev->brush.pixmap = 0;
}
- dc->u.x.brush.style = brush->logbrush.lbStyle;
+ physDev->brush.style = brush->logbrush.lbStyle;
switch(brush->logbrush.lbStyle)
{
@@ -265,10 +249,10 @@
case BS_HATCHED:
TRACE(gdi, "BS_HATCHED\n" );
- dc->u.x.brush.pixel = COLOR_ToPhysical( dc, brush->logbrush.lbColor );
- dc->u.x.brush.pixmap = TSXCreateBitmapFromData( display, rootWindow,
+ physDev->brush.pixel = COLOR_ToPhysical( dc, brush->logbrush.lbColor );
+ physDev->brush.pixmap = TSXCreateBitmapFromData( display, rootWindow,
HatchBrushes[brush->logbrush.lbHatch], 8, 8 );
- dc->u.x.brush.fillStyle = FillStippled;
+ physDev->brush.fillStyle = FillStippled;
break;
case BS_PATTERN:
diff --git a/graphics/x11drv/clipping.c b/graphics/x11drv/clipping.c
index 60f9319..8af6eaf 100644
--- a/graphics/x11drv/clipping.c
+++ b/graphics/x11drv/clipping.c
@@ -21,12 +21,13 @@
void X11DRV_SetDeviceClipping( DC * dc )
{
XRectangle *pXrect;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
RGNOBJ *obj = (RGNOBJ *) GDI_GetObjPtr(dc->w.hGCClipRgn, REGION_MAGIC);
if (!obj)
{
ERR(x11drv, "Rgn is 0. Please report this.\n");
return;
- /*exit(1);*/
}
if (obj->rgn->numRects > 0)
@@ -54,7 +55,7 @@
else
pXrect = NULL;
- TSXSetClipRectangles( display, dc->u.x.gc, 0, 0,
+ TSXSetClipRectangles( display, physDev->gc, 0, 0,
pXrect, obj->rgn->numRects, YXBanded );
if(pXrect)
diff --git a/graphics/x11drv/dib.c b/graphics/x11drv/dib.c
index 848bc9c..fdaeb5f 100644
--- a/graphics/x11drv/dib.c
+++ b/graphics/x11drv/dib.c
@@ -1098,6 +1098,7 @@
DWORD width, oldcy = cy;
INT32 result;
int height, tmpheight;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
if (DIB_GetBitmapInfo( &info->bmiHeader, &width, &height,
@@ -1115,7 +1116,7 @@
if (!cx || !cy) return 0;
X11DRV_SetupGCForText( dc ); /* To have the correct colors */
- TSXSetFunction(display, dc->u.x.gc, X11DRV_XROPfunction[dc->w.ROPmode-1]);
+ TSXSetFunction(display, physDev->gc, X11DRV_XROPfunction[dc->w.ROPmode-1]);
if (descr.infoBpp <= 8)
{
@@ -1132,8 +1133,8 @@
descr.lines = tmpheight >= 0 ? lines : -lines;
descr.infoWidth = width;
descr.depth = dc->w.bitsPerPixel;
- descr.drawable = dc->u.x.drawable;
- descr.gc = dc->u.x.gc;
+ descr.drawable = physDev->drawable;
+ descr.gc = physDev->gc;
descr.xSrc = xSrc;
descr.ySrc = tmpheight >= 0 ? lines-(ySrc-startscan)-cy+(oldcy-cy)
: ySrc - startscan;
diff --git a/graphics/x11drv/graphics.c b/graphics/x11drv/graphics.c
index 8304a80..93aedc5 100644
--- a/graphics/x11drv/graphics.c
+++ b/graphics/x11drv/graphics.c
@@ -75,21 +75,22 @@
XGCValues val;
unsigned long mask;
Pixmap pixmap = 0;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
- if (dc->u.x.brush.style == BS_NULL) return FALSE;
- if (dc->u.x.brush.pixel == -1)
+ if (physDev->brush.style == BS_NULL) return FALSE;
+ if (physDev->brush.pixel == -1)
{
/* Special case used for monochrome pattern brushes.
* We need to swap foreground and background because
* Windows does it the wrong way...
*/
- val.foreground = dc->u.x.backgroundPixel;
- val.background = dc->u.x.textPixel;
+ val.foreground = physDev->backgroundPixel;
+ val.background = physDev->textPixel;
}
else
{
- val.foreground = dc->u.x.brush.pixel;
- val.background = dc->u.x.backgroundPixel;
+ val.foreground = physDev->brush.pixel;
+ val.background = physDev->backgroundPixel;
}
if (fMapColors && COLOR_PixelToPalette)
{
@@ -110,13 +111,13 @@
val.foreground = BlackPixelOfScreen(screen) ^ WhitePixelOfScreen(screen);
val.function = GXxor;
}
- val.fill_style = dc->u.x.brush.fillStyle;
+ val.fill_style = physDev->brush.fillStyle;
switch(val.fill_style)
{
case FillStippled:
case FillOpaqueStippled:
if (dc->w.backgroundMode==OPAQUE) val.fill_style = FillOpaqueStippled;
- val.stipple = dc->u.x.brush.pixmap;
+ val.stipple = physDev->brush.pixmap;
mask = GCStipple;
break;
@@ -127,7 +128,7 @@
XImage *image;
EnterCriticalSection( &X11DRV_CritSection );
pixmap = XCreatePixmap( display, rootWindow, 8, 8, screenDepth );
- image = XGetImage( display, dc->u.x.brush.pixmap, 0, 0, 8, 8,
+ image = XGetImage( display, physDev->brush.pixmap, 0, 0, 8, 8,
AllPlanes, ZPixmap );
for (y = 0; y < 8; y++)
for (x = 0; x < 8; x++)
@@ -138,7 +139,7 @@
LeaveCriticalSection( &X11DRV_CritSection );
val.tile = pixmap;
}
- else val.tile = dc->u.x.brush.pixmap;
+ else val.tile = physDev->brush.pixmap;
mask = GCTile;
break;
@@ -161,26 +162,28 @@
/***********************************************************************
* X11DRV_SetupGCForBrush
*
- * Setup dc->u.x.gc for drawing operations using current brush.
+ * Setup physDev->gc for drawing operations using current brush.
* Return FALSE if brush is BS_NULL, TRUE otherwise.
*/
BOOL32 X11DRV_SetupGCForBrush( DC * dc )
{
- return X11DRV_SetupGCForPatBlt( dc, dc->u.x.gc, FALSE );
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+ return X11DRV_SetupGCForPatBlt( dc, physDev->gc, FALSE );
}
/***********************************************************************
* X11DRV_SetupGCForPen
*
- * Setup dc->u.x.gc for drawing operations using current pen.
+ * Setup physDev->gc for drawing operations using current pen.
* Return FALSE if pen is PS_NULL, TRUE otherwise.
*/
BOOL32 X11DRV_SetupGCForPen( DC * dc )
{
XGCValues val;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
- if (dc->u.x.pen.style == PS_NULL) return FALSE;
+ if (physDev->pen.style == PS_NULL) return FALSE;
if (dc->w.flags & DC_DIRTY) CLIPPING_UpdateGCRegion(dc);
@@ -195,7 +198,7 @@
val.function = GXcopy;
break;
case R2_XORPEN :
- val.foreground = dc->u.x.pen.pixel;
+ val.foreground = physDev->pen.pixel;
/* It is very unlikely someone wants to XOR with 0 */
/* This fixes the rubber-drawings in paintbrush */
if (val.foreground == 0)
@@ -204,24 +207,24 @@
val.function = GXxor;
break;
default :
- val.foreground = dc->u.x.pen.pixel;
+ val.foreground = physDev->pen.pixel;
val.function = X11DRV_XROPfunction[dc->w.ROPmode-1];
}
- val.background = dc->u.x.backgroundPixel;
+ val.background = physDev->backgroundPixel;
val.fill_style = FillSolid;
- if ((dc->u.x.pen.style!=PS_SOLID) && (dc->u.x.pen.style!=PS_INSIDEFRAME))
+ if ((physDev->pen.style!=PS_SOLID) && (physDev->pen.style!=PS_INSIDEFRAME))
{
- TSXSetDashes( display, dc->u.x.gc, 0,
- dc->u.x.pen.dashes, dc->u.x.pen.dash_len );
+ TSXSetDashes( display, physDev->gc, 0, physDev->pen.dashes,
+ physDev->pen.dash_len );
val.line_style = (dc->w.backgroundMode == OPAQUE) ?
LineDoubleDash : LineOnOffDash;
}
else val.line_style = LineSolid;
- val.line_width = dc->u.x.pen.width;
+ val.line_width = physDev->pen.width;
if (val.line_width <= 1) {
val.cap_style = CapNotLast;
} else {
- switch (dc->u.x.pen.endcap)
+ switch (physDev->pen.endcap)
{
case PS_ENDCAP_SQUARE:
val.cap_style = CapProjecting;
@@ -234,7 +237,7 @@
val.cap_style = CapRound;
}
}
- switch (dc->u.x.pen.linejoin)
+ switch (physDev->pen.linejoin)
{
case PS_JOIN_BEVEL:
val.join_style = JoinBevel;
@@ -246,7 +249,7 @@
default:
val.join_style = JoinRound;
}
- TSXChangeGC( display, dc->u.x.gc,
+ TSXChangeGC( display, physDev->gc,
GCFunction | GCForeground | GCBackground | GCLineWidth |
GCLineStyle | GCCapStyle | GCJoinStyle | GCFillStyle, &val );
return TRUE;
@@ -256,12 +259,13 @@
/***********************************************************************
* X11DRV_SetupGCForText
*
- * Setup dc->u.x.gc for text drawing operations.
+ * Setup physDev->gc for text drawing operations.
* Return FALSE if the font is null, TRUE otherwise.
*/
BOOL32 X11DRV_SetupGCForText( DC * dc )
{
- XFontStruct* xfs = XFONT_GetFontStruct( dc->u.x.font );
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+ XFontStruct* xfs = XFONT_GetFontStruct( physDev->font );
if( xfs )
{
@@ -270,12 +274,12 @@
if (dc->w.flags & DC_DIRTY) CLIPPING_UpdateGCRegion(dc);
val.function = GXcopy; /* Text is always GXcopy */
- val.foreground = dc->u.x.textPixel;
- val.background = dc->u.x.backgroundPixel;
+ val.foreground = physDev->textPixel;
+ val.background = physDev->backgroundPixel;
val.fill_style = FillSolid;
val.font = xfs->fid;
- TSXChangeGC( display, dc->u.x.gc,
+ TSXChangeGC( display, physDev->gc,
GCFunction | GCForeground | GCBackground | GCFillStyle |
GCFont, &val );
return TRUE;
@@ -285,9 +289,6 @@
}
-
-
-
/**********************************************************************
* X11DRV_MoveToEx
*/
@@ -309,8 +310,10 @@
BOOL32
X11DRV_LineTo( DC *dc, INT32 x, INT32 y )
{
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
if (X11DRV_SetupGCForPen( dc ))
- TSXDrawLine(display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLine(display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + XLPTODP( dc, dc->w.CursPosX ),
dc->w.DCOrgY + YLPTODP( dc, dc->w.CursPosY ),
dc->w.DCOrgX + XLPTODP( dc, x ),
@@ -338,6 +341,7 @@
INT32 width, oldwidth, oldendcap;
double start_angle, end_angle;
XPoint points[4];
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
left = XLPTODP( dc, left );
top = YLPTODP( dc, top );
@@ -353,12 +357,12 @@
if ((left == right) || (top == bottom)
||(lines && ((right-left==1)||(bottom-top==1)))) return TRUE;
- oldwidth = width = dc->u.x.pen.width;
- oldendcap= dc->u.x.pen.endcap;
+ oldwidth = width = physDev->pen.width;
+ oldendcap = physDev->pen.endcap;
if (!width) width = 1;
- if(dc->u.x.pen.style == PS_NULL) width = 0;
+ if(physDev->pen.style == PS_NULL) width = 0;
- if ((dc->u.x.pen.style == PS_INSIDEFRAME))
+ if ((physDev->pen.style == PS_INSIDEFRAME))
{
if (2*width > (right-left)) width=(right-left + 1)/2;
if (2*width > (bottom-top)) width=(bottom-top + 1)/2;
@@ -367,9 +371,9 @@
top += width / 2;
bottom -= (width - 1) / 2;
}
- if(width == 0) width=1; /* more accurate */
- dc->u.x.pen.width=width;
- dc->u.x.pen.endcap=PS_ENDCAP_SQUARE;
+ if(width == 0) width = 1; /* more accurate */
+ physDev->pen.width = width;
+ physDev->pen.endcap = PS_ENDCAP_SQUARE;
xcenter = (right + left) / 2;
ycenter = (bottom + top) / 2;
@@ -395,8 +399,9 @@
/* Fill arc with brush if Chord() or Pie() */
if ((lines > 0) && X11DRV_SetupGCForBrush( dc )) {
- TSXSetArcMode( display, dc->u.x.gc, (lines==1) ? ArcChord : ArcPieSlice);
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXSetArcMode( display, physDev->gc,
+ (lines==1) ? ArcChord : ArcPieSlice);
+ TSXFillArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1, istart_angle, idiff_angle );
}
@@ -404,7 +409,7 @@
/* Draw arc and lines */
if (X11DRV_SetupGCForPen( dc )){
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1, istart_angle, idiff_angle );
if (lines) {
@@ -460,12 +465,12 @@
}
lines++;
}
- TSXDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLines( display, physDev->drawable, physDev->gc,
points, lines+1, CoordModeOrigin );
}
}
- dc->u.x.pen.width=oldwidth;
- dc->u.x.pen.endcap=oldendcap;
+ physDev->pen.width = oldwidth;
+ physDev->pen.endcap = oldendcap;
return TRUE;
}
@@ -512,6 +517,8 @@
X11DRV_Ellipse( DC *dc, INT32 left, INT32 top, INT32 right, INT32 bottom )
{
INT32 width, oldwidth;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
left = XLPTODP( dc, left );
top = YLPTODP( dc, top );
right = XLPTODP( dc, right );
@@ -521,11 +528,11 @@
if (right < left) { INT32 tmp = right; right = left; left = tmp; }
if (bottom < top) { INT32 tmp = bottom; bottom = top; top = tmp; }
- oldwidth = width = dc->u.x.pen.width;
+ oldwidth = width = physDev->pen.width;
if (!width) width = 1;
- if(dc->u.x.pen.style == PS_NULL) width = 0;
+ if(physDev->pen.style == PS_NULL) width = 0;
- if ((dc->u.x.pen.style == PS_INSIDEFRAME))
+ if ((physDev->pen.style == PS_INSIDEFRAME))
{
if (2*width > (right-left)) width=(right-left + 1)/2;
if (2*width > (bottom-top)) width=(bottom-top + 1)/2;
@@ -534,18 +541,18 @@
top += width / 2;
bottom -= (width - 1) / 2;
}
- if(width == 0) width=1; /* more accurate */
- dc->u.x.pen.width=width;
+ if(width == 0) width = 1; /* more accurate */
+ physDev->pen.width = width;
if (X11DRV_SetupGCForBrush( dc ))
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1, 0, 360*64 );
if (X11DRV_SetupGCForPen( dc ))
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1, 0, 360*64 );
- dc->u.x.pen.width=oldwidth;
+ physDev->pen.width = oldwidth;
return TRUE;
}
@@ -557,6 +564,7 @@
X11DRV_Rectangle(DC *dc, INT32 left, INT32 top, INT32 right, INT32 bottom)
{
INT32 width, oldwidth, oldjoinstyle;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
TRACE(graphics, "(%d %d %d %d)\n",
left, top, right, bottom);
@@ -571,11 +579,11 @@
if (right < left) { INT32 tmp = right; right = left; left = tmp; }
if (bottom < top) { INT32 tmp = bottom; bottom = top; top = tmp; }
- oldwidth = width = dc->u.x.pen.width;
+ oldwidth = width = physDev->pen.width;
if (!width) width = 1;
- if(dc->u.x.pen.style == PS_NULL) width = 0;
+ if(physDev->pen.style == PS_NULL) width = 0;
- if ((dc->u.x.pen.style == PS_INSIDEFRAME))
+ if ((physDev->pen.style == PS_INSIDEFRAME))
{
if (2*width > (right-left)) width=(right-left + 1)/2;
if (2*width > (bottom-top)) width=(bottom-top + 1)/2;
@@ -584,27 +592,27 @@
top += width / 2;
bottom -= (width - 1) / 2;
}
- if(width == 1) width=0;
- dc->u.x.pen.width=width;
- oldjoinstyle=dc->u.x.pen.linejoin;
- if(dc->u.x.pen.type!=PS_GEOMETRIC)
- dc->u.x.pen.linejoin=PS_JOIN_MITER;
+ if(width == 1) width = 0;
+ physDev->pen.width = width;
+ oldjoinstyle = physDev->pen.linejoin;
+ if(physDev->pen.type != PS_GEOMETRIC)
+ physDev->pen.linejoin = PS_JOIN_MITER;
if ((right > left + width) && (bottom > top + width))
{
if (X11DRV_SetupGCForBrush( dc ))
- TSXFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillRectangle( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left + (width + 1) / 2,
dc->w.DCOrgY + top + (width + 1) / 2,
right-left-width-1, bottom-top-width-1);
}
if (X11DRV_SetupGCForPen( dc ))
- TSXDrawRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawRectangle( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right-left-1, bottom-top-1 );
- dc->u.x.pen.width=oldwidth;
- dc->u.x.pen.linejoin=oldjoinstyle;
+ physDev->pen.width = oldwidth;
+ physDev->pen.linejoin = oldjoinstyle;
return TRUE;
}
@@ -616,6 +624,7 @@
INT32 bottom, INT32 ell_width, INT32 ell_height )
{
INT32 width, oldwidth, oldendcap;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
TRACE(graphics, "(%d %d %d %d %d %d\n",
left, top, right, bottom, ell_width, ell_height);
@@ -638,12 +647,12 @@
if (right < left) { INT32 tmp = right; right = left; left = tmp; }
if (bottom < top) { INT32 tmp = bottom; bottom = top; top = tmp; }
- oldwidth=width = dc->u.x.pen.width;
- oldendcap = dc->u.x.pen.endcap;
+ oldwidth = width = physDev->pen.width;
+ oldendcap = physDev->pen.endcap;
if (!width) width = 1;
- if(dc->u.x.pen.style == PS_NULL) width = 0;
+ if(physDev->pen.style == PS_NULL) width = 0;
- if ((dc->u.x.pen.style == PS_INSIDEFRAME))
+ if ((physDev->pen.style == PS_INSIDEFRAME))
{
if (2*width > (right-left)) width=(right-left + 1)/2;
if (2*width > (bottom-top)) width=(bottom-top + 1)/2;
@@ -652,59 +661,60 @@
top += width / 2;
bottom -= (width - 1) / 2;
}
- if(width == 0) width=1;
- dc->u.x.pen.width=width;
- dc->u.x.pen.endcap=PS_ENDCAP_SQUARE;
+ if(width == 0) width = 1;
+ physDev->pen.width = width;
+ physDev->pen.endcap = PS_ENDCAP_SQUARE;
if (X11DRV_SetupGCForBrush( dc ))
{
if (ell_width > (right-left) )
if (ell_height > (bottom-top) )
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
- dc->w.DCOrgX + left, dc->w.DCOrgY + top,
- right - left - 1, bottom - top - 1,
- 0, 360 * 64 );
+ TSXFillArc( display, physDev->drawable, physDev->gc,
+ dc->w.DCOrgX + left, dc->w.DCOrgY + top,
+ right - left - 1, bottom - top - 1,
+ 0, 360 * 64 );
else{
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
- dc->w.DCOrgX + left, dc->w.DCOrgY + top,
- right - left - 1, ell_height, 0, 180 * 64 );
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
- dc->w.DCOrgX + left,
- dc->w.DCOrgY + bottom - ell_height - 1,
- right - left - 1, ell_height, 180 * 64, 180 * 64 );
+ TSXFillArc( display, physDev->drawable, physDev->gc,
+ dc->w.DCOrgX + left, dc->w.DCOrgY + top,
+ right - left - 1, ell_height, 0, 180 * 64 );
+ TSXFillArc( display, physDev->drawable, physDev->gc,
+ dc->w.DCOrgX + left,
+ dc->w.DCOrgY + bottom - ell_height - 1,
+ right - left - 1, ell_height, 180 * 64,
+ 180 * 64 );
}
else if (ell_height > (bottom-top) ){
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
ell_width, bottom - top - 1, 90 * 64, 180 * 64 );
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + right - ell_width -1, dc->w.DCOrgY + top,
ell_width, bottom - top - 1, 270 * 64, 180 * 64 );
}else{
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
ell_width, ell_height, 90 * 64, 90 * 64 );
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left,
dc->w.DCOrgY + bottom - ell_height - 1,
ell_width, ell_height, 180 * 64, 90 * 64 );
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + right - ell_width - 1,
dc->w.DCOrgY + bottom - ell_height - 1,
ell_width, ell_height, 270 * 64, 90 * 64 );
- TSXFillArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + right - ell_width - 1,
dc->w.DCOrgY + top,
ell_width, ell_height, 0, 90 * 64 );
}
if (ell_width < right - left)
{
- TSXFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillRectangle( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left + (ell_width + 1) / 2,
dc->w.DCOrgY + top + 1,
right - left - ell_width - 1,
(ell_height + 1) / 2 - 1);
- TSXFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillRectangle( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left + (ell_width + 1) / 2,
dc->w.DCOrgY + bottom - (ell_height) / 2 - 1,
right - left - ell_width - 1,
@@ -712,7 +722,7 @@
}
if (ell_height < bottom - top)
{
- TSXFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillRectangle( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left + 1,
dc->w.DCOrgY + top + (ell_height + 1) / 2,
right - left - 2,
@@ -731,49 +741,49 @@
if (X11DRV_SetupGCForPen(dc)) {
if (ell_width > (right-left) )
if (ell_height > (bottom-top) )
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right - left - 1, bottom -top - 1, 0 , 360 * 64 );
else{
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
right - left - 1, ell_height - 1, 0 , 180 * 64 );
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left,
dc->w.DCOrgY + bottom - ell_height,
right - left - 1, ell_height - 1, 180 * 64 , 180 * 64 );
}
else if (ell_height > (bottom-top) ){
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
ell_width - 1 , bottom - top - 1, 90 * 64 , 180 * 64 );
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + right - ell_width,
dc->w.DCOrgY + top,
ell_width - 1 , bottom - top - 1, 270 * 64 , 180 * 64 );
}else{
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
ell_width - 1, ell_height - 1, 90 * 64, 90 * 64 );
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left, dc->w.DCOrgY + bottom - ell_height,
ell_width - 1, ell_height - 1, 180 * 64, 90 * 64 );
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + right - ell_width,
dc->w.DCOrgY + bottom - ell_height,
ell_width - 1, ell_height - 1, 270 * 64, 90 * 64 );
- TSXDrawArc( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawArc( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + right - ell_width, dc->w.DCOrgY + top,
ell_width - 1, ell_height - 1, 0, 90 * 64 );
}
if (ell_width < right - left)
{
- TSXDrawLine( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLine( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left + ell_width / 2,
dc->w.DCOrgY + top,
dc->w.DCOrgX + right - (ell_width+1) / 2,
dc->w.DCOrgY + top);
- TSXDrawLine( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLine( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left + ell_width / 2 ,
dc->w.DCOrgY + bottom - 1,
dc->w.DCOrgX + right - (ell_width+1)/ 2,
@@ -781,20 +791,20 @@
}
if (ell_height < bottom - top)
{
- TSXDrawLine( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLine( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + right - 1,
dc->w.DCOrgY + top + ell_height / 2,
dc->w.DCOrgX + right - 1,
dc->w.DCOrgY + bottom - (ell_height+1) / 2);
- TSXDrawLine( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLine( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + left,
dc->w.DCOrgY + top + ell_height / 2,
dc->w.DCOrgX + left,
dc->w.DCOrgY + bottom - (ell_height+1) / 2);
}
}
- dc->u.x.pen.width=oldwidth;
- dc->u.x.pen.endcap=oldendcap;
+ physDev->pen.width = oldwidth;
+ physDev->pen.endcap = oldendcap;
return TRUE;
}
@@ -806,14 +816,15 @@
X11DRV_SetPixel( DC *dc, INT32 x, INT32 y, COLORREF color )
{
Pixel pixel;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
x = dc->w.DCOrgX + XLPTODP( dc, x );
y = dc->w.DCOrgY + YLPTODP( dc, y );
pixel = COLOR_ToPhysical( dc, color );
- TSXSetForeground( display, dc->u.x.gc, pixel );
- TSXSetFunction( display, dc->u.x.gc, GXcopy );
- TSXDrawPoint( display, dc->u.x.drawable, dc->u.x.gc, x, y );
+ TSXSetForeground( display, physDev->gc, pixel );
+ TSXSetFunction( display, physDev->gc, GXcopy );
+ TSXDrawPoint( display, physDev->drawable, physDev->gc, x, y );
/* inefficient but simple... */
@@ -830,13 +841,14 @@
static Pixmap pixmap = 0;
XImage * image;
int pixel;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
x = dc->w.DCOrgX + XLPTODP( dc, x );
y = dc->w.DCOrgY + YLPTODP( dc, y );
EnterCriticalSection( &X11DRV_CritSection );
if (dc->w.flags & DC_MEMORY)
{
- image = XGetImage( display, dc->u.x.drawable, x, y, 1, 1,
+ image = XGetImage( display, physDev->drawable, x, y, 1, 1,
AllPlanes, ZPixmap );
}
else
@@ -845,7 +857,7 @@
/* to avoid a BadMatch error */
if (!pixmap) pixmap = XCreatePixmap( display, rootWindow,
1, 1, dc->w.bitsPerPixel );
- XCopyArea( display, dc->u.x.drawable, pixmap, BITMAP_colorGC,
+ XCopyArea( display, physDev->drawable, pixmap, BITMAP_colorGC,
x, y, 1, 1, 0, 0 );
image = XGetImage( display, pixmap, 0, 0, 1, 1, AllPlanes, ZPixmap );
}
@@ -866,6 +878,7 @@
RECT32 box;
HRGN32 tmpVisRgn, prevVisRgn;
HDC32 hdc = dc->hSelf; /* FIXME: should not mix dc/hdc this way */
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
if (!(tmpVisRgn = CreateRectRgn32( 0, 0, 0, 0 ))) return FALSE;
@@ -889,7 +902,7 @@
GetRgnBox32( dc->w.hGCClipRgn, &box );
if (X11DRV_SetupGCForBrush( dc ))
- TSXFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillRectangle( display, physDev->drawable, physDev->gc,
box.left, box.top,
box.right-box.left, box.bottom-box.top );
@@ -908,7 +921,9 @@
INT32 oldwidth;
register int i;
XPoint *points;
- if((oldwidth=dc->u.x.pen.width)==0) dc->u.x.pen.width=1;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
+ if((oldwidth = physDev->pen.width) == 0) physDev->pen.width = 1;
points = (XPoint *) xmalloc (sizeof (XPoint) * (count));
for (i = 0; i < count; i++)
@@ -918,11 +933,11 @@
}
if (X11DRV_SetupGCForPen ( dc ))
- TSXDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLines( display, physDev->drawable, physDev->gc,
points, count, CoordModeOrigin );
free( points );
- dc->u.x.pen.width=oldwidth;
+ physDev->pen.width = oldwidth;
return TRUE;
}
@@ -935,6 +950,7 @@
{
register int i;
XPoint *points;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
points = (XPoint *) xmalloc (sizeof (XPoint) * (count+1));
for (i = 0; i < count; i++)
@@ -945,11 +961,11 @@
points[count] = points[0];
if (X11DRV_SetupGCForBrush( dc ))
- TSXFillPolygon( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXFillPolygon( display, physDev->drawable, physDev->gc,
points, count+1, Complex, CoordModeOrigin);
if (X11DRV_SetupGCForPen ( dc ))
- TSXDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLines( display, physDev->drawable, physDev->gc,
points, count+1, CoordModeOrigin );
free( points );
@@ -964,11 +980,11 @@
X11DRV_PolyPolygon( DC *dc, const POINT32* pt, const INT32* counts, UINT32 polygons)
{
HRGN32 hrgn;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
- /* FIXME: The points should be converted to device coords before */
- /* creating the region. But as CreatePolyPolygonRgn is not */
- /* really correct either, it doesn't matter much... */
- /* At least the outline will be correct :-) */
+ /* FIXME: The points should be converted to device coords before */
+ /* creating the region. */
+
hrgn = CreatePolyPolygonRgn32( pt, counts, polygons, dc->w.polyFillMode );
X11DRV_PaintRgn( dc, hrgn );
DeleteObject32( hrgn );
@@ -992,7 +1008,7 @@
pt++;
}
points[j] = points[0];
- TSXDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLines( display, physDev->drawable, physDev->gc,
points, j + 1, CoordModeOrigin );
}
free( points );
@@ -1007,6 +1023,7 @@
BOOL32
X11DRV_PolyPolyline( DC *dc, const POINT32* pt, const DWORD* counts, DWORD polylines )
{
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
if (X11DRV_SetupGCForPen ( dc ))
{
int i, j, max = 0;
@@ -1024,7 +1041,7 @@
pt++;
}
points[j] = points[0];
- TSXDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLines( display, physDev->drawable, physDev->gc,
points, j + 1, CoordModeOrigin );
}
free( points );
@@ -1045,6 +1062,7 @@
int xOrg, int yOrg,
Pixel pixel, WORD fillType )
{
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
int left, right;
#define TO_FLOOD(x,y) ((fillType == FLOODFILLBORDER) ? \
@@ -1058,7 +1076,7 @@
left = right = x;
while ((left > 0) && TO_FLOOD( left-1, y )) left--;
while ((right < image->width) && TO_FLOOD( right, y )) right++;
- XFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ XFillRectangle( display, physDev->drawable, physDev->gc,
xOrg + left, yOrg + y, right-left, 1 );
/* Set the pixels of this line so we don't fill it again */
@@ -1124,10 +1142,11 @@
XImage *image;
RECT32 rect;
DC *dc = params->dc;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
if (GetRgnBox32( dc->w.hGCClipRgn, &rect ) == ERROR) return FALSE;
- if (!(image = XGetImage( display, dc->u.x.drawable,
+ if (!(image = XGetImage( display, physDev->drawable,
rect.left,
rect.top,
rect.right - rect.left,
@@ -1137,7 +1156,7 @@
if (X11DRV_SetupGCForBrush( dc ))
{
/* ROP mode is always GXcopy for flood-fill */
- XSetFunction( display, dc->u.x.gc, GXcopy );
+ XSetFunction( display, physDev->gc, GXcopy );
X11DRV_InternalFloodFill(image, dc,
XLPTODP(dc,params->x) + dc->w.DCOrgX - rect.left,
YLPTODP(dc,params->y) + dc->w.DCOrgY - rect.top,
@@ -1293,8 +1312,10 @@
static void X11DRV_Bezier(int level, DC * dc, POINT32 *Points,
XPoint* xpoints, unsigned int* pIx)
{
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
if(*pIx == BEZMAXPOINTS){
- TSXDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLines( display, physDev->drawable, physDev->gc,
xpoints, *pIx, CoordModeOrigin );
*pIx=0;
}
@@ -1343,6 +1364,8 @@
int i;
unsigned int ix=0;
XPoint* xpoints;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
TRACE(graphics, "dc=%04x count=%ld %d,%d - %d,%d - %d,%d -%d,%d \n",
(int)dc, count,
start.x, start.y,
@@ -1366,8 +1389,8 @@
X11DRV_Bezier(BEZIERMAXDEPTH , dc, Points, xpoints, &ix );
count -=3;
}
- if( ix) TSXDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
- xpoints, ix, CoordModeOrigin );
+ if( ix) TSXDrawLines( display, physDev->drawable, physDev->gc,
+ xpoints, ix, CoordModeOrigin );
free(xpoints);
return TRUE;
}
diff --git a/graphics/x11drv/init.c b/graphics/x11drv/init.c
index 1147c9d..4091c4f 100644
--- a/graphics/x11drv/init.c
+++ b/graphics/x11drv/init.c
@@ -8,7 +8,8 @@
#include "x11drv.h"
#include "color.h"
#include "bitmap.h"
-
+#include "winnt.h"
+#include "debug.h"
static BOOL32 X11DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
LPCSTR output, const DEVMODE16* initData );
@@ -170,10 +171,13 @@
{
X11DRV_PDEVICE *physDev;
- physDev = &dc->u.x; /* for now */
+ dc->physDev = physDev = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(*physDev) );
+ if(!physDev) {
+ ERR(x11drv, "Can't allocate physDev\n");
+ return FALSE;
+ }
- memset( physDev, 0, sizeof(*physDev) );
- dc->physDev = physDev;
dc->w.devCaps = &X11DRV_DevCaps;
if (dc->w.flags & DC_MEMORY)
{
@@ -227,6 +231,8 @@
{
X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
TSXFreeGC( display, physDev->gc );
+ HeapFree( GetProcessHeap(), 0, physDev );
+ dc->physDev = NULL;
return TRUE;
}
diff --git a/graphics/x11drv/pen.c b/graphics/x11drv/pen.c
index 5251075..4c26d1e 100644
--- a/graphics/x11drv/pen.c
+++ b/graphics/x11drv/pen.c
@@ -1,5 +1,5 @@
/*
- * GDI pen objects
+ * X11DRV pen objects
*
* Copyright 1993 Alexandre Julliard
*/
@@ -20,40 +20,41 @@
HPEN32 X11DRV_PEN_SelectObject( DC * dc, HPEN32 hpen, PENOBJ * pen )
{
HPEN32 prevHandle = dc->w.hPen;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
dc->w.hPen = hpen;
- dc->u.x.pen.style = pen->logpen.lopnStyle & PS_STYLE_MASK;
- dc->u.x.pen.type = pen->logpen.lopnStyle & PS_TYPE_MASK;
- dc->u.x.pen.endcap = pen->logpen.lopnStyle & PS_ENDCAP_MASK;
- dc->u.x.pen.linejoin = pen->logpen.lopnStyle & PS_JOIN_MASK;
+ physDev->pen.style = pen->logpen.lopnStyle & PS_STYLE_MASK;
+ physDev->pen.type = pen->logpen.lopnStyle & PS_TYPE_MASK;
+ physDev->pen.endcap = pen->logpen.lopnStyle & PS_ENDCAP_MASK;
+ physDev->pen.linejoin = pen->logpen.lopnStyle & PS_JOIN_MASK;
- dc->u.x.pen.width = (pen->logpen.lopnWidth.x * dc->vportExtX +
+ physDev->pen.width = (pen->logpen.lopnWidth.x * dc->vportExtX +
dc->wndExtX / 2) / dc->wndExtX;
- if (dc->u.x.pen.width < 0) dc->u.x.pen.width = -dc->u.x.pen.width;
- if (dc->u.x.pen.width == 1) dc->u.x.pen.width = 0; /* Faster */
- dc->u.x.pen.pixel = COLOR_ToPhysical( dc, pen->logpen.lopnColor );
+ if (physDev->pen.width < 0) physDev->pen.width = -physDev->pen.width;
+ if (physDev->pen.width == 1) physDev->pen.width = 0; /* Faster */
+ physDev->pen.pixel = COLOR_ToPhysical( dc, pen->logpen.lopnColor );
switch(pen->logpen.lopnStyle & PS_STYLE_MASK)
{
case PS_DASH:
- dc->u.x.pen.dashes = (char *)PEN_dash;
- dc->u.x.pen.dash_len = 2;
+ physDev->pen.dashes = (char *)PEN_dash;
+ physDev->pen.dash_len = 2;
break;
case PS_DOT:
- dc->u.x.pen.dashes = (char *)PEN_dot;
- dc->u.x.pen.dash_len = 2;
+ physDev->pen.dashes = (char *)PEN_dot;
+ physDev->pen.dash_len = 2;
break;
case PS_DASHDOT:
- dc->u.x.pen.dashes = (char *)PEN_dashdot;
- dc->u.x.pen.dash_len = 4;
+ physDev->pen.dashes = (char *)PEN_dashdot;
+ physDev->pen.dash_len = 4;
break;
case PS_DASHDOTDOT:
- dc->u.x.pen.dashes = (char *)PEN_dashdotdot;
- dc->u.x.pen.dash_len = 6;
+ physDev->pen.dashes = (char *)PEN_dashdotdot;
+ physDev->pen.dash_len = 6;
break;
case PS_ALTERNATE:
/* FIXME: should be alternating _pixels_ that are set */
- dc->u.x.pen.dashes = (char *)PEN_alternate;
- dc->u.x.pen.dash_len = 2;
+ physDev->pen.dashes = (char *)PEN_alternate;
+ physDev->pen.dash_len = 2;
break;
case PS_USERSTYLE:
/* FIXME */
diff --git a/graphics/x11drv/text.c b/graphics/x11drv/text.c
index ba65559..8f09124 100644
--- a/graphics/x11drv/text.c
+++ b/graphics/x11drv/text.c
@@ -35,10 +35,11 @@
RECT32 rect;
char dfBreakChar, lfUnderline, lfStrikeOut;
BOOL32 rotated = FALSE;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
if (!X11DRV_SetupGCForText( dc )) return TRUE;
- pfo = XFONT_GetFontObject( dc->u.x.font );
+ pfo = XFONT_GetFontObject( physDev->font );
font = pfo->fs;
if (pfo->lf.lfEscapement && pfo->lpX11Trans)
@@ -48,7 +49,7 @@
lfStrikeOut = (pfo->fo_flags & FO_SYNTH_STRIKEOUT) ? 1 : 0;
TRACE(text,"hdc=%04x df=%04x %d,%d %s, %d flags=%d lpDx=%p\n",
- dc->hSelf, (UINT16)(dc->u.x.font), x, y,
+ dc->hSelf, (UINT16)(physDev->font), x, y,
debugstr_an (str, count), count, flags, lpDx);
/* some strings sent here end in a newline for whatever reason. I have no
@@ -102,8 +103,8 @@
if (flags & ETO_OPAQUE)
{
- TSXSetForeground( display, dc->u.x.gc, dc->u.x.backgroundPixel );
- TSXFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXSetForeground( display, physDev->gc, physDev->backgroundPixel );
+ TSXFillRectangle( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + rect.left, dc->w.DCOrgY + rect.top,
rect.right-rect.left, rect.bottom-rect.top );
}
@@ -195,8 +196,9 @@
(y - ascent < rect.top) ||
(y + descent >= rect.bottom))
{
- TSXSetForeground( display, dc->u.x.gc, dc->u.x.backgroundPixel );
- TSXFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXSetForeground( display, physDev->gc,
+ physDev->backgroundPixel );
+ TSXFillRectangle( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + x,
dc->w.DCOrgY + y - ascent,
width,
@@ -207,12 +209,12 @@
/* Draw the text (count > 0 verified) */
- TSXSetForeground( display, dc->u.x.gc, dc->u.x.textPixel );
+ TSXSetForeground( display, physDev->gc, physDev->textPixel );
if (!dc->w.charExtra && !dc->w.breakExtra && !lpDx)
{
if(!rotated)
{
- TSXDrawString( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawString( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + x, dc->w.DCOrgY + y, str, count );
}
else
@@ -229,7 +231,7 @@
int y_i = IROUND((double) (dc->w.DCOrgY + y) - offset *
pfo->lpX11Trans->b / 1000.0 );
- TSXDrawString( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawString( display, physDev->drawable, physDev->gc,
x_i, y_i, &str[i], 1);
offset += (double) (font->per_char ?
font->per_char[char_metric_offset].attributes:
@@ -293,7 +295,7 @@
}
}
- TSXDrawText( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawText( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + x, dc->w.DCOrgY + y, items, pitem - items );
HeapFree( GetProcessHeap(), 0, items );
}
@@ -309,11 +311,11 @@
if (!TSXGetFontProperty( font, XA_UNDERLINE_THICKNESS, &lineWidth ))
lineWidth = 0;
else if (lineWidth == 1) lineWidth = 0;
- TSXSetLineAttributes( display, dc->u.x.gc, lineWidth,
- LineSolid, CapRound, JoinBevel );
- TSXDrawLine( display, dc->u.x.drawable, dc->u.x.gc,
- dc->w.DCOrgX + x, dc->w.DCOrgY + y + linePos,
- dc->w.DCOrgX + x + width, dc->w.DCOrgY + y + linePos );
+ TSXSetLineAttributes( display, physDev->gc, lineWidth,
+ LineSolid, CapRound, JoinBevel );
+ TSXDrawLine( display, physDev->drawable, physDev->gc,
+ dc->w.DCOrgX + x, dc->w.DCOrgY + y + linePos,
+ dc->w.DCOrgX + x + width, dc->w.DCOrgY + y + linePos );
}
if (lfStrikeOut)
{
@@ -322,9 +324,9 @@
lineAscent = ascent / 2;
if (!TSXGetFontProperty( font, XA_STRIKEOUT_DESCENT, &lineDescent ))
lineDescent = -lineAscent * 2 / 3;
- TSXSetLineAttributes( display, dc->u.x.gc, lineAscent + lineDescent,
+ TSXSetLineAttributes( display, physDev->gc, lineAscent + lineDescent,
LineSolid, CapRound, JoinBevel );
- TSXDrawLine( display, dc->u.x.drawable, dc->u.x.gc,
+ TSXDrawLine( display, physDev->drawable, physDev->gc,
dc->w.DCOrgX + x, dc->w.DCOrgY + y - lineAscent,
dc->w.DCOrgX + x + width, dc->w.DCOrgY + y - lineAscent );
}
diff --git a/graphics/x11drv/xfont.c b/graphics/x11drv/xfont.c
index 9c670a3..25396d9 100644
--- a/graphics/x11drv/xfont.c
+++ b/graphics/x11drv/xfont.c
@@ -2206,16 +2206,17 @@
{
HFONT32 hPrevFont = 0;
LOGFONT16 lf;
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
- if( CHECK_PFONT(dc->u.x.font) )
- XFONT_ReleaseCacheEntry( __PFONT(dc->u.x.font) );
+ if( CHECK_PFONT(physDev->font) )
+ XFONT_ReleaseCacheEntry( __PFONT(physDev->font) );
/* FIXME: do we need to pass anything back from here? */
memcpy(&lf,&font->logfont,sizeof(lf));
lf.lfWidth = font->logfont.lfWidth * dc->vportExtX/dc->wndExtX;
lf.lfHeight = font->logfont.lfHeight* dc->vportExtY/dc->wndExtY;
- dc->u.x.font = XFONT_RealizeFont( &lf );
+ physDev->font = XFONT_RealizeFont( &lf );
hPrevFont = dc->w.hFont;
dc->w.hFont = hfont;
@@ -2268,7 +2269,8 @@
BOOL32 X11DRV_GetTextExtentPoint( DC *dc, LPCSTR str, INT32 count,
LPSIZE32 size )
{
- fontObject* pfo = XFONT_GetFontObject( dc->u.x.font );
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+ fontObject* pfo = XFONT_GetFontObject( physDev->font );
if( pfo ) {
if( !pfo->lpX11Trans ) {
int dir, ascent, descent;
@@ -2307,9 +2309,11 @@
*/
BOOL32 X11DRV_GetTextMetrics(DC *dc, TEXTMETRIC32A *metrics)
{
- if( CHECK_PFONT(dc->u.x.font) )
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+
+ if( CHECK_PFONT(physDev->font) )
{
- fontObject* pfo = __PFONT(dc->u.x.font);
+ fontObject* pfo = __PFONT(physDev->font);
XFONT_GetTextMetric( pfo, metrics );
return TRUE;
@@ -2324,7 +2328,8 @@
BOOL32 X11DRV_GetCharWidth( DC *dc, UINT32 firstChar, UINT32 lastChar,
LPINT32 buffer )
{
- fontObject* pfo = XFONT_GetFontObject( dc->u.x.font );
+ X11DRV_PDEVICE *physDev = (X11DRV_PDEVICE *)dc->physDev;
+ fontObject* pfo = XFONT_GetFontObject( physDev->font );
if( pfo )
{