DIB sync bug fix

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In the bitblt functions, if the source and destination DCs are the same DC, the call:
X11DRV_UnlockDIBSection( physDevSrc, FALSE );
caused the DC to be labeled as "InSync" without committing the changes resulting from the bitblt.

This fixes bug 885.

Changelog:
If bit/stretchblt source and destination DCs are the same,
make sure the changes are committed before unlocking.

Index: graphics/x11drv/bitblt.c
===================================================================
RCS file: /home/wine/wine/graphics/x11drv/bitblt.c,v
retrieving revision 1.44
diff -u -r1.44 bitblt.c
--- graphics/x11drv/bitblt.c	25 Jun 2002 23:29:51 -0000	1.44
+++ graphics/x11drv/bitblt.c	5 Jan 2003 20:50:15 -0000
@@ -1608,13 +1608,15 @@
     }
 
     X11DRV_CoerceDIBSection( physDevDst, DIB_Status_GdiMod, FALSE );
-    X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
+    if (physDevDst != physDevSrc)
+      X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
 
     result = BITBLT_InternalStretchBlt( physDevDst, xDst, yDst, width, height,
                                         physDevSrc, xSrc, ySrc, width, height, rop );
 
 END:
-    X11DRV_UnlockDIBSection( physDevSrc, FALSE );
+    if (physDevDst != physDevSrc)
+      X11DRV_UnlockDIBSection( physDevSrc, FALSE );
     X11DRV_UnlockDIBSection( physDevDst, TRUE );
 
     return result;
@@ -1632,12 +1634,14 @@
     BOOL result;
 
     X11DRV_LockDIBSection( physDevDst, DIB_Status_GdiMod, FALSE );
-    X11DRV_LockDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
+    if (physDevDst != physDevSrc)
+      X11DRV_LockDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
 
     result = BITBLT_InternalStretchBlt( physDevDst, xDst, yDst, widthDst, heightDst,
                                         physDevSrc, xSrc, ySrc, widthSrc, heightSrc, rop );
 
-    X11DRV_UnlockDIBSection( physDevSrc, FALSE );
+    if (physDevDst != physDevSrc)
+      X11DRV_UnlockDIBSection( physDevSrc, FALSE );
     X11DRV_UnlockDIBSection( physDevDst, TRUE );
     return result;
 }

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux