From 7059620a5e1692a02e5b8442af3f5819b0622f33 Mon Sep 17 00:00:00 2001 From: Gregor Schneider Date: Fri, 30 Jan 2009 20:02:58 +0000 Subject: [PATCH] Unify identical StretchBlt implementations in preparation of partial ROP suppport. svn path=/trunk/; revision=39217 --- .../subsystems/win32/win32k/dib/dib16bpp.c | 165 +----------- reactos/subsystems/win32/win32k/dib/dib1bpp.c | 123 +-------- .../subsystems/win32/win32k/dib/dib24bpp.c | 240 ++---------------- .../subsystems/win32/win32k/dib/dib32bpp.c | 166 +----------- reactos/subsystems/win32/win32k/dib/dib4bpp.c | 131 +--------- reactos/subsystems/win32/win32k/dib/dib8bpp.c | 160 +----------- 6 files changed, 79 insertions(+), 906 deletions(-) diff --git a/reactos/subsystems/win32/win32k/dib/dib16bpp.c b/reactos/subsystems/win32/win32k/dib/dib16bpp.c index 09329eb9a5a..41fb7a549f8 100644 --- a/reactos/subsystems/win32/win32k/dib/dib16bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib16bpp.c @@ -781,13 +781,10 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, sy_max = DesSizeY; sy = SourceRect->top; - switch(SourceSurf->iBitmapFormat) + if (SourceSurf->iBitmapFormat != BMF_16BPP) { - - case BMF_1BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */ - for (DesY=DestRect->top; DesYbottom; DesY++) { sx = SourceRect->left; @@ -796,7 +793,8 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, for (DesX=DestRect->left; DesXright; DesX++) { color = XLATEOBJ_iXlate(ColorTranslation, - DIB_1BPP_GetPixel(SourceSurf, sx, sy)); + DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat]. + DIB_GetPixel(SourceSurf, sx, sy)); DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color); @@ -817,162 +815,13 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, sy_dec -= sy_max; } } - break; - - case BMF_4BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_4BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_8BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_8BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - - case BMF_24BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_24BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_32BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_32BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_16BPP: + } + else + { return ScaleRectAvg16(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin, BrushOrigin, ClipRegion, ColorTranslation, Mode); - break; - - default: - DPRINT1("DIB_16BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat)); - return FALSE; } - - - - return TRUE; + return TRUE; } BOOLEAN diff --git a/reactos/subsystems/win32/win32k/dib/dib1bpp.c b/reactos/subsystems/win32/win32k/dib/dib1bpp.c index 33a8901087f..0213fc9b277 100644 --- a/reactos/subsystems/win32/win32k/dib/dib1bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib1bpp.c @@ -516,118 +516,21 @@ BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, DesSizeY = DestRect->bottom - DestRect->top; DesSizeX = DestRect->right - DestRect->left; - switch(SourceSurf->iBitmapFormat) - { - case BMF_1BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ + /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ + /* This is a reference implementation, it hasn't been optimized for speed */ + for (DesY=DestRect->top; DesYbottom; DesY++) + { + sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - - color = DIB_1BPP_GetPixel(SourceSurf, sx, sy); - DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - - break; - - case BMF_4BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_4BPP_GetPixel(SourceSurf, sx, sy); - DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - break; - - case BMF_8BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_8BPP_GetPixel(SourceSurf, sx, sy); - DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - break; - - case BMF_16BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_16BPP_GetPixel(SourceSurf, sx, sy); - DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - break; - - case BMF_24BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_24BPP_GetPixel(SourceSurf, sx, sy); - DIB_1BPP_PutPixel(DestSurf, DesX, DesY, 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=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_32BPP_GetPixel(SourceSurf, sx, sy); - DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - break; - - default: - DPRINT1("DIB_1BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat)); - return FALSE; + for (DesX=DestRect->left; DesXright; DesX++) + { + sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; + color = DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat]. + DIB_GetPixel(SourceSurf, sx, sy); + DIB_1BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); + } } - - return TRUE; + return TRUE; } BOOLEAN diff --git a/reactos/subsystems/win32/win32k/dib/dib24bpp.c b/reactos/subsystems/win32/win32k/dib/dib24bpp.c index acfc460946d..d2821a78470 100644 --- a/reactos/subsystems/win32/win32k/dib/dib24bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib24bpp.c @@ -459,225 +459,39 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, sy_max = DesSizeY; sy = SourceRect->top; - switch(SourceSurf->iBitmapFormat) - { - case BMF_1BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ + /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ + /* This is a reference implementation, it hasn't been optimized for speed */ + for (DesY=DestRect->top; DesYbottom; DesY++) + { + sx = SourceRect->left; + sx_dec = 0; - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; + for (DesX=DestRect->left; DesXright; DesX++) + { + color = XLATEOBJ_iXlate(ColorTranslation, + DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat]. + DIB_GetPixel(SourceSurf, sx, sy)); - for (DesX=DestRect->left; DesXright; DesX++) + DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color); + + sx += SrcZoomXHight; + sx_dec += SrcZoomXLow; + if (sx_dec >= sx_max) { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_1BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } + sx++; + sx_dec -= sx_max; } + } - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - - break; - - case BMF_4BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_4BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_8BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_8BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_16BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_16BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_24BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_24BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_32BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_32BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_24BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - default: - DPRINT1("DIB_24BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat)); - return FALSE; + sy += SrcZoomYHight; + sy_dec += SrcZoomYLow; + if (sy_dec >= sy_max) + { + sy++; + sy_dec -= sy_max; + } } - - return TRUE; + return TRUE; } BOOLEAN diff --git a/reactos/subsystems/win32/win32k/dib/dib32bpp.c b/reactos/subsystems/win32/win32k/dib/dib32bpp.c index 879c2cf89d4..cf6850ddec5 100644 --- a/reactos/subsystems/win32/win32k/dib/dib32bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib32bpp.c @@ -539,9 +539,8 @@ BOOLEAN DIB_32BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, DifflDelta = DestSurf->lDelta - (DesSizeX << 2); - switch(SourceSurf->iBitmapFormat) + if (SourceSurf->iBitmapFormat != BMF_32BPP) { - case BMF_1BPP: /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ /* This is a reference implementation, it hasn't been optimized for speed */ for (DesY=0; DesYiBitmapFormat]. + DIB_GetPixel(SourceSurf, sx, sy)); DestBits = (PULONG)((ULONG_PTR)DestBits + 4); @@ -574,165 +574,13 @@ BOOLEAN DIB_32BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, sy_dec -= sy_max; } } - break; - - case BMF_4BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=0; DesYleft; - sx_dec = 0; - for (DesX=0; DesX= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta); - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_8BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=0; DesYleft; - sx_dec = 0; - for (DesX=0; DesX= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta); - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_16BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=0; DesYleft; - sx_dec = 0; - for (DesX=0; DesX= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta); - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_24BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=0; DesYleft; - sx_dec = 0; - for (DesX=0; DesX= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta); - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_32BPP: + } + else + { return ScaleRectAvg32(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin, BrushOrigin, ClipRegion, ColorTranslation, Mode); - break; - - default: - DPRINT1("DIB_32BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat)); - return FALSE; } - - - - return TRUE; + return TRUE; } BOOLEAN diff --git a/reactos/subsystems/win32/win32k/dib/dib4bpp.c b/reactos/subsystems/win32/win32k/dib/dib4bpp.c index 0f5ac60fdc7..835fed6dea1 100644 --- a/reactos/subsystems/win32/win32k/dib/dib4bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib4bpp.c @@ -397,124 +397,21 @@ BOOLEAN DIB_4BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, DesSizeY = DestRect->bottom - DestRect->top; DesSizeX = DestRect->right - DestRect->left; - switch(SourceSurf->iBitmapFormat) - { - case BMF_1BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ + /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ + /* This is a reference implementation, it hasn't been optimized for speed */ + for (DesY=DestRect->top; DesYbottom; DesY++) + { + sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - - 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)); - } - } - } - - break; - - case BMF_4BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_4BPP_GetPixel(SourceSurf, sx, sy); - DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - break; - - case BMF_8BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_8BPP_GetPixel(SourceSurf, sx, sy); - DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - break; - - case BMF_16BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_16BPP_GetPixel(SourceSurf, sx, sy); - DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - break; - - case BMF_24BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_24BPP_GetPixel(SourceSurf, sx, sy); - DIB_4BPP_PutPixel(DestSurf, DesX, DesY, 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=DestRect->top; DesYbottom; DesY++) - { - sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top; - - for (DesX=DestRect->left; DesXright; DesX++) - { - sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; - color = DIB_32BPP_GetPixel(SourceSurf, sx, sy); - DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); - } - } - break; - - default: - DPRINT1("DIB_4BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat)); - return FALSE; - } - - return TRUE; + for (DesX=DestRect->left; DesXright; DesX++) + { + sx = (((DesX - DestRect->left) * SrcSizeX) / DesSizeX) + SourceRect->left; + color = DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat]. + DIB_GetPixel(SourceSurf, sx, sy); + DIB_4BPP_PutPixel(DestSurf, DesX, DesY, XLATEOBJ_iXlate(ColorTranslation, color)); + } + } + return TRUE; } BOOLEAN diff --git a/reactos/subsystems/win32/win32k/dib/dib8bpp.c b/reactos/subsystems/win32/win32k/dib/dib8bpp.c index 66ba47e26bf..09edfb62887 100644 --- a/reactos/subsystems/win32/win32k/dib/dib8bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib8bpp.c @@ -517,11 +517,10 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, sy_max = DesSizeY; sy = SourceRect->top; - switch(SourceSurf->iBitmapFormat) + if (SourceSurf->iBitmapFormat != BMF_8BPP) { - case BMF_1BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ + /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ + /* This is a reference implementation, it hasn't been optimized for speed */ for (DesY=DestRect->top; DesYbottom; DesY++) { sx = SourceRect->left; @@ -529,7 +528,8 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, for (DesX=DestRect->left; DesXright; DesX++) { color = XLATEOBJ_iXlate(ColorTranslation, - DIB_1BPP_GetPixel(SourceSurf, sx, sy)); + DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat]. + DIB_GetPixel(SourceSurf, sx, sy)); DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color); @@ -550,151 +550,13 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, sy_dec -= sy_max; } } - break; - - case BMF_4BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_4BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_8BPP: - return ScaleRectAvg8(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin, BrushOrigin, - ClipRegion, ColorTranslation, Mode); - break; - - case BMF_16BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_16BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_24BPP: - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_24BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - case BMF_32BPP: - /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */ - /* This is a reference implementation, it hasn't been optimized for speed */ - for (DesY=DestRect->top; DesYbottom; DesY++) - { - sx = SourceRect->left; - sx_dec = 0; - for (DesX=DestRect->left; DesXright; DesX++) - { - color = XLATEOBJ_iXlate(ColorTranslation, - DIB_32BPP_GetPixel(SourceSurf, sx, sy)); - - DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color); - - sx += SrcZoomXHight; - sx_dec += SrcZoomXLow; - if (sx_dec >= sx_max) - { - sx++; - sx_dec -= sx_max; - } - } - - sy += SrcZoomYHight; - sy_dec += SrcZoomYLow; - if (sy_dec >= sy_max) - { - sy++; - sy_dec -= sy_max; - } - } - break; - - - - default: - DPRINT1("DIB_8BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat)); - return FALSE; } - - return TRUE; + else + { + return ScaleRectAvg8(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin, BrushOrigin, + ClipRegion, ColorTranslation, Mode); + } + return TRUE; } BOOLEAN