strechblt
gain very lite perfomen boost
Modified: trunk/reactos/subsys/win32k/dib/dib16bpp.c
Modified: trunk/reactos/subsys/win32k/dib/dib1bpp.c
Modified: trunk/reactos/subsys/win32k/dib/dib24bpp.c
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
Modified: trunk/reactos/subsys/win32k/dib/dib4bpp.c
Modified: trunk/reactos/subsys/win32k/dib/dib8bpp.c

Modified: trunk/reactos/subsys/win32k/dib/dib16bpp.c
--- trunk/reactos/subsys/win32k/dib/dib16bpp.c	2005-05-31 17:30:54 UTC (rev 15703)
+++ trunk/reactos/subsys/win32k/dib/dib16bpp.c	2005-05-31 19:44:36 UTC (rev 15704)
@@ -626,18 +626,21 @@
    int DesX;
    int DesY;
    int color;
+   int zoomX;
 
   DPRINT("DIB_16BPP_StretchBlt: Source BPP: %u, srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n",
      BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom,
      DestRect->left, DestRect->top, DestRect->right, DestRect->bottom);
 
-     SrcSizeY = SourceRect->bottom;
-     SrcSizeX = SourceRect->right;
+    SrcSizeY = SourceRect->bottom;
+    SrcSizeX = SourceRect->right;
   
-     DesSizeY = DestRect->bottom;
-     DesSizeX = DestRect->right;   
+    DesSizeY = DestRect->bottom;
+    DesSizeX = DestRect->right;   
+   
+	zoomX = DesSizeX / SrcSizeX;
+    if (zoomX==0) zoomX=1;
 
-
     switch(SourceSurf->iBitmapFormat)
     {
             case BMF_1BPP:
@@ -653,7 +656,7 @@
 
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -664,9 +667,17 @@
 
 				    if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0)
 					{
-					 DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					 if (zoomX>1) 
+						DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					else
+					    DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));		
+					 
 					 } else {
-                     DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+                       if (zoomX>1) 
+							DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+						else
+							DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));		
+
                      }					
 					}
 				}
@@ -687,7 +698,7 @@
 				if (sy > SourceRect->bottom) break;
 
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -697,7 +708,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_4BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));		
+
 					}
 				}
       break;
@@ -715,7 +731,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -725,7 +741,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_8BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
+					if (zoomX>1) 
+						DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));	
+
 					}
 				}
 		break;
@@ -743,7 +764,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -753,7 +774,10 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_24BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					if (zoomX>1) 
+						DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));					
 					}
 				}
 	  break;
@@ -771,7 +795,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -780,8 +804,11 @@
 					
 					if (sx > SourceRect->right) break;
 
-					color = DIB_16BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					color = DIB_32BPP_GetPixel(SourceSurf, sx, sy);
+					if (zoomX>1) 
+						DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_16BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));					
 					}
 				}		  
       break;

Modified: trunk/reactos/subsys/win32k/dib/dib1bpp.c
--- trunk/reactos/subsys/win32k/dib/dib1bpp.c	2005-05-31 17:30:54 UTC (rev 15703)
+++ trunk/reactos/subsys/win32k/dib/dib1bpp.c	2005-05-31 19:44:36 UTC (rev 15704)
@@ -494,6 +494,7 @@
    int DesX;
    int DesY;
    int color;
+   int zoomX;
 
    SrcSizeY = SourceRect->bottom;
    SrcSizeX = SourceRect->right;
@@ -501,6 +502,10 @@
    DesSizeY = DestRect->bottom;
    DesSizeX = DestRect->right;   
 
+   zoomX = DesSizeX / SrcSizeX;
+   if (zoomX==0) zoomX=1;
+
+
     switch(SourceSurf->iBitmapFormat)
     {
       case BMF_1BPP:
@@ -518,7 +523,7 @@
 				if (sy > SourceRect->bottom) break;
 
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -528,7 +533,11 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_1BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_1BPP_PutPixel(DestSurf, DesX, DesY, color);
+					
+					if (zoomX>1) 
+						DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, color);
+					else
+					    DIB_1BPP_PutPixel(DestSurf, DesX, DesY, color);
 					}
 				}
       break;
@@ -548,7 +557,7 @@
 				if (sy > SourceRect->bottom) break;
 
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -558,7 +567,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_4BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}
       break;
@@ -576,7 +590,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -586,7 +600,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_8BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}
 		break;
@@ -604,7 +623,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -614,7 +633,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_16BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}
 	  break;
@@ -632,7 +656,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -642,7 +666,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_24BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}		  
       break;
@@ -659,7 +688,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -669,7 +698,11 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_32BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
+					if (zoomX>1) 
+						DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}		  
       break;

Modified: trunk/reactos/subsys/win32k/dib/dib24bpp.c
--- trunk/reactos/subsys/win32k/dib/dib24bpp.c	2005-05-31 17:30:54 UTC (rev 15703)
+++ trunk/reactos/subsys/win32k/dib/dib24bpp.c	2005-05-31 19:44:36 UTC (rev 15704)
@@ -318,13 +318,17 @@
    int DesX;
    int DesY;
    int color;
+   int zoomX;
 
    SrcSizeY = SourceRect->bottom;
    SrcSizeX = SourceRect->right;
   
    DesSizeY = DestRect->bottom;
-   DesSizeX = DestRect->right;   
+   DesSizeX = DestRect->right;
 
+   zoomX = DesSizeX / SrcSizeX;
+   if (zoomX==0) zoomX=1;
+
     switch(SourceSurf->iBitmapFormat)
     {
       case BMF_1BPP:
@@ -340,7 +344,7 @@
 
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -352,8 +356,16 @@
 				    if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0)
 					{
 					 DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					 if (zoomX>1) 
+						DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					else
+					    DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+
 					 } else {
-                     DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+					 if (zoomX>1) 
+						DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+					else
+					    DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));                     
                      }					
 					}
 				}
@@ -370,11 +382,9 @@
 				else
                     sy = (int) ((ULONG) DesSizeY * (ULONG) DesY) / ((ULONG) SrcSizeY); 
                 				
-
 				if (sy > SourceRect->bottom) break;
 
-
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -384,7 +394,10 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_4BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					if (zoomX>1) 
+						DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}
       break;
@@ -402,7 +415,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -412,7 +425,10 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_8BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					if (zoomX>1) 
+						DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}
 		break;
@@ -430,7 +446,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -440,7 +456,10 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_16BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					if (zoomX>1) 
+						DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}
 	  break;
@@ -458,7 +477,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -468,7 +487,10 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_24BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color);
+					if (zoomX>1) 
+						DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, color);
+					else
+					    DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color);
 					}
 				}		  
       break;
@@ -486,7 +508,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -496,7 +518,11 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_32BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_24BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}		  
       break;

Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
--- trunk/reactos/subsys/win32k/dib/dib32bpp.c	2005-05-31 17:30:54 UTC (rev 15703)
+++ trunk/reactos/subsys/win32k/dib/dib32bpp.c	2005-05-31 19:44:36 UTC (rev 15704)
@@ -560,6 +560,8 @@
    int DesX;
    int DesY;
    int color;
+   int zoomX;
+   
 
    DPRINT("DIB_32BPP_StretchBlt: Source BPP: %u, srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n",
      BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom,
@@ -569,8 +571,11 @@
    SrcSizeX = SourceRect->right;
   
    DesSizeY = DestRect->bottom;
-   DesSizeX = DestRect->right;   
+   DesSizeX = DestRect->right; 
 
+   zoomX = DesSizeX / SrcSizeX;
+   if (zoomX==0) zoomX=1;
+      
     switch(SourceSurf->iBitmapFormat)
     {
       case BMF_1BPP:
@@ -586,7 +591,7 @@
 
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -597,9 +602,16 @@
 
 				    if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0)
 					{
-					 DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					 if (zoomX>1) 
+						DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					 else
+					    DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));	
+					 
 					 } else {
-                     DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+                     if (zoomX>1) 
+						DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+					 else
+					    DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));						 
                      }					
 					}
 				}
@@ -620,7 +632,7 @@
 				if (sy > SourceRect->bottom) break;
 
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -629,8 +641,14 @@
 					
 					if (sx > SourceRect->right) break;
 
+
 					color = DIB_4BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}
       break;
@@ -648,7 +666,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -658,7 +676,11 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_8BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
+					if (zoomX>1) 
+						DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}
 		break;
@@ -676,7 +698,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -686,7 +708,10 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_16BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					if (zoomX>1) 
+						DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}
 	  break;
@@ -704,7 +729,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -714,7 +739,10 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_24BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					if (zoomX>1) 
+						DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_32BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}		  
       break;

Modified: trunk/reactos/subsys/win32k/dib/dib4bpp.c
--- trunk/reactos/subsys/win32k/dib/dib4bpp.c	2005-05-31 17:30:54 UTC (rev 15703)
+++ trunk/reactos/subsys/win32k/dib/dib4bpp.c	2005-05-31 19:44:36 UTC (rev 15704)
@@ -372,13 +372,17 @@
    int DesX;
    int DesY;
    int color;
+   int zoomX;
 
    SrcSizeY = SourceRect->bottom;
    SrcSizeX = SourceRect->right;
   
    DesSizeY = DestRect->bottom;
-   DesSizeX = DestRect->right;   
+   DesSizeX = DestRect->right; 
 
+   zoomX = DesSizeX / SrcSizeX;
+   if (zoomX==0) zoomX=1;
+
     switch(SourceSurf->iBitmapFormat)
     {
       case BMF_1BPP:
@@ -394,7 +398,7 @@
 
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -405,9 +409,17 @@
 
 				    if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0)
 					{
-					 DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
-					 } else {
-                     DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+					 if (zoomX>1) 
+						DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					else
+					    DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					 
+					 } else {                     
+					 if (zoomX>1) 
+						DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+					else
+					    DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+
                      }					
 					}
 				}
@@ -428,7 +440,7 @@
 				if (sy > SourceRect->bottom) break;
 
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -438,7 +450,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_4BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_4BPP_PutPixel(DestSurf, DesX, DesY, color);
+					
+					if (zoomX>1) 
+						DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, color);
+					else
+					    DIB_4BPP_PutPixel(DestSurf, DesX, DesY, color);
+
 					}
 				}
       break;
@@ -456,7 +473,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -466,7 +483,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_8BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}
 		break;
@@ -484,7 +506,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -494,7 +516,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_16BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
+					if (zoomX>1) 
+						DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}
 	  break;
@@ -512,7 +539,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -522,7 +549,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_24BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}		  
       break;
@@ -540,7 +572,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -550,7 +582,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_32BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}		  
       break;

Modified: trunk/reactos/subsys/win32k/dib/dib8bpp.c
--- trunk/reactos/subsys/win32k/dib/dib8bpp.c	2005-05-31 17:30:54 UTC (rev 15703)
+++ trunk/reactos/subsys/win32k/dib/dib8bpp.c	2005-05-31 19:44:36 UTC (rev 15704)
@@ -550,11 +550,21 @@
    int DesX;
    int DesY;
    int color;
+   int zoomX;
 
   DPRINT("DIB_8BPP_StretchBlt: Source BPP: %u, srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n",
      BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom,
      DestRect->left, DestRect->top, DestRect->right, DestRect->bottom);
 
+   SrcSizeY = SourceRect->bottom;
+   SrcSizeX = SourceRect->right;
+  
+   DesSizeY = DestRect->bottom;
+   DesSizeX = DestRect->right;
+
+   zoomX = DesSizeX / SrcSizeX;
+   if (zoomX==0) zoomX=1;
+
     switch(SourceSurf->iBitmapFormat)
     {     
 	        case BMF_1BPP:
@@ -570,7 +580,7 @@
 
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -581,9 +591,15 @@
 
 				    if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0)
 					{
-					 DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					 if (zoomX>1) 
+						DIB_8BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
+					else
+					    DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 0));
 					 } else {
-                     DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+					 if (zoomX>1) 
+						DIB_8BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));
+					else
+					    DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, 1));                     
                      }					
 					}
 				}
@@ -604,7 +620,7 @@
 				if (sy > SourceRect->bottom) break;
 
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -614,7 +630,11 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_4BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_8BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
 					}
 				}
       break;
@@ -632,7 +652,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -642,7 +662,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_16BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_8BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}
 	  break;
@@ -660,7 +685,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -670,7 +695,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_24BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					
+					if (zoomX>1) 
+						DIB_8BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}		  
       break;
@@ -688,7 +718,7 @@
                 				
 				if (sy > SourceRect->bottom) break;
 
-				for (DesX=0; DesX<DestRect->right; DesX++)
+				for (DesX=0; DesX<DestRect->right; DesX+=zoomX)
 				{
 					if (DesSizeX>SrcSizeX)
 						sx = (int) ((ULONG) SrcSizeX * (ULONG) DesX) / ((ULONG) DesSizeX);
@@ -698,7 +728,12 @@
 					if (sx > SourceRect->right) break;
 
 					color = DIB_32BPP_GetPixel(SourceSurf, sx, sy);
-					DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
+					if (zoomX>1) 
+						DIB_8BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+					else
+					    DIB_8BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color));
+
 					}
 				}		  
       break;