wine/dlls/x11drv dib.c

Alexandre Julliard julliard at wine.codeweavers.com
Wed Nov 30 14:55:09 CST 2005


ChangeSet ID:	21574
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at winehq.org	2005/11/30 14:55:09

Modified files:
	dlls/x11drv    : dib.c 

Log message:
	Oldrich Jedlicka <oldium.pro at seznam.cz>
	Fix for RGB mask that corresponds to the visual's mask.

Patch: http://cvs.winehq.org/patch.py?id=21574

Old revision  New revision  Changes     Path
 1.45          1.46          +36 -12     wine/dlls/x11drv/dib.c

Index: wine/dlls/x11drv/dib.c
diff -u -p wine/dlls/x11drv/dib.c:1.45 wine/dlls/x11drv/dib.c:1.46
--- wine/dlls/x11drv/dib.c:1.45	30 Nov 2005 20:55: 9 -0000
+++ wine/dlls/x11drv/dib.c	30 Nov 2005 20:55: 9 -0000
@@ -521,6 +521,18 @@ INT X11DRV_DIB_MaskToShift(DWORD mask)
 }
 
 /***********************************************************************
+ *           X11DRV_DIB_CheckMask
+ *
+ * Check RGB mask if it is either 0 or matches visual's mask.
+ */
+static inline int X11DRV_DIB_CheckMask(int red_mask, int green_mask, int blue_mask)
+{
+    return ( red_mask == 0 && green_mask == 0 && blue_mask == 0 ) ||
+           ( red_mask == visual->red_mask && green_mask == visual->green_mask &&
+             blue_mask == visual->blue_mask );
+}
+
+/***********************************************************************
  *           X11DRV_DIB_SetImageBits_1
  *
  * SetDIBits for a 1-bit deep DIB.
@@ -602,7 +614,8 @@ static void X11DRV_DIB_GetImageBits_1( i
     {
     case 1:
     case 4:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 1 or 4 bmp -> pal 1 dib ==== */
             BYTE* dstbyte;
 
@@ -634,7 +647,8 @@ static void X11DRV_DIB_GetImageBits_1( i
         break;
 
     case 8:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask, bmpImage->green_mask, bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 8 bmp -> pal 1 dib ==== */
             const void* srcbits;
             const BYTE* srcpixel;
@@ -978,7 +992,8 @@ static void X11DRV_DIB_GetImageBits_4( i
     switch (bmpImage->depth) {
     case 1:
     case 4:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 1 or 4 bmp -> pal 4 dib ==== */
             BYTE* dstbyte;
 
@@ -1010,7 +1025,8 @@ static void X11DRV_DIB_GetImageBits_4( i
         break;
 
     case 8:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 8 bmp -> pal 4 dib ==== */
             const void* srcbits;
             const BYTE *srcpixel;
@@ -1568,7 +1584,8 @@ static void X11DRV_DIB_GetImageBits_8( i
     switch (bmpImage->depth) {
     case 1:
     case 4:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
 
             /* ==== pal 1 bmp -> pal 8 dib ==== */
             /* ==== pal 4 bmp -> pal 8 dib ==== */
@@ -1590,7 +1607,8 @@ static void X11DRV_DIB_GetImageBits_8( i
         break;
 
     case 8:
-       if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+       if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+           && srccolors) {
             /* ==== pal 8 bmp -> pal 8 dib ==== */
            const void* srcbits;
            const BYTE* srcpixel;
@@ -2374,7 +2392,8 @@ static void X11DRV_DIB_GetImageBits_16( 
 
     case 1:
     case 4:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 1 or 4 bmp -> rgb or bgr 555 or 565 dib ==== */
             int rShift,gShift,bShift;
             WORD* dstpixel;
@@ -2412,7 +2431,8 @@ static void X11DRV_DIB_GetImageBits_16( 
         break;
 
     case 8:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 8 bmp -> rgb or bgr 555 or 565 dib ==== */
             int rShift,gShift,bShift;
             const BYTE* srcbits;
@@ -2799,7 +2819,8 @@ static void X11DRV_DIB_GetImageBits_24( 
 
     case 1:
     case 4:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 1 or 4 bmp -> rgb 888 dib ==== */
             BYTE* dstbyte;
 
@@ -2822,7 +2843,8 @@ static void X11DRV_DIB_GetImageBits_24( 
         break;
 
     case 8:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask == 0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 8 bmp -> rgb 888 dib ==== */
             const void* srcbits;
             const BYTE* srcpixel;
@@ -3377,7 +3399,8 @@ static void X11DRV_DIB_GetImageBits_32( 
 
     case 1:
     case 4:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 1 or 4 bmp -> any 0888 dib ==== */
             int rShift,gShift,bShift;
             DWORD* dstpixel;
@@ -3402,7 +3425,8 @@ static void X11DRV_DIB_GetImageBits_32( 
         break;
 
     case 8:
-        if (bmpImage->red_mask==0 && bmpImage->green_mask==0 && bmpImage->blue_mask==0 && srccolors) {
+        if (X11DRV_DIB_CheckMask(bmpImage->red_mask,bmpImage->green_mask,bmpImage->blue_mask)
+            && srccolors) {
             /* ==== pal 8 bmp -> any 0888 dib ==== */
             int rShift,gShift,bShift;
             const void* srcbits;



More information about the wine-cvs mailing list