Roderick Colenbrander : winex11: Use ColorShifts data in X11DRV_PALETTE_ToLogical.

Alexandre Julliard julliard at winehq.org
Wed Sep 2 09:31:40 CDT 2009


Module: wine
Branch: master
Commit: 5db05dfea95a7e45269b8ae9a490adefeba02d34
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5db05dfea95a7e45269b8ae9a490adefeba02d34

Author: Roderick Colenbrander <thunderbird2k at gmail.com>
Date:   Tue Sep  1 22:05:40 2009 +0200

winex11: Use ColorShifts data in X11DRV_PALETTE_ToLogical.

---

 dlls/winex11.drv/dib.c      |   20 ++++++++++----------
 dlls/winex11.drv/graphics.c |    4 ++--
 dlls/winex11.drv/palette.c  |    5 ++++-
 dlls/winex11.drv/x11drv.h   |    2 +-
 4 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/dlls/winex11.drv/dib.c b/dlls/winex11.drv/dib.c
index 8a61332..0bf2548 100644
--- a/dlls/winex11.drv/dib.c
+++ b/dlls/winex11.drv/dib.c
@@ -2201,7 +2201,7 @@ static void X11DRV_DIB_SetImageBits_16( int lines, const BYTE *srcbits,
  *
  * GetDIBits for an 16-bit deep DIB.
  */
-static void X11DRV_DIB_GetImageBits_16( int lines, BYTE *dstbits,
+static void X11DRV_DIB_GetImageBits_16( X11DRV_PDEVICE *physDev, int lines, BYTE *dstbits,
 					DWORD dstwidth, DWORD srcwidth,
 					PALETTEENTRY *srccolors,
 					DWORD rDst, DWORD gDst, DWORD bDst,
@@ -2509,7 +2509,7 @@ static void X11DRV_DIB_GetImageBits_16( int lines, BYTE *dstbits,
                 for (x = 0; x < width; x++) {
                     COLORREF srcval;
                     DWORD dstval;
-                    srcval=X11DRV_PALETTE_ToLogical(XGetPixel(bmpImage, x, h));
+                    srcval=X11DRV_PALETTE_ToLogical(physDev, XGetPixel(bmpImage, x, h));
                     dstval=((GetRValue(srcval) << rShift) & rDst) |
                            ((GetGValue(srcval) << gShift) & gDst) |
                            ((GetBValue(srcval) << bShift) & bDst);
@@ -2694,7 +2694,7 @@ static void X11DRV_DIB_SetImageBits_24( int lines, const BYTE *srcbits,
  *
  * GetDIBits for an 24-bit deep DIB.
  */
-static void X11DRV_DIB_GetImageBits_24( int lines, BYTE *dstbits,
+static void X11DRV_DIB_GetImageBits_24( X11DRV_PDEVICE *physDev, int lines, BYTE *dstbits,
 					DWORD dstwidth, DWORD srcwidth,
 					PALETTEENTRY *srccolors,
                                         DWORD rDst, DWORD gDst, DWORD bDst,
@@ -2891,7 +2891,7 @@ static void X11DRV_DIB_GetImageBits_24( int lines, BYTE *dstbits,
                 dstbyte=dstbits;
                 for (x = 0; x < width; x++) {
                     COLORREF srcval=X11DRV_PALETTE_ToLogical
-                        (XGetPixel( bmpImage, x, h ));
+                        (physDev, XGetPixel( bmpImage, x, h ));
                     dstbyte[0]=GetBValue(srcval);
                     dstbyte[1]=GetGValue(srcval);
                     dstbyte[2]=GetRValue(srcval);
@@ -3176,7 +3176,7 @@ static void X11DRV_DIB_SetImageBits_32(int lines, const BYTE *srcbits,
  *
  * GetDIBits for an 32-bit deep DIB.
  */
-static void X11DRV_DIB_GetImageBits_32( int lines, BYTE *dstbits,
+static void X11DRV_DIB_GetImageBits_32( X11DRV_PDEVICE *physDev, int lines, BYTE *dstbits,
 					DWORD dstwidth, DWORD srcwidth,
 					PALETTEENTRY *srccolors,
 					DWORD rDst, DWORD gDst, DWORD bDst,
@@ -3475,7 +3475,7 @@ static void X11DRV_DIB_GetImageBits_32( int lines, BYTE *dstbits,
                 dstpixel=(DWORD*)dstbits;
                 for (x = 0; x < width; x++) {
                     COLORREF srcval;
-                    srcval=X11DRV_PALETTE_ToLogical(XGetPixel(bmpImage, x, h));
+                    srcval=X11DRV_PALETTE_ToLogical(physDev, XGetPixel(bmpImage, x, h));
                     *dstpixel++=(GetRValue(srcval) << rShift) |
                                 (GetGValue(srcval) << gShift) |
                                 (GetBValue(srcval) << bShift);
@@ -3798,7 +3798,7 @@ static int X11DRV_DIB_GetImageBits( const X11DRV_DIB_IMAGEBITS_DESCR *descr )
         break;
     case 15:
     case 16:
-       X11DRV_DIB_GetImageBits_16( descr->lines, (LPVOID)descr->bits,
+       X11DRV_DIB_GetImageBits_16( descr->physDev, descr->lines, (LPVOID)descr->bits,
 				   descr->infoWidth,descr->width,
 				   descr->palentry,
 				   descr->rMask, descr->gMask, descr->bMask,
@@ -3806,7 +3806,7 @@ static int X11DRV_DIB_GetImageBits( const X11DRV_DIB_IMAGEBITS_DESCR *descr )
        break;
 
     case 24:
-       X11DRV_DIB_GetImageBits_24( descr->lines, (LPVOID)descr->bits,
+       X11DRV_DIB_GetImageBits_24( descr->physDev, descr->lines, (LPVOID)descr->bits,
 				   descr->infoWidth,descr->width,
 				   descr->palentry,
 				   descr->rMask, descr->gMask, descr->bMask,
@@ -3814,7 +3814,7 @@ static int X11DRV_DIB_GetImageBits( const X11DRV_DIB_IMAGEBITS_DESCR *descr )
        break;
 
     case 32:
-       X11DRV_DIB_GetImageBits_32( descr->lines, (LPVOID)descr->bits,
+       X11DRV_DIB_GetImageBits_32( descr->physDev, descr->lines, (LPVOID)descr->bits,
 				   descr->infoWidth, descr->width,
 				   descr->palentry,
                                    descr->rMask, descr->gMask, descr->bMask,
@@ -4151,7 +4151,7 @@ INT CDECL X11DRV_GetDIBits( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, UINT start
               WORD *index = colorPtr;
               descr.colorMap = rgb = HeapAlloc(GetProcessHeap(), 0, num_colors * sizeof(RGBQUAD));
               for(i = 0; i < num_colors; i++, rgb++, index++) {
-                  colref = X11DRV_PALETTE_ToLogical(X11DRV_PALETTE_ToPhysical(physDev, PALETTEINDEX(*index)));
+                  colref = X11DRV_PALETTE_ToLogical(physDev, X11DRV_PALETTE_ToPhysical(physDev, PALETTEINDEX(*index)));
                   rgb->rgbRed = GetRValue(colref);
                   rgb->rgbGreen = GetGValue(colref);
                   rgb->rgbBlue = GetBValue(colref);
diff --git a/dlls/winex11.drv/graphics.c b/dlls/winex11.drv/graphics.c
index 7a64022..af1e74c 100644
--- a/dlls/winex11.drv/graphics.c
+++ b/dlls/winex11.drv/graphics.c
@@ -1036,7 +1036,7 @@ X11DRV_SetPixel( X11DRV_PDEVICE *physDev, INT x, INT y, COLORREF color )
     /* Update the DIBSection from the pixmap */
     X11DRV_UnlockDIBSection(physDev, TRUE);
 
-    return X11DRV_PALETTE_ToLogical(pixel);
+    return X11DRV_PALETTE_ToLogical(physDev, pixel);
 }
 
 
@@ -1083,7 +1083,7 @@ X11DRV_GetPixel( X11DRV_PDEVICE *physDev, INT x, INT y )
     /* Update the DIBSection from the pixmap */
     X11DRV_UnlockDIBSection(physDev, FALSE);
     if( physDev->depth > 1)
-        pixel = X11DRV_PALETTE_ToLogical(pixel);
+        pixel = X11DRV_PALETTE_ToLogical(physDev, pixel);
     else
         /* monochrome bitmaps return black or white */
         if( pixel) pixel = 0xffffff;
diff --git a/dlls/winex11.drv/palette.c b/dlls/winex11.drv/palette.c
index bf2cee8..57174a7 100644
--- a/dlls/winex11.drv/palette.c
+++ b/dlls/winex11.drv/palette.c
@@ -779,11 +779,14 @@ BOOL X11DRV_IsSolidColor( COLORREF color )
  *
  * Return RGB color for given X pixel.
  */
-COLORREF X11DRV_PALETTE_ToLogical(int pixel)
+COLORREF X11DRV_PALETTE_ToLogical(X11DRV_PDEVICE *physDev, int pixel)
 {
     XColor color;
     ColorShifts *shifts = &X11DRV_PALETTE_default_shifts;
 
+    if(physDev->color_shifts)
+        shifts = physDev->color_shifts;
+
 #if 0
     /* truecolor visual */
 
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 828eebe..404be34 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -490,7 +490,7 @@ extern int X11DRV_PALETTE_Init(void);
 extern void X11DRV_PALETTE_Cleanup(void);
 extern BOOL X11DRV_IsSolidColor(COLORREF color);
 
-extern COLORREF X11DRV_PALETTE_ToLogical(int pixel);
+extern COLORREF X11DRV_PALETTE_ToLogical(X11DRV_PDEVICE *physDev, int pixel);
 extern int X11DRV_PALETTE_ToPhysical(X11DRV_PDEVICE *physDev, COLORREF color);
 extern int X11DRV_PALETTE_LookupPixel(COLORREF color);
 




More information about the wine-cvs mailing list