--- trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-03 16:56:27 UTC (rev 15749)
+++ trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-03 16:57:55 UTC (rev 15750)
@@ -308,6 +308,7 @@
switch (BltInfo->Rop4)
{
+
case ROP4_BLACKNESS:
//return(0x00000000);
@@ -376,17 +377,39 @@
#endif
return TRUE;
break;
+
case ROP4_SRCCOPY:
// return(Source);
switch (BltInfo->SourceSurface->iBitmapFormat)
{
case BMF_1BPP:
- break;
- case BMF_4BPP:
- break;
+ case BMF_4BPP:
case BMF_16BPP:
- break;
case BMF_24BPP:
+ {
+ PBYTE byteaddr = BltInfo->SourceSurface->pvScan0 + BltInfo->DestRect.top * BltInfo->SourceSurface->lDelta;
+ PDWORD addr = (PDWORD)byteaddr + BltInfo->DestRect.left;
+ LONG xlDelta = BltInfo->SourceSurface->lDelta - (BltInfo->DestRect.right - BltInfo->DestRect.left) ;
+
+ SourceY = BltInfo->SourcePoint.y;
+
+ for (DestY=BltInfo->DestRect.top; DestY<BltInfo->DestRect.bottom; DestY++)
+ {
+
+ if (SourceY > BltInfo->SourceSurface->sizlBitmap.cy) break;
+
+ SourceX = BltInfo->SourcePoint.x;
+
+ for (DestX=BltInfo->DestRect.left; DestX<BltInfo->DestRect.right; DestX++, SourceX++, addr++)
+ {
+ if (SourceX > BltInfo->SourceSurface->sizlBitmap.cx) break;
+
+ *addr = DIB_GetSource(BltInfo->SourceSurface, SourceX,
+ SourceY, BltInfo->XlateSourceToDest);
+ }
+ }
+ addr+=xlDelta;
+ }
break;
case BMF_32BPP:
{