small optimze for StretchBlt now do only getpixel ones instead call hole time on getpixel for the color value when it stretch to biger BMP the hole stretchblt need to be optimze this code are geting it working bit faster and it is reference implementation 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 22:06:18 UTC (rev 15709) +++ trunk/reactos/subsys/win32k/dib/dib16bpp.c 2005-05-31 23:58:14 UTC (rev 15710) @@ -627,6 +627,8 @@
int DesY; int color; int zoomX; + int zoomY; + int count;
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, @@ -641,13 +643,16 @@ zoomX = DesSizeX / SrcSizeX; if (zoomX==0) zoomX=1;
+ zoomY = DesSizeY / SrcSizeY; + if (zoomY==0) zoomY=1; + switch(SourceSurf->iBitmapFormat) { case BMF_1BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -665,19 +670,25 @@ if (sx > SourceRect->right) break;
- if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0) + if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, 0)); + else + DIB_16BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, 0)); + } } else { - 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));
+ for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, 1)); + else + DIB_16BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, 1)); + } } } } @@ -687,7 +698,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -709,10 +720,13 @@
color = DIB_4BPP_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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_16BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + }
} } @@ -722,7 +736,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -742,10 +756,13 @@
color = DIB_8BPP_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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_16BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + }
} } @@ -755,7 +772,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -774,10 +791,13 @@ if (sx > SourceRect->right) break;
color = DIB_24BPP_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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_16BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + } } } break; @@ -786,7 +806,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -805,10 +825,13 @@ if (sx > SourceRect->right) break;
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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_16BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_16BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + } } } break; _____
Modified: trunk/reactos/subsys/win32k/dib/dib1bpp.c --- trunk/reactos/subsys/win32k/dib/dib1bpp.c 2005-05-31 22:06:18 UTC (rev 15709) +++ trunk/reactos/subsys/win32k/dib/dib1bpp.c 2005-05-31 23:58:14 UTC (rev 15710) @@ -495,6 +495,8 @@
int DesY; int color; int zoomX; + int zoomY; + int count;
SrcSizeY = SourceRect->bottom; SrcSizeX = SourceRect->right; @@ -505,14 +507,17 @@ zoomX = DesSizeX / SrcSizeX; if (zoomX==0) zoomX=1;
+ zoomY = DesSizeY / SrcSizeY; + if (zoomY==0) zoomY=1;
+ switch(SourceSurf->iBitmapFormat) { case BMF_1BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -534,11 +539,15 @@
color = DIB_1BPP_GetPixel(SourceSurf, sx, sy); - if (zoomX>1) - DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, color); - else - DIB_1BPP_PutPixel(DestSurf, DesX, DesY, color); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, count, color); + else + DIB_1BPP_PutPixel(DestSurf, DesX, count, color); } + + } } break;
@@ -546,7 +555,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -568,12 +577,14 @@
color = DIB_4BPP_GetPixel(SourceSurf, sx, sy); - 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)); - + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_1BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); } + } } break;
@@ -581,7 +592,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -601,12 +612,15 @@
color = DIB_8BPP_GetPixel(SourceSurf, sx, sy); - 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_1BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + }
- } + } } break;
@@ -614,7 +628,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -634,12 +648,15 @@
color = DIB_16BPP_GetPixel(SourceSurf, sx, sy); - 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_1BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + }
- } + } } break;
@@ -647,7 +664,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -667,19 +684,22 @@
color = DIB_24BPP_GetPixel(SourceSurf, sx, sy); - 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_1BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + }
- } + } } break; case BMF_32BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -699,11 +719,14 @@
color = DIB_32BPP_GetPixel(SourceSurf, sx, sy);
- 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_1BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_1BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); } + } } break;
_____
Modified: trunk/reactos/subsys/win32k/dib/dib24bpp.c --- trunk/reactos/subsys/win32k/dib/dib24bpp.c 2005-05-31 22:06:18 UTC (rev 15709) +++ trunk/reactos/subsys/win32k/dib/dib24bpp.c 2005-05-31 23:58:14 UTC (rev 15710) @@ -319,6 +319,8 @@
int DesY; int color; int zoomX; + int zoomY; + int count;
SrcSizeY = SourceRect->bottom; SrcSizeX = SourceRect->right; @@ -329,13 +331,16 @@ zoomX = DesSizeX / SrcSizeX; if (zoomX==0) zoomX=1;
+ zoomY = DesSizeY / SrcSizeY; + if (zoomY==0) zoomY=1; + switch(SourceSurf->iBitmapFormat) { case BMF_1BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -351,21 +356,25 @@ else sx = (int) ((ULONG) DesSizeX * (ULONG) DesX) / ((ULONG) SrcSizeX); - if (sx > SourceRect->right) break; - - if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0) + 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, 0)); + else + DIB_24BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, 0)); + } + + } else {
- } else { - 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, 1)); + else + DIB_24BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, 1)); + } } } } @@ -375,7 +384,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -394,11 +403,15 @@ if (sx > SourceRect->right) break;
color = DIB_4BPP_GetPixel(SourceSurf, sx, sy); - 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)); - } + + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_24BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + } + } } break;
@@ -406,7 +419,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -425,11 +438,16 @@ if (sx > SourceRect->right) break;
color = DIB_8BPP_GetPixel(SourceSurf, sx, sy); - 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)); + + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_24BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); } + + } } break;
@@ -437,7 +455,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -456,11 +474,16 @@ if (sx > SourceRect->right) break;
color = DIB_16BPP_GetPixel(SourceSurf, sx, sy); - 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)); + + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_24BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); } + + } } break;
@@ -468,7 +491,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -487,11 +510,16 @@ if (sx > SourceRect->right) break;
color = DIB_24BPP_GetPixel(SourceSurf, sx, sy); - if (zoomX>1) - DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, color); - else - DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color); + + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, count, color); + else + DIB_24BPP_PutPixel(DestSurf, DesX, count, color); } + + } } break;
@@ -499,7 +527,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -519,11 +547,14 @@
color = DIB_32BPP_GetPixel(SourceSurf, sx, sy); - 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_24BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_24BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); } + } } break;
_____
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c --- trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-05-31 22:06:18 UTC (rev 15709) +++ trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-05-31 23:58:14 UTC (rev 15710) @@ -561,6 +561,8 @@
int DesY; int color; int zoomX; + int zoomY; + int count;
DPRINT("DIB_32BPP_StretchBlt: Source BPP: %u, srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n", @@ -575,14 +577,17 @@
zoomX = DesSizeX / SrcSizeX; if (zoomX==0) zoomX=1; - + + zoomY = DesSizeY / SrcSizeY; + if (zoomY==0) zoomY=1; + switch(SourceSurf->iBitmapFormat) { case BMF_1BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -602,16 +607,23 @@
if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, 0)); + else + DIB_32BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, 0)); + } } else { - 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)); + + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, 1)); + else + DIB_32BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, 1)); + } } } } @@ -621,7 +633,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -644,10 +656,13 @@
color = DIB_4BPP_GetPixel(SourceSurf, sx, sy); - 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_32BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + }
} } @@ -657,7 +672,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -677,11 +692,16 @@
color = DIB_8BPP_GetPixel(SourceSurf, sx, sy);
- 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_32BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); } + + + } } break;
@@ -689,7 +709,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -708,11 +728,15 @@ if (sx > SourceRect->right) break;
color = DIB_16BPP_GetPixel(SourceSurf, sx, sy); - 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)); - } + + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_32BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + } + } } break;
@@ -720,7 +744,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -739,11 +763,16 @@ if (sx > SourceRect->right) break;
color = DIB_24BPP_GetPixel(SourceSurf, sx, sy); - 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)); - } + + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_32BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_32BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + } + + } } break;
_____
Modified: trunk/reactos/subsys/win32k/dib/dib4bpp.c --- trunk/reactos/subsys/win32k/dib/dib4bpp.c 2005-05-31 22:06:18 UTC (rev 15709) +++ trunk/reactos/subsys/win32k/dib/dib4bpp.c 2005-05-31 23:58:14 UTC (rev 15710) @@ -373,6 +373,9 @@
int DesY; int color; int zoomX; + int zoomY; + int count; +
SrcSizeY = SourceRect->bottom; SrcSizeX = SourceRect->right; @@ -383,13 +386,16 @@ zoomX = DesSizeX / SrcSizeX; if (zoomX==0) zoomX=1;
+ zoomY = DesSizeY / SrcSizeY; + if (zoomY==0) zoomY=1; + switch(SourceSurf->iBitmapFormat) { case BMF_1BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -407,19 +413,25 @@ if (sx > SourceRect->right) break;
- if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0) + if(DIB_1BPP_GetPixel(SourceSurf, sx, sy) == 0) { - 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, 0)); + else + DIB_4BPP_PutPixel(DestSurf, DesX, count, 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)); + } else {
+ for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, 1)); + else + DIB_4BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, 1)); + } } } } @@ -429,7 +441,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -451,12 +463,15 @@
color = DIB_4BPP_GetPixel(SourceSurf, sx, sy); - if (zoomX>1) - DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, DesY, color); - else - DIB_4BPP_PutPixel(DestSurf, DesX, DesY, color); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, count, color); + else + DIB_4BPP_PutPixel(DestSurf, DesX, count, color); + }
- } + } } break;
@@ -464,7 +479,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -497,7 +512,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -517,12 +532,15 @@
color = DIB_16BPP_GetPixel(SourceSurf, sx, sy);
- 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_4BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + }
- } + } } break;
@@ -530,7 +548,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -550,12 +568,15 @@
color = DIB_24BPP_GetPixel(SourceSurf, sx, sy); - 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)); + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_4BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + }
- } + } } break;
@@ -563,7 +584,7 @@ /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); @@ -583,12 +604,14 @@
color = DIB_32BPP_GetPixel(SourceSurf, sx, sy); - 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)); - + for (count=DesY;count<DesY+zoomY;count++) + { + if (zoomX>1) + DIB_4BPP_HLine(DestSurf, DesX, DesX + zoomX, count, XLATEOBJ_iXlate(ColorTranslation, color)); + else + DIB_4BPP_PutPixel(DestSurf, DesX, count, XLATEOBJ_iXlate(ColorTranslation, color)); } + } } break;
_____
Modified: trunk/reactos/subsys/win32k/dib/dib8bpp.c --- trunk/reactos/subsys/win32k/dib/dib8bpp.c 2005-05-31 22:06:18 UTC (rev 15709) +++ trunk/reactos/subsys/win32k/dib/dib8bpp.c 2005-05-31 23:58:14 UTC (rev 15710) @@ -551,6 +551,8 @@
int DesY; int color; int zoomX; + int zoomY; + int count;
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, @@ -565,13 +567,16 @@ zoomX = DesSizeX / SrcSizeX; if (zoomX==0) zoomX=1;
+ zoomY = DesSizeY / SrcSizeY; + if (zoomY==0) zoomY=1; + switch(SourceSurf->iBitmapFormat) { case BMF_1BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DestRect->bottom; DesY++) + for (DesY=0; DesY<DestRect->bottom; DesY+=zoomY) { if (DesSizeY>SrcSizeY) sy = (int) ((ULONG) SrcSizeY * (ULONG) DesY) / ((ULONG) DesSizeY); [truncated at 1000 lines; 149 more skipped]