Author: gschneider
Date: Sat Jan 31 09:38:16 2009
New Revision: 39241
URL:
http://svn.reactos.org/svn/reactos?rev=39241&view=rev
Log:
Remove dead StretchBlt code
Modified:
trunk/reactos/subsystems/win32/win32k/dib/dib16bpp.c
trunk/reactos/subsystems/win32/win32k/dib/dib1bpp.c
trunk/reactos/subsystems/win32/win32k/dib/dib24bpp.c
trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c
trunk/reactos/subsystems/win32/win32k/dib/dib4bpp.c
trunk/reactos/subsystems/win32/win32k/dib/dib8bpp.c
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib16bpp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/di…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib16bpp.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib16bpp.c [iso-8859-1] Sat Jan 31 09:38:16
2009
@@ -452,377 +452,6 @@
#endif
return TRUE;
}
-/*
-=======================================
- Stretching functions goes below
- Some parts of code are based on an
- article "Bresenhame image scaling"
- Dr. Dobb Journal, May 2002
-=======================================
-*/
-
-typedef unsigned short PIXEL;
-
-/* 16-bit HiColor (565 format) */
-__inline PIXEL average16(PIXEL a, PIXEL b)
-{
-// This one should be correct, but it's too long
-/*
- unsigned char r1, g1, b1, r2, g2, b2, rr, gr, br;
- unsigned short res;
-
- r1 = (a & 0xF800) >> 11;
- g1 = (a & 0x7E0) >> 5;
- b1 = (a & 0x1F);
-
- r2 = (b & 0xF800) >> 11;
- g2 = (b & 0x7E0) >> 5;
- b2 = (b & 0x1F);
-
- rr = (r1+r2) / 2;
- gr = (g1+g2) / 2;
- br = (b1+b2) / 2;
-
- res = (rr << 11) + (gr << 5) + br;
-
- return res;
-*/
- // This one is the short form of the correct one, but does not work for QEMU (expects
555 format)
- //return (((a ^ b) & 0xf7deU) >> 1) + (a & b);
-
- //hack until short version works properly
- return a;
-}
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-void ScaleLineAvg16(PIXEL *Target, PIXEL *Source, int SrcWidth, int TgtWidth)
-{
- int NumPixels = TgtWidth;
- int IntPart = SrcWidth / TgtWidth;
- int FractPart = SrcWidth % TgtWidth;
- int Mid = TgtWidth >> 1;
- int E = 0;
- int skip;
- PIXEL p;
-
- skip = (TgtWidth < SrcWidth) ? 0 : (TgtWidth / (2*SrcWidth) + 1);
- NumPixels -= skip;
-
- while (NumPixels-- > 0)
- {
- p = *Source;
- if (E >= Mid)
- {
- p = average16(p, *(Source+1));
- }
- *Target++ = p;
- Source += IntPart;
- E += FractPart;
- if (E >= TgtWidth)
- {
- E -= TgtWidth;
- Source++;
- }
- }
- while (skip-- > 0)
- {
- *Target++ = *Source;
- }
-}
-
-static BOOLEAN
-FinalCopy16(PIXEL *Target, PIXEL *Source, PSPAN ClipSpans, UINT ClipSpansCount, UINT
*SpanIndex,
- UINT DestY, RECTL *DestRect)
-{
- LONG Left, Right;
-
- while ( ClipSpans[*SpanIndex].Y < DestY ||
- (ClipSpans[*SpanIndex].Y == DestY &&
- ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width <
DestRect->left))
- {
- (*SpanIndex)++;
- if (ClipSpansCount <= *SpanIndex)
- {
- /* No more spans, everything else is clipped away, we're done */
- return FALSE;
- }
- }
- while (ClipSpans[*SpanIndex].Y == DestY)
- {
- if (ClipSpans[*SpanIndex].X < DestRect->right)
- {
- Left = max(ClipSpans[*SpanIndex].X, DestRect->left);
-
- Right = min(ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width,
- DestRect->right);
-
- memcpy(Target + Left - DestRect->left, Source + Left - DestRect->left,
- (Right - Left) * sizeof(PIXEL));
- }
-
- (*SpanIndex)++;
-
- if (ClipSpansCount <= *SpanIndex)
- {
- /* No more spans, everything else is clipped away, we're done */
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-BOOLEAN ScaleRectAvg16(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
- int NumPixels = DestRect->bottom - DestRect->top;
-
- int IntPart = (((SourceRect->bottom - SourceRect->top) /
- (DestRect->bottom - DestRect->top)) * SourceSurf->lDelta)
>> 1;
-
- int FractPart = (SourceRect->bottom - SourceRect->top) %
- (DestRect->bottom - DestRect->top);
-
- int Mid = (DestRect->bottom - DestRect->top) >> 1;
- int E = 0;
- int skip;
- PIXEL *ScanLine, *ScanLineAhead;
- PIXEL *PrevSource = NULL;
- PIXEL *PrevSourceAhead = NULL;
-
- PIXEL *Target = (PIXEL *) ((PBYTE)DestSurf->pvScan0 + (DestRect->top *
- DestSurf->lDelta) + 2 * DestRect->left);
-
- PIXEL *Source = (PIXEL *) ((PBYTE)SourceSurf->pvScan0 + (SourceRect->top *
- SourceSurf->lDelta) + 2 * SourceRect->left);
-
- PSPAN ClipSpans;
- UINT ClipSpansCount;
- UINT SpanIndex;
- LONG DestY;
-
- if (! ClipobjToSpans(&ClipSpans, &ClipSpansCount, ClipRegion, DestRect))
- {
- return FALSE;
- }
- if (0 == ClipSpansCount)
- {
- /* No clip spans == empty clipping region, everything clipped away */
- ASSERT(NULL == ClipSpans);
- return TRUE;
- }
- skip = (DestRect->bottom - DestRect->top < SourceRect->bottom -
SourceRect->top)
- ? 0 : ((DestRect->bottom - DestRect->top) /
- (2 * (SourceRect->bottom - SourceRect->top)) + 1);
-
- NumPixels -= skip;
-
- ScanLine = (PIXEL*)ExAllocatePool(PagedPool, (DestRect->right - DestRect->left)
*
- sizeof(PIXEL));
-
- ScanLineAhead = (PIXEL *)ExAllocatePool(PagedPool, (DestRect->right -
- DestRect->left) * sizeof(PIXEL));
-
- if (!ScanLine || !ScanLineAhead)
- {
- if (ScanLine) ExFreePool(ScanLine);
- if (ScanLineAhead) ExFreePool(ScanLineAhead);
- return FALSE;
- }
-
- DestY = DestRect->top;
- SpanIndex = 0;
- while (NumPixels-- > 0)
- {
- if (Source != PrevSource)
- {
- if (Source == PrevSourceAhead)
- {
- /* the next scan line has already been scaled and stored in
- * ScanLineAhead; swap the buffers that ScanLine and ScanLineAhead
- * point to
- */
- PIXEL *tmp = ScanLine;
- ScanLine = ScanLineAhead;
- ScanLineAhead = tmp;
- }
- else
- {
- ScaleLineAvg16(ScanLine, Source, SourceRect->right -
SourceRect->left,
- DestRect->right - DestRect->left);
- }
- PrevSource = Source;
- }
-
- if (E >= Mid && PrevSourceAhead != (PIXEL *)((BYTE *)Source +
- SourceSurf->lDelta))
- {
- int x;
-
- ScaleLineAvg16(ScanLineAhead, (PIXEL *)((BYTE *)Source +
- SourceSurf->lDelta), SourceRect->right -
- SourceRect->left, DestRect->right - DestRect->left);
-
- for (x = 0; x < DestRect->right - DestRect->left; x++)
- {
- ScanLine[x] = average16(ScanLine[x], ScanLineAhead[x]);
- }
-
- PrevSourceAhead = (PIXEL *)((BYTE *)Source + SourceSurf->lDelta);
- }
-
- if (! FinalCopy16(Target, ScanLine, ClipSpans, ClipSpansCount, &SpanIndex,
DestY, DestRect))
- {
- /* No more spans, everything else is clipped away, we're done */
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
- return TRUE;
- }
-
- DestY++;
- Target = (PIXEL *)((BYTE *)Target + DestSurf->lDelta);
- Source += IntPart;
- E += FractPart;
-
- if (E >= DestRect->bottom - DestRect->top)
- {
- E -= DestRect->bottom - DestRect->top;
- Source = (PIXEL *)((BYTE *)Source + SourceSurf->lDelta);
- }
- } /* while */
-
- if (skip > 0 && Source != PrevSource)
- {
- ScaleLineAvg16(ScanLine, Source, SourceRect->right - SourceRect->left,
- DestRect->right - DestRect->left);
- }
-
- while (skip-- > 0)
- {
- if (! FinalCopy16(Target, ScanLine, ClipSpans, ClipSpansCount, &SpanIndex,
- DestY, DestRect))
- {
- /* No more spans, everything else is clipped away, we're done */
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
- return TRUE;
- }
- DestY++;
- Target = (PIXEL *)((BYTE *)Target + DestSurf->lDelta);
- }
-
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
-
- return TRUE;
-}
-
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
- LONG SrcSizeY;
- LONG SrcSizeX;
- LONG DesSizeY;
- LONG DesSizeX;
- LONG sx = 0;
- LONG sy = 0;
- LONG DesX;
- LONG DesY;
-
- LONG SrcZoomXHight;
- LONG SrcZoomXLow;
- LONG SrcZoomYHight;
- LONG SrcZoomYLow;
-
- LONG sy_dec = 0;
- LONG sy_max;
-
- LONG sx_dec = 0;
- LONG sx_max;
- ULONG color;
-
- 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);
-
- /* Calc the Zoom height of Source */
- SrcSizeY = SourceRect->bottom - SourceRect->top;
-
- /* Calc the Zoom Width of Source */
- SrcSizeX = SourceRect->right - SourceRect->left;
-
- /* Calc the Zoom height of Destinations */
- DesSizeY = DestRect->bottom - DestRect->top;
-
- /* Calc the Zoom width of Destinations */
- DesSizeX = DestRect->right - DestRect->left;
-
- /* Calc the zoom factor of source height */
- SrcZoomYHight = SrcSizeY / DesSizeY;
- SrcZoomYLow = SrcSizeY - (SrcZoomYHight * DesSizeY);
-
- /* Calc the zoom factor of source width */
- SrcZoomXHight = SrcSizeX / DesSizeX;
- SrcZoomXLow = SrcSizeX - (SrcZoomXHight * DesSizeX);
-
- sx_max = DesSizeX;
- sy_max = DesSizeY;
- sy = SourceRect->top;
-
- if (SourceSurf->iBitmapFormat != BMF_16BPP)
- {
- /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
- /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=DestRect->top; DesY<DestRect->bottom; DesY++)
- {
- sx = SourceRect->left;
- sx_dec = 0;
-
- for (DesX=DestRect->left; DesX<DestRect->right; DesX++)
- {
- color = XLATEOBJ_iXlate(ColorTranslation,
- DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat].
- DIB_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;
- }
- }
- }
- else
- {
- return ScaleRectAvg16(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin,
BrushOrigin,
- ClipRegion, ColorTranslation, Mode);
- }
- return TRUE;
-}
BOOLEAN
DIB_16BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib1bpp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/di…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib1bpp.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib1bpp.c [iso-8859-1] Sat Jan 31 09:38:16
2009
@@ -492,47 +492,6 @@
return TRUE;
}
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-
-BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
- LONG SrcSizeY;
- LONG SrcSizeX;
- LONG DesSizeY;
- LONG DesSizeX;
- LONG sx;
- LONG sy;
- LONG DesX;
- LONG DesY;
- LONG color;
-
- SrcSizeY = SourceRect->bottom - SourceRect->top;
- SrcSizeX = SourceRect->right - SourceRect->left;
-
- DesSizeY = DestRect->bottom - DestRect->top;
- DesSizeX = DestRect->right - DestRect->left;
-
- /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
- /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=DestRect->top; DesY<DestRect->bottom; DesY++)
- {
- sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top;
-
- for (DesX=DestRect->left; DesX<DestRect->right; 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;
-}
-
BOOLEAN
DIB_1BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
RECTL* DestRect, POINTL *SourcePoint,
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib24bpp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/di…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib24bpp.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib24bpp.c [iso-8859-1] Sat Jan 31 09:38:16
2009
@@ -403,97 +403,6 @@
return TRUE;
}
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
- LONG SrcSizeY;
- LONG SrcSizeX;
- LONG DesSizeY;
- LONG DesSizeX;
- LONG sx = 0;
- LONG sy = 0;
- LONG DesX;
- LONG DesY;
-
- LONG SrcZoomXHight;
- LONG SrcZoomXLow;
- LONG SrcZoomYHight;
- LONG SrcZoomYLow;
-
- LONG sy_dec = 0;
- LONG sy_max;
-
- LONG sx_dec = 0;
- LONG sx_max;
- ULONG color;
-
- DPRINT("DIB_24BPP_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);
-
- /* Calc the Zoom height of Source */
- SrcSizeY = SourceRect->bottom - SourceRect->top;
-
- /* Calc the Zoom Width of Source */
- SrcSizeX = SourceRect->right - SourceRect->left;
-
- /* Calc the Zoom height of Destinations */
- DesSizeY = DestRect->bottom - DestRect->top;
-
- /* Calc the Zoom width of Destinations */
- DesSizeX = DestRect->right - DestRect->left;
-
- /* Calc the zoom factor of source height */
- SrcZoomYHight = SrcSizeY / DesSizeY;
- SrcZoomYLow = SrcSizeY - (SrcZoomYHight * DesSizeY);
-
- /* Calc the zoom factor of source width */
- SrcZoomXHight = SrcSizeX / DesSizeX;
- SrcZoomXLow = SrcSizeX - (SrcZoomXHight * DesSizeX);
-
- sx_max = DesSizeX;
- sy_max = DesSizeY;
- sy = SourceRect->top;
-
- /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
- /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=DestRect->top; DesY<DestRect->bottom; DesY++)
- {
- sx = SourceRect->left;
- sx_dec = 0;
-
- for (DesX=DestRect->left; DesX<DestRect->right; DesX++)
- {
- color = XLATEOBJ_iXlate(ColorTranslation,
- DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat].
- DIB_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;
- }
- }
- return TRUE;
-}
-
BOOLEAN
DIB_24BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
RECTL* DestRect, POINTL *SourcePoint,
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/di…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c [iso-8859-1] Sat Jan 31 09:38:16
2009
@@ -277,312 +277,6 @@
return TRUE;
}
-
-/*
-=======================================
- Stretching functions goes below
- Some parts of code are based on an
- article "Bresenhame image scaling"
- Dr. Dobb Journal, May 2002
-=======================================
-*/
-
-typedef unsigned long PIXEL;
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-
-/* 32-bit Color (___ format) */
-__inline PIXEL average32(PIXEL a, PIXEL b)
-{
- return a; // FIXME: Temp hack to remove "PCB-effect" from the image
-}
-
-void ScaleLineAvg32(PIXEL *Target, PIXEL *Source, int SrcWidth, int TgtWidth)
-{
- int NumPixels = TgtWidth;
- int IntPart = SrcWidth / TgtWidth;
- int FractPart = SrcWidth % TgtWidth;
- int Mid = TgtWidth >> 1;
- int E = 0;
- int skip;
- PIXEL p;
-
- skip = (TgtWidth < SrcWidth) ? 0 : (TgtWidth / (2*SrcWidth) + 1);
- NumPixels -= skip;
-
- while (NumPixels-- > 0) {
- p = *Source;
- if (E >= Mid)
- p = average32(p, *(Source+1));
- *Target++ = p;
- Source += IntPart;
- E += FractPart;
- if (E >= TgtWidth) {
- E -= TgtWidth;
- Source++;
- } /* if */
- } /* while */
- while (skip-- > 0)
- *Target++ = *Source;
-}
-
-static BOOLEAN
-FinalCopy32(PIXEL *Target, PIXEL *Source, PSPAN ClipSpans, UINT ClipSpansCount, UINT
*SpanIndex,
- UINT DestY, RECTL *DestRect)
-{
- LONG Left, Right;
-
- while (ClipSpans[*SpanIndex].Y < DestY
- || (ClipSpans[*SpanIndex].Y == DestY
- && ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width <
DestRect->left))
- {
- (*SpanIndex)++;
- if (ClipSpansCount <= *SpanIndex)
- {
- /* No more spans, everything else is clipped away, we're done */
- return FALSE;
- }
- }
- while (ClipSpans[*SpanIndex].Y == DestY)
- {
- if (ClipSpans[*SpanIndex].X < DestRect->right)
- {
- Left = max(ClipSpans[*SpanIndex].X, DestRect->left);
- Right = min(ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width,
DestRect->right);
- memcpy(Target + Left - DestRect->left, Source + Left - DestRect->left,
- (Right - Left) * sizeof(PIXEL));
- }
- (*SpanIndex)++;
- if (ClipSpansCount <= *SpanIndex)
- {
- /* No more spans, everything else is clipped away, we're done */
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-BOOLEAN ScaleRectAvg32(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
- int NumPixels = DestRect->bottom - DestRect->top;
- int IntPart = (((SourceRect->bottom - SourceRect->top) / (DestRect->bottom -
DestRect->top)) * SourceSurf->lDelta) / 4;
- int FractPart = (SourceRect->bottom - SourceRect->top) % (DestRect->bottom -
DestRect->top);
- int Mid = (DestRect->bottom - DestRect->top) >> 1;
- int E = 0;
- int skip;
- PIXEL *ScanLine, *ScanLineAhead;
- PIXEL *PrevSource = NULL;
- PIXEL *PrevSourceAhead = NULL;
- PIXEL *Target = (PIXEL *) ((PBYTE)DestSurf->pvScan0 + (DestRect->top *
DestSurf->lDelta) + 4 * DestRect->left);
- PIXEL *Source = (PIXEL *) ((PBYTE)SourceSurf->pvScan0 + (SourceRect->top *
SourceSurf->lDelta) + 4 * SourceRect->left);
- PSPAN ClipSpans;
- UINT ClipSpansCount;
- UINT SpanIndex;
- LONG DestY;
-
- if (! ClipobjToSpans(&ClipSpans, &ClipSpansCount, ClipRegion, DestRect))
- {
- return FALSE;
- }
- if (0 == ClipSpansCount)
- {
- /* No clip spans == empty clipping region, everything clipped away */
- ASSERT(NULL == ClipSpans);
- return TRUE;
- }
- skip = (DestRect->bottom - DestRect->top < SourceRect->bottom -
SourceRect->top) ? 0 : ((DestRect->bottom - DestRect->top) / (2 *
(SourceRect->bottom - SourceRect->top)) + 1);
- NumPixels -= skip;
-
- ScanLine = (PIXEL*)ExAllocatePool(PagedPool, (DestRect->right - DestRect->left) *
sizeof(PIXEL));
- ScanLineAhead = (PIXEL *)ExAllocatePool(PagedPool, (DestRect->right -
DestRect->left) * sizeof(PIXEL));
-
- if (!ScanLine || !ScanLineAhead)
- {
- if (ScanLine) ExFreePool(ScanLine);
- if (ScanLineAhead) ExFreePool(ScanLineAhead);
- return FALSE;
- }
-
- DestY = DestRect->top;
- SpanIndex = 0;
- while (NumPixels-- > 0) {
- if (Source != PrevSource) {
- if (Source == PrevSourceAhead) {
- /* the next scan line has already been scaled and stored in
- * ScanLineAhead; swap the buffers that ScanLine and ScanLineAhead
- * point to
- */
- PIXEL *tmp = ScanLine;
- ScanLine = ScanLineAhead;
- ScanLineAhead = tmp;
- } else {
- ScaleLineAvg32(ScanLine, Source, SourceRect->right - SourceRect->left,
DestRect->right - DestRect->left);
- } /* if */
- PrevSource = Source;
- } /* if */
-
- if (E >= Mid && PrevSourceAhead != (PIXEL *)((BYTE *)Source +
SourceSurf->lDelta)) {
- int x;
- ScaleLineAvg32(ScanLineAhead, (PIXEL *)((BYTE *)Source + SourceSurf->lDelta),
SourceRect->right - SourceRect->left, DestRect->right - DestRect->left);
- for (x = 0; x < DestRect->right - DestRect->left; x++)
- ScanLine[x] = average32(ScanLine[x], ScanLineAhead[x]);
- PrevSourceAhead = (PIXEL *)((BYTE *)Source + SourceSurf->lDelta);
- } /* if */
-
- if (! FinalCopy32(Target, ScanLine, ClipSpans, ClipSpansCount, &SpanIndex, DestY,
DestRect))
- {
- /* No more spans, everything else is clipped away, we're done */
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
- return TRUE;
- }
- DestY++;
- Target = (PIXEL *)((BYTE *)Target + DestSurf->lDelta);
- Source += IntPart;
- E += FractPart;
- if (E >= DestRect->bottom - DestRect->top) {
- E -= DestRect->bottom - DestRect->top;
- Source = (PIXEL *)((BYTE *)Source + SourceSurf->lDelta);
- } /* if */
- } /* while */
-
- if (skip > 0 && Source != PrevSource)
- ScaleLineAvg32(ScanLine, Source, SourceRect->right - SourceRect->left,
DestRect->right - DestRect->left);
- while (skip-- > 0) {
- if (! FinalCopy32(Target, ScanLine, ClipSpans, ClipSpansCount, &SpanIndex, DestY,
DestRect))
- {
- /* No more spans, everything else is clipped away, we're done */
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
- return TRUE;
- }
- DestY++;
- Target = (PIXEL *)((BYTE *)Target + DestSurf->lDelta);
- } /* while */
-
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
-
- return TRUE;
-}
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-BOOLEAN DIB_32BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
-
- LONG SrcSizeY;
- LONG SrcSizeX;
- LONG DesSizeY;
- LONG DesSizeX;
- LONG sx = 0;
- LONG sy = 0;
- LONG DesX;
- LONG DesY;
- PULONG DestBits;
- LONG DifflDelta;
-
- LONG SrcZoomXHight;
- LONG SrcZoomXLow;
- LONG SrcZoomYHight;
- LONG SrcZoomYLow;
-
- LONG sy_dec = 0;
- LONG sy_max;
-
- LONG sx_dec = 0;
- LONG sx_max;
-
-
- 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, DestRect->left, DestRect->top,
DestRect->right, DestRect->bottom);
-
- /* Calc the Zoom height of Source */
- SrcSizeY = SourceRect->bottom - SourceRect->top;
-
- /* Calc the Zoom Width of Source */
- SrcSizeX = SourceRect->right - SourceRect->left;
-
- /* Calc the Zoom height of Destinations */
- DesSizeY = DestRect->bottom - DestRect->top;
-
- /* Calc the Zoom width of Destinations */
- DesSizeX = DestRect->right - DestRect->left;
-
- /* Calc the zoom factor of source height */
- SrcZoomYHight = SrcSizeY / DesSizeY;
- SrcZoomYLow = SrcSizeY - (SrcZoomYHight * DesSizeY);
-
- /* Calc the zoom factor of source width */
- SrcZoomXHight = SrcSizeX / DesSizeX;
- SrcZoomXLow = SrcSizeX - (SrcZoomXHight * DesSizeX);
-
- sx_max = DesSizeX;
- sy_max = DesSizeY;
- sy = SourceRect->top;
-
- DestBits = (PULONG)((PBYTE)DestSurf->pvScan0 + (DestRect->left << 2) +
- DestRect->top * DestSurf->lDelta);
-
- DifflDelta = DestSurf->lDelta - (DesSizeX << 2);
-
- if (SourceSurf->iBitmapFormat != BMF_32BPP)
- {
- /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
- /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=0; DesY<DesSizeY; DesY++)
- {
- sx = SourceRect->left;
- sx_dec = 0;
- for (DesX=0; DesX<DesSizeX; DesX++)
- {
- *DestBits = XLATEOBJ_iXlate(ColorTranslation,
-
DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat].
- DIB_GetPixel(SourceSurf, sx, sy));
-
- DestBits = (PULONG)((ULONG_PTR)DestBits + 4);
-
- sx += SrcZoomXHight;
- sx_dec += SrcZoomXLow;
- if (sx_dec >= 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;
- }
- }
- }
- else
- {
- return ScaleRectAvg32(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin,
BrushOrigin,
- ClipRegion, ColorTranslation, Mode);
- }
- return TRUE;
-}
-
BOOLEAN
DIB_32BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
RECTL* DestRect, POINTL *SourcePoint,
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib4bpp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/di…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib4bpp.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib4bpp.c [iso-8859-1] Sat Jan 31 09:38:16
2009
@@ -374,46 +374,6 @@
return TRUE;
}
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-BOOLEAN DIB_4BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
- LONG SrcSizeY;
- LONG SrcSizeX;
- LONG DesSizeY;
- LONG DesSizeX;
- LONG sx;
- LONG sy;
- LONG DesX;
- LONG DesY;
- LONG color;
-
- SrcSizeY = SourceRect->bottom - SourceRect->top;
- SrcSizeX = SourceRect->right - SourceRect->left;
-
- DesSizeY = DestRect->bottom - DestRect->top;
- DesSizeX = DestRect->right - DestRect->left;
-
- /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
- /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=DestRect->top; DesY<DestRect->bottom; DesY++)
- {
- sy = (((DesY - DestRect->top) * SrcSizeY) / DesSizeY) + SourceRect->top;
-
- for (DesX=DestRect->left; DesX<DestRect->right; 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
DIB_4BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
RECTL* DestRect, POINTL *SourcePoint,
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib8bpp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/di…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/dib/dib8bpp.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/dib/dib8bpp.c [iso-8859-1] Sat Jan 31 09:38:16
2009
@@ -264,300 +264,7 @@
return TRUE;
}
-/*
-=======================================
- Stretching functions goes below
- Some parts of code are based on an
- article "Bresenhame image scaling"
- Dr. Dobb Journal, May 2002
-=======================================
-*/
-
-typedef unsigned char PIXEL;
-
-/* 16-bit HiColor (565 format) */
-__inline PIXEL average8(PIXEL a, PIXEL b)
-{
- return a; // FIXME: Depend on SetStretchMode
-}
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-void ScaleLineAvg8(PIXEL *Target, PIXEL *Source, int SrcWidth, int TgtWidth)
-{
- int NumPixels = TgtWidth;
- int IntPart = SrcWidth / TgtWidth;
- int FractPart = SrcWidth % TgtWidth;
- int Mid = TgtWidth >> 1;
- int E = 0;
- int skip;
- PIXEL p;
-
- skip = (TgtWidth < SrcWidth) ? 0 : (TgtWidth / (2*SrcWidth) + 1);
- NumPixels -= skip;
-
- while (NumPixels-- > 0) {
- p = *Source;
- if (E >= Mid)
- p = average8(p, *(Source+1));
- *Target++ = p;
- Source += IntPart;
- E += FractPart;
- if (E >= TgtWidth) {
- E -= TgtWidth;
- Source++;
- } /* if */
- } /* while */
- while (skip-- > 0)
- *Target++ = *Source;
-}
-
-static BOOLEAN
-FinalCopy8(PIXEL *Target, PIXEL *Source, PSPAN ClipSpans, UINT ClipSpansCount, UINT
*SpanIndex,
- UINT DestY, RECTL *DestRect)
-{
- LONG Left, Right;
-
- while (ClipSpans[*SpanIndex].Y < DestY
- || (ClipSpans[*SpanIndex].Y == DestY
- && ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width <
DestRect->left))
- {
- (*SpanIndex)++;
- if (ClipSpansCount <= *SpanIndex)
- {
- /* No more spans, everything else is clipped away, we're done */
- return FALSE;
- }
- }
- while (ClipSpans[*SpanIndex].Y == DestY)
- {
- if (ClipSpans[*SpanIndex].X < DestRect->right)
- {
- Left = max(ClipSpans[*SpanIndex].X, DestRect->left);
- Right = min(ClipSpans[*SpanIndex].X + ClipSpans[*SpanIndex].Width,
DestRect->right);
- memcpy(Target + Left - DestRect->left, Source + Left - DestRect->left,
- (Right - Left) * sizeof(PIXEL));
- }
- (*SpanIndex)++;
- if (ClipSpansCount <= *SpanIndex)
- {
- /* No more spans, everything else is clipped away, we're done */
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-BOOLEAN ScaleRectAvg8(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
- int NumPixels = DestRect->bottom - DestRect->top;
- int IntPart = (((SourceRect->bottom - SourceRect->top) / (DestRect->bottom -
DestRect->top)) * SourceSurf->lDelta); //((SourceRect->bottom -
SourceRect->top) / (DestRect->bottom - DestRect->top)) * (SourceRect->right -
SourceRect->left);
- int FractPart = (SourceRect->bottom - SourceRect->top) % (DestRect->bottom -
DestRect->top);
- int Mid = (DestRect->bottom - DestRect->top) >> 1;
- int E = 0;
- int skip;
- PIXEL *ScanLine, *ScanLineAhead;
- PIXEL *PrevSource = NULL;
- PIXEL *PrevSourceAhead = NULL;
- PIXEL *Target = (PIXEL *) ((PBYTE)DestSurf->pvScan0 + (DestRect->top *
DestSurf->lDelta) + DestRect->left);
- PIXEL *Source = (PIXEL *) ((PBYTE)SourceSurf->pvScan0 + (SourceRect->top *
SourceSurf->lDelta) + SourceRect->left);
- PSPAN ClipSpans;
- UINT ClipSpansCount;
- UINT SpanIndex;
- LONG DestY;
-
- if (! ClipobjToSpans(&ClipSpans, &ClipSpansCount, ClipRegion, DestRect))
- {
- return FALSE;
- }
- if (0 == ClipSpansCount)
- {
- /* No clip spans == empty clipping region, everything clipped away */
- ASSERT(NULL == ClipSpans);
- return TRUE;
- }
- skip = (DestRect->bottom - DestRect->top < SourceRect->bottom -
SourceRect->top) ? 0 : ((DestRect->bottom - DestRect->top) / (2 *
(SourceRect->bottom - SourceRect->top)) + 1);
- NumPixels -= skip;
-
- ScanLine = (PIXEL*)ExAllocatePool(PagedPool, (DestRect->right - DestRect->left) *
sizeof(PIXEL));
- ScanLineAhead = (PIXEL *)ExAllocatePool(PagedPool, (DestRect->right -
DestRect->left) * sizeof(PIXEL));
-
- if (!ScanLine || !ScanLineAhead)
- {
- if (ScanLine) ExFreePool(ScanLine);
- if (ScanLineAhead) ExFreePool(ScanLineAhead);
- return FALSE;
- }
-
- DestY = DestRect->top;
- SpanIndex = 0;
- while (NumPixels-- > 0) {
- if (Source != PrevSource) {
- if (Source == PrevSourceAhead) {
- /* the next scan line has already been scaled and stored in
- * ScanLineAhead; swap the buffers that ScanLine and ScanLineAhead
- * point to
- */
- PIXEL *tmp = ScanLine;
- ScanLine = ScanLineAhead;
- ScanLineAhead = tmp;
- } else {
- ScaleLineAvg8(ScanLine, Source, SourceRect->right - SourceRect->left,
DestRect->right - DestRect->left);
- } /* if */
- PrevSource = Source;
- } /* if */
-
- if (E >= Mid && PrevSourceAhead != (PIXEL *)((BYTE *)Source +
SourceSurf->lDelta)) {
- int x;
- ScaleLineAvg8(ScanLineAhead, (PIXEL *)((BYTE *)Source + SourceSurf->lDelta),
SourceRect->right - SourceRect->left, DestRect->right - DestRect->left);
- for (x = 0; x < DestRect->right - DestRect->left; x++)
- ScanLine[x] = average8(ScanLine[x], ScanLineAhead[x]);
- PrevSourceAhead = (PIXEL *)((BYTE *)Source + SourceSurf->lDelta);
- } /* if */
-
- if (! FinalCopy8(Target, ScanLine, ClipSpans, ClipSpansCount, &SpanIndex, DestY,
DestRect))
- {
- /* No more spans, everything else is clipped away, we're done */
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
- return TRUE;
- }
- DestY++;
- Target = (PIXEL *)((BYTE *)Target + DestSurf->lDelta);
- Source += IntPart;
- E += FractPart;
- if (E >= DestRect->bottom - DestRect->top) {
- E -= DestRect->bottom - DestRect->top;
- Source = (PIXEL *)((BYTE *)Source + SourceSurf->lDelta);
- } /* if */
- } /* while */
-
- if (skip > 0 && Source != PrevSource)
- ScaleLineAvg8(ScanLine, Source, SourceRect->right - SourceRect->left,
DestRect->right - DestRect->left);
- while (skip-- > 0) {
- if (! FinalCopy8(Target, ScanLine, ClipSpans, ClipSpansCount, &SpanIndex, DestY,
DestRect))
- {
- /* No more spans, everything else is clipped away, we're done */
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
- return TRUE;
- }
- DestY++;
- Target = (PIXEL *)((BYTE *)Target + DestSurf->lDelta);
- } /* while */
-
- ExFreePool(ClipSpans);
- ExFreePool(ScanLine);
- ExFreePool(ScanLineAhead);
-
- return TRUE;
-}
-
-//NOTE: If you change something here, please do the same in other dibXXbpp.c files!
-BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
- RECTL* DestRect, RECTL *SourceRect,
- POINTL* MaskOrigin, POINTL BrushOrigin,
- CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation,
- ULONG Mode)
-{
- LONG SrcSizeY;
- LONG SrcSizeX;
- LONG DesSizeY;
- LONG DesSizeX;
- LONG sx = 0;
- LONG sy = 0;
- LONG DesX;
- LONG DesY;
-
- LONG SrcZoomXHight;
- LONG SrcZoomXLow;
- LONG SrcZoomYHight;
- LONG SrcZoomYLow;
-
- LONG sy_dec = 0;
- LONG sy_max;
-
- LONG sx_dec = 0;
- LONG sx_max;
-
- ULONG color;
-
- 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);
-
- /* Calc the Zoom height of Source */
- SrcSizeY = SourceRect->bottom - SourceRect->top;
-
- /* Calc the Zoom Width of Source */
- SrcSizeX = SourceRect->right - SourceRect->left;
-
- /* Calc the Zoom height of Destinations */
- DesSizeY = DestRect->bottom - DestRect->top;
-
- /* Calc the Zoom width of Destinations */
- DesSizeX = DestRect->right - DestRect->left;
-
- /* Calc the zoom factor of source height */
- SrcZoomYHight = SrcSizeY / DesSizeY;
- SrcZoomYLow = SrcSizeY - (SrcZoomYHight * DesSizeY);
-
- /* Calc the zoom factor of source width */
- SrcZoomXHight = SrcSizeX / DesSizeX;
- SrcZoomXLow = SrcSizeX - (SrcZoomXHight * DesSizeX);
-
- sx_max = DesSizeX;
- sy_max = DesSizeY;
- sy = SourceRect->top;
-
- if (SourceSurf->iBitmapFormat != BMF_8BPP)
- {
- /* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
- /* This is a reference implementation, it hasn't been optimized for speed */
- for (DesY=DestRect->top; DesY<DestRect->bottom; DesY++)
- {
- sx = SourceRect->left;
- sx_dec = 0;
- for (DesX=DestRect->left; DesX<DestRect->right; DesX++)
- {
- color = XLATEOBJ_iXlate(ColorTranslation,
- DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat].
- DIB_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;
- }
- }
- }
- else
- {
- return ScaleRectAvg8(DestSurf, SourceSurf, DestRect, SourceRect, MaskOrigin,
BrushOrigin,
- ClipRegion, ColorTranslation, Mode);
- }
- return TRUE;
-}
+
BOOLEAN
DIB_8BPP_TransparentBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,