Roderick Colenbrander : winex11: Add a function for retrieving the bitmap GC.
Alexandre Julliard
julliard at winehq.org
Thu Jul 16 11:58:03 CDT 2009
Module: wine
Branch: master
Commit: 618b410aa88d2614f767f2dbfc0751ae66f43c30
URL: http://source.winehq.org/git/wine.git/?a=commit;h=618b410aa88d2614f767f2dbfc0751ae66f43c30
Author: Roderick Colenbrander <thunderbird2k at gmail.com>
Date: Thu Jul 9 21:51:05 2009 +0200
winex11: Add a function for retrieving the bitmap GC.
---
dlls/winex11.drv/bitmap.c | 20 ++++++++++++++++----
dlls/winex11.drv/brush.c | 11 ++++++-----
dlls/winex11.drv/dib.c | 6 +++---
dlls/winex11.drv/graphics.c | 2 +-
dlls/winex11.drv/x11drv.h | 5 ++---
5 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/dlls/winex11.drv/bitmap.c b/dlls/winex11.drv/bitmap.c
index facf405..4fb3ef0 100644
--- a/dlls/winex11.drv/bitmap.c
+++ b/dlls/winex11.drv/bitmap.c
@@ -36,6 +36,17 @@ X_PHYSBITMAP BITMAP_stock_phys_bitmap = { 0 }; /* phys bitmap for the default s
static XContext bitmap_context; /* X context to associate a phys bitmap to a handle */
+GC get_bitmap_gc(int depth)
+{
+ switch(depth)
+ {
+ case 1:
+ return BITMAP_monoGC;
+ default:
+ return BITMAP_colorGC;
+ }
+}
+
/***********************************************************************
* X11DRV_BITMAP_Init
*/
@@ -157,11 +168,12 @@ BOOL CDECL X11DRV_CreateBitmap( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, LPVOID
}
else /* else clear the bitmap */
{
+ GC gc = get_bitmap_gc(physBitmap->pixmap_depth);
wine_tsx11_lock();
- XSetFunction( gdi_display, BITMAP_GC(physBitmap), GXclear );
- XFillRectangle( gdi_display, physBitmap->pixmap, BITMAP_GC(physBitmap), 0, 0,
+ XSetFunction( gdi_display, gc, GXclear );
+ XFillRectangle( gdi_display, physBitmap->pixmap, gc, 0, 0,
bitmap.bmWidth, bitmap.bmHeight );
- XSetFunction( gdi_display, BITMAP_GC(physBitmap), GXcopy );
+ XSetFunction( gdi_display, gc, GXcopy );
wine_tsx11_unlock();
}
return TRUE;
@@ -405,7 +417,7 @@ LONG CDECL X11DRV_SetBitmapBits( HBITMAP hbitmap, const void *bits, LONG count )
FIXME("Unhandled bits:%d\n", bitmap.bmBitsPixel);
}
- XPutImage( gdi_display, physBitmap->pixmap, BITMAP_GC(physBitmap),
+ XPutImage( gdi_display, physBitmap->pixmap, get_bitmap_gc(physBitmap->pixmap_depth),
image, 0, 0, 0, 0, bitmap.bmWidth, height );
HeapFree( GetProcessHeap(), 0, image->data );
image->data = NULL;
diff --git a/dlls/winex11.drv/brush.c b/dlls/winex11.drv/brush.c
index 612968c..3368bbf 100644
--- a/dlls/winex11.drv/brush.c
+++ b/dlls/winex11.drv/brush.c
@@ -103,13 +103,14 @@ static const COLORREF WHITE = RGB(0xff, 0xff, 0xff);
/***********************************************************************
* BRUSH_DitherColor
*/
-static Pixmap BRUSH_DitherColor( COLORREF color )
+static Pixmap BRUSH_DitherColor( COLORREF color, int depth)
{
/* X image for building dithered pixmap */
static XImage *ditherImage = NULL;
static COLORREF prevColor = 0xffffffff;
unsigned int x, y;
Pixmap pixmap;
+ GC gc = get_bitmap_gc(depth);
if (!ditherImage)
{
@@ -144,7 +145,7 @@ static Pixmap BRUSH_DitherColor( COLORREF color )
}
pixmap = XCreatePixmap( gdi_display, root_window, MATRIX_SIZE, MATRIX_SIZE, screen_depth );
- XPutImage( gdi_display, pixmap, BITMAP_colorGC, ditherImage, 0, 0,
+ XPutImage( gdi_display, pixmap, gc, ditherImage, 0, 0,
0, 0, MATRIX_SIZE, MATRIX_SIZE );
wine_tsx11_unlock();
@@ -185,7 +186,7 @@ static void BRUSH_SelectSolidBrush( X11DRV_PDEVICE *physDev, COLORREF color )
if ((physDev->depth > 1) && (screen_depth <= 8) && !X11DRV_IsSolidColor( color ))
{
/* Dithered brush */
- physDev->brush.pixmap = BRUSH_DitherColor( color );
+ physDev->brush.pixmap = BRUSH_DitherColor( color, physDev->depth );
physDev->brush.fillStyle = FillTiled;
physDev->brush.pixel = 0;
}
@@ -222,7 +223,7 @@ static BOOL BRUSH_SelectPatternBrush( X11DRV_PDEVICE *physDev, HBITMAP hbitmap )
bitmap.bmWidth, bitmap.bmHeight, 1);
/* FIXME: should probably convert to monochrome instead */
XCopyPlane( gdi_display, physBitmap->pixmap, physDev->brush.pixmap,
- BITMAP_monoGC, 0, 0, bitmap.bmWidth, bitmap.bmHeight, 0, 0, 1 );
+ get_bitmap_gc(1), 0, 0, bitmap.bmWidth, bitmap.bmHeight, 0, 0, 1 );
}
else
{
@@ -230,7 +231,7 @@ static BOOL BRUSH_SelectPatternBrush( X11DRV_PDEVICE *physDev, HBITMAP hbitmap )
bitmap.bmWidth, bitmap.bmHeight,
physBitmap->pixmap_depth );
XCopyArea( gdi_display, physBitmap->pixmap, physDev->brush.pixmap,
- BITMAP_GC(physBitmap), 0, 0, bitmap.bmWidth, bitmap.bmHeight, 0, 0 );
+ get_bitmap_gc(physBitmap->pixmap_depth), 0, 0, bitmap.bmWidth, bitmap.bmHeight, 0, 0 );
}
wine_tsx11_unlock();
diff --git a/dlls/winex11.drv/dib.c b/dlls/winex11.drv/dib.c
index 6df4137..07ce9e1 100644
--- a/dlls/winex11.drv/dib.c
+++ b/dlls/winex11.drv/dib.c
@@ -3984,7 +3984,7 @@ INT CDECL X11DRV_SetDIBits( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, UINT start
descr.lines = tmpheight >= 0 ? lines : -lines;
descr.depth = physBitmap->pixmap_depth;
descr.drawable = physBitmap->pixmap;
- descr.gc = BITMAP_GC(physBitmap);
+ descr.gc = get_bitmap_gc(physBitmap->pixmap_depth);
descr.xSrc = 0;
descr.ySrc = 0;
descr.xDest = 0;
@@ -4138,7 +4138,7 @@ INT CDECL X11DRV_GetDIBits( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, UINT start
descr.lines = lines;
descr.depth = physBitmap->pixmap_depth;
descr.drawable = physBitmap->pixmap;
- descr.gc = BITMAP_GC(physBitmap);
+ descr.gc = get_bitmap_gc(physBitmap->pixmap_depth);
descr.width = dib.dsBm.bmWidth;
descr.height = dib.dsBm.bmHeight;
descr.xDest = 0;
@@ -4353,7 +4353,7 @@ static void X11DRV_DIB_DoUpdateDIBSection(X_PHYSBITMAP *physBitmap, BOOL toDIB)
GetObjectW( physBitmap->hbitmap, sizeof(bitmap), &bitmap );
X11DRV_DIB_DoCopyDIBSection(physBitmap, toDIB,
physBitmap->colorMap, physBitmap->nColorMap,
- physBitmap->pixmap, BITMAP_GC(physBitmap),
+ physBitmap->pixmap, get_bitmap_gc(physBitmap->pixmap_depth),
0, 0, 0, 0, bitmap.bmWidth, bitmap.bmHeight);
}
diff --git a/dlls/winex11.drv/graphics.c b/dlls/winex11.drv/graphics.c
index 8d74c77..abdd505 100644
--- a/dlls/winex11.drv/graphics.c
+++ b/dlls/winex11.drv/graphics.c
@@ -1072,7 +1072,7 @@ X11DRV_GetPixel( X11DRV_PDEVICE *physDev, INT x, INT y )
/* to avoid a BadMatch error */
if (!pixmap) pixmap = XCreatePixmap( gdi_display, root_window,
1, 1, physDev->depth );
- XCopyArea( gdi_display, physDev->drawable, pixmap, BITMAP_colorGC,
+ XCopyArea( gdi_display, physDev->drawable, pixmap, get_bitmap_gc(physDev->depth),
physDev->dc_rect.left + pt.x, physDev->dc_rect.top + pt.y, 1, 1, 0, 0 );
image = XGetImage( gdi_display, pixmap, 0, 0, 1, 1, AllPlanes, ZPixmap );
}
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 013a359..10af183 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -144,11 +144,10 @@ typedef struct
} X11DRV_PDEVICE;
- /* GCs used for B&W and color bitmap operations */
-extern GC BITMAP_monoGC, BITMAP_colorGC;
extern X_PHYSBITMAP BITMAP_stock_phys_bitmap; /* phys bitmap for the default stock bitmap */
-#define BITMAP_GC(physBitmap) (((physBitmap)->pixmap_depth == 1) ? BITMAP_monoGC : BITMAP_colorGC)
+/* Retrieve the GC used for bitmap operations */
+extern GC get_bitmap_gc(int depth);
/* Wine driver X11 functions */
More information about the wine-cvs
mailing list