[WIN32K]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 25 Feb 2011 17:37:25 +0000 (17:37 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 25 Feb 2011 17:37:25 +0000 (17:37 +0000)
- In BITMAP_CopyBitmap, also "copy" the palette of the source bitmap, instead of assuming the one created by GreCreateBitmapEx matches the bitmap bits we have copied.
Fixes broken colors on the firefox firstrun page
See issue #5902 for more details.

svn path=/trunk/; revision=50902

reactos/subsystems/win32/win32k/objects/bitmaps.c

index 583b951..75e1b1c 100644 (file)
@@ -842,7 +842,7 @@ BITMAP_CopyBitmap(HBITMAP hBitmap)
         return 0;
     }
 
         return 0;
     }
 
-    Bitmap = SURFACE_LockSurface(hBitmap);
+    Bitmap = SURFACE_ShareLockSurface(hBitmap);
     if (Bitmap == NULL)
     {
         return 0;
     if (Bitmap == NULL)
     {
         return 0;
@@ -867,11 +867,14 @@ BITMAP_CopyBitmap(HBITMAP hBitmap)
 
     if (res)
     {
 
     if (res)
     {
-        resBitmap = SURFACE_LockSurface(res);
+        resBitmap = SURFACE_ShareLockSurface(res);
         if (resBitmap)
         {
             IntSetBitmapBits(resBitmap, Bitmap->SurfObj.cjBits, Bitmap->SurfObj.pvBits);
         if (resBitmap)
         {
             IntSetBitmapBits(resBitmap, Bitmap->SurfObj.cjBits, Bitmap->SurfObj.pvBits);
-                       SURFACE_UnlockSurface(resBitmap);
+            GDIOBJ_IncrementShareCount(&Bitmap->ppal->BaseObject);
+            GDIOBJ_ShareUnlockObjByPtr(&resBitmap->ppal->BaseObject);
+            resBitmap->ppal = Bitmap->ppal;
+            SURFACE_ShareUnlockSurface(resBitmap);
         }
         else
         {
         }
         else
         {
@@ -880,7 +883,7 @@ BITMAP_CopyBitmap(HBITMAP hBitmap)
         }
     }
 
         }
     }
 
-    SURFACE_UnlockSurface(Bitmap);
+    SURFACE_ShareUnlockSurface(Bitmap);
 
     return  res;
 }
 
     return  res;
 }