branch update for HEAD-2003050101
[reactos.git] / subsys / win32k / objects / bitmaps.c
index f8d37ca..9a55690 100644 (file)
@@ -4,6 +4,7 @@
 #include <win32k/bitmaps.h>
 //#include <win32k/debug.h>
 #include "../eng/handle.h"
+#include <include/inteng.h>
 
 #define NDEBUG
 #include <win32k/debug1.h>
@@ -26,7 +27,7 @@ BOOL STDCALL W32kBitBlt(HDC  hDCDest,
   POINTL SourcePoint;
   PBITMAPOBJ DestBitmapObj;
   PBITMAPOBJ SrcBitmapObj;
-  BOOL Status, SurfDestAlloc, SurfSrcAlloc;
+  BOOL Status, SurfDestAlloc, SurfSrcAlloc, XlateAlloc;
   PPALOBJ DCLogPal;
   PPALGDI PalDestGDI, PalSourceGDI;
   PXLATEOBJ XlateObj = NULL;
@@ -48,6 +49,7 @@ BOOL STDCALL W32kBitBlt(HDC  hDCDest,
 
   SurfDestAlloc = FALSE;
   SurfSrcAlloc  = FALSE;
+  XlateAlloc = FALSE;
 
   // Determine surfaces to be used in the bitblt
   SurfDest = (PSURFOBJ)AccessUserObject(DCDest->Surface);
@@ -81,15 +83,17 @@ BOOL STDCALL W32kBitBlt(HDC  hDCDest,
     PalDestGDI   = (PPALGDI)AccessInternalObject(DestPalette);
     PalSourceGDI = (PPALGDI)AccessInternalObject(SourcePalette);
 
-    XlateObj = (PXLATEOBJ)EngCreateXlate(PalDestGDI->Mode, PalSourceGDI->Mode, DestPalette, SourcePalette);
+    XlateObj = (PXLATEOBJ)IntEngCreateXlate(PalDestGDI->Mode, PalSourceGDI->Mode, DestPalette, SourcePalette);
+    XlateAlloc = TRUE;
   }
 
   // Perform the bitblt operation
 
-  Status = EngBitBlt(SurfDest, SurfSrc, NULL, NULL, XlateObj, &DestRect, &SourcePoint, NULL, NULL, NULL, ROP);
+  Status = IntEngBitBlt(SurfDest, SurfSrc, NULL, NULL, XlateObj, &DestRect, &SourcePoint, NULL, NULL, NULL, ROP);
 
-  if(SurfDestAlloc == TRUE) ExFreePool(SurfDest);
-  if(SurfSrcAlloc  == TRUE) ExFreePool(SurfSrc);
+  if (XlateAlloc) EngDeleteXlate(XlateObj);
+  if (SurfDestAlloc) ExFreePool(SurfDest);
+  if (SurfSrcAlloc) ExFreePool(SurfSrc);
 
   DC_ReleasePtr(hDCDest);
   DC_ReleasePtr(hDCSrc);