bitblt srcpy optimze it can be more optimze
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-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:
 				{