sorry revert to 15772
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
  _____
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
--- trunk/reactos/subsys/win32k/dib/dib32bpp.c  2005-06-04 17:47:53 UTC
(rev 15776)
+++ trunk/reactos/subsys/win32k/dib/dib32bpp.c  2005-06-04 18:43:39 UTC
(rev 15777)
@@ -20,6 +20,9 @@
 #include <w32k.h>
+#include <w32k.h>
+
+
 VOID
 DIB_32BPP_PutPixel(SURFOBJ *SurfObj, LONG x, LONG y, ULONG c)
 {
@@ -402,36 +405,38 @@
 FASTCALL
 DIB_32DstInvert(PBLTINFO BltInfo)
 {
-       ULONG SourceX, SourceY;
-       ULONG right  = BltInfo->DestRect.right;
     PULONG DestBits;
-       ULONG top  = BltInfo->DestRect.top;
-       ULONG left = BltInfo->DestRect.left;
-       ULONG DestX;
-       ULONG DestY = BltInfo->DestRect.bottom - top;
-       ULONG delta = BltInfo->DestSurface->lDelta - (DestX << 2);
+    ULONG top  = BltInfo->DestRect.top;
+    ULONG left = BltInfo->DestRect.left;
+    ULONG DestX = BltInfo->DestRect.right - left;
+    ULONG DestY = BltInfo->DestRect.bottom - top;
+    ULONG delta = BltInfo->DestSurface->lDelta - (DestX << 2);
-       /* Calculate the Initial Destination */
-       DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (left  << 2)
+
+    /* Calculate the Initial Destination */
+    DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (left  << 2) +
                         top * BltInfo->DestSurface->lDelta);
-
-       SourceY =  BltInfo->SourcePoint.y;
-       while (DestY>0)
-       {
-               SourceX = BltInfo->SourcePoint.x;
-
-
-               for (DestX = BltInfo->DestRect.left; DestX < right;
DestX++, DestBits++, SourceX++)
-               {
-                       *DestBits = ~*DestBits;
-               }
-
-               DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
-               SourceY++;
-               DestY--;
-        }
-
+    while (DestY > 0)
+    {
+        while (DestX > 0)
+        {
+            /* Invert bits */
+            *DestBits =~ *DestBits;
+
+            /* Update Position */
+            DestBits++;
+
+            /* Decrease distance to do */
+            DestX--;
+        }
+
+        /* Update position */
+        DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
+
+        /* Decrease distance to do */
+        DestY--;
+    }
+
     /* Return TRUE */
     return TRUE;
 }
@@ -448,42 +453,69 @@
                case BMF_4BPP:
                case BMF_16BPP:
                case BMF_24BPP:
-               case BMF_32BPP:
                {
+                       ULONG DestX, DestY;
                        ULONG SourceX, SourceY;
+                       PULONG DestBits;
+
+                       ULONG bottom = BltInfo->DestRect.bottom;
                        ULONG right  = BltInfo->DestRect.right;
-            PULONG DestBits;
-                       ULONG top  = BltInfo->DestRect.top;
-                       ULONG left = BltInfo->DestRect.left;
-                       ULONG DestX;
-                       ULONG DestY = BltInfo->DestRect.bottom - top;
-                       ULONG delta = BltInfo->DestSurface->lDelta -
(DestX << 2);
+                       ULONG delta  = BltInfo->DestSurface->lDelta -
((BltInfo->DestRect.right - BltInfo->DestRect.left) <<2)  ;
-                       /* Calculate the Initial Destination */
-                       DestBits =
(PULONG)(BltInfo->DestSurface->pvScan0 + (left  << 2) +
-                        top * BltInfo->DestSurface->lDelta);
+                       DestBits =
(PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
+                                BltInfo->DestRect.top *
BltInfo->DestSurface->lDelta);
                        SourceY =  BltInfo->SourcePoint.y;
-                       while (DestY>0)
+
+                       for (DestY = BltInfo->DestRect.top; DestY <
bottom; DestY++)
                        {
SourceX = BltInfo->SourcePoint.x;
-
-                               for (DestX = left; DestX < right;
DestX++, DestBits++, SourceX++)
+                               for (DestX = BltInfo->DestRect.left;
DestX < right; DestX++, DestBits++, SourceX++)
                                {
-                                       *DestBits |=
DIB_GetSource(BltInfo->SourceSurface,  SourceX,
-                                               SourceY,
BltInfo->XlateSourceToDest);
+                                       *DestBits = (*DestBits |
DIB_GetSource(BltInfo->SourceSurface,  SourceX,
+                                               SourceY,
BltInfo->XlateSourceToDest));
                                }
+
+                        DestBits = (PULONG)((ULONG_PTR)DestBits +
delta);
+                        SourceY++;
+                        }
+
+               }
+               status = TRUE;
+           break;
+        case BMF_32BPP:
+               {
+                       ULONG DestX, DestY;
+                       ULONG SourceX, SourceY;
+                       PULONG DestBits;
+                       ULONG bottom = BltInfo->DestRect.bottom;
+                       ULONG right  = BltInfo->DestRect.right;
+                       ULONG delta  = BltInfo->DestSurface->lDelta -
((BltInfo->DestRect.right - BltInfo->DestRect.left) <<2)  ;
+
+                       DestBits =
(PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
+                                BltInfo->DestRect.top *
BltInfo->DestSurface->lDelta);
+
+                       SourceY =  BltInfo->SourcePoint.y;
+
+                       for (DestY = BltInfo->DestRect.top; DestY <
bottom; DestY++)
+                       {
+
+                               SourceX = BltInfo->SourcePoint.x;
+                               for (DestX = BltInfo->DestRect.left;
DestX < right; DestX++, DestBits++, SourceX++)
+                               {
+                                       *DestBits = (*DestBits |
DIB_32BPP_GetPixel(BltInfo->SourceSurface,  SourceX, SourceY));
+                               }
+
                         DestBits = (PULONG)((ULONG_PTR)DestBits +
delta);
-                        SourceY++;
-                        DestY--;
+                        SourceY++;
                         }
-
+
                }
                status = TRUE;
-           break;
+           break;
                default:
                break;
@@ -491,7 +523,6 @@
  return status;
 }
-
 BOOLEAN
 DIB32_Srccopy(PBLTINFO BltInfo)
 {
@@ -505,34 +536,35 @@
                case BMF_16BPP:
                case BMF_24BPP:
                {
-                       ULONG SourceX, SourceY;
+                       ULONG DestX, DestY;
+                       ULONG SourceX, SourceY;
+                       PULONG DestBits;
+
+                       ULONG bottom = BltInfo->DestRect.bottom;
                        ULONG right  = BltInfo->DestRect.right;
-            PULONG DestBits;
-                       ULONG top  = BltInfo->DestRect.top;
-                       ULONG left = BltInfo->DestRect.left;
-                       ULONG DestX;
-                       ULONG DestY = BltInfo->DestRect.bottom - top;
-                       ULONG delta = BltInfo->DestSurface->lDelta -
(DestX << 2);
+                       ULONG delta  = ((BltInfo->DestRect.right -
BltInfo->DestRect.left) <<2) + BltInfo->DestSurface->lDelta;
-                       /* Calculate the Initial Destination */
-                       DestBits =
(PULONG)(BltInfo->DestSurface->pvScan0 + (left  << 2) +
-                        top * BltInfo->DestSurface->lDelta);
+                       DestBits =
(PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
+                                BltInfo->DestRect.top *
BltInfo->DestSurface->lDelta);
                        SourceY =  BltInfo->SourcePoint.y;
-                       while (DestY>0)
-                       {
-                               SourceX = BltInfo->SourcePoint.x;
-                               for (DestX = left; DestX < right;
DestX++, DestBits++, SourceX++)
+
+                       for (DestY = BltInfo->DestRect.top; DestY <
bottom; DestY++)
+                       {
+
+                               SourceX = BltInfo->SourcePoint.x;
+                               for (DestX = BltInfo->DestRect.left;
DestX < right; DestX++, DestBits++, SourceX++)
                                {
-
+                                       if (SourceX >
BltInfo->SourceSurface->sizlBitmap.cx) break;
+
                                        *DestBits =
DIB_GetSource(BltInfo->SourceSurface,  SourceX,
-                                               SourceY,
BltInfo->XlateSourceToDest);
+                                               SourceY,
BltInfo->XlateSourceToDest);
                                }
-
-                        DestBits = (PULONG)((ULONG_PTR)DestBits +
delta);
-                        SourceY++;
-                        DestY--;
-                        }
+
+                        DestBits = (PULONG)((ULONG_PTR)DestBits -
delta);
+                        SourceY++;
+                        }
+
                }
                status = TRUE;
            break;