Author: tkreuzer Date: Sat Apr 11 23:04:06 2009 New Revision: 40465
URL: http://svn.reactos.org/svn/reactos?rev=40465&view=rev Log: [FORMATTING] Fix indentation, no code change
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c
Modified: trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/dib... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/dib/dib32bpp.c [iso-8859-1] Sat Apr 11 23:04:06 2009 @@ -26,19 +26,19 @@ VOID DIB_32BPP_PutPixel(SURFOBJ *SurfObj, LONG x, LONG y, ULONG c) { - PBYTE byteaddr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta; - PDWORD addr = (PDWORD)byteaddr + x; - - *addr = c; + PBYTE byteaddr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta; + PDWORD addr = (PDWORD)byteaddr + x; + + *addr = c; }
ULONG DIB_32BPP_GetPixel(SURFOBJ *SurfObj, LONG x, LONG y) { - PBYTE byteaddr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta; - PDWORD addr = (PDWORD)byteaddr + x; - - return (ULONG)(*addr); + PBYTE byteaddr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta; + PDWORD addr = (PDWORD)byteaddr + x; + + return (ULONG)(*addr); }
@@ -47,234 +47,250 @@ {
- PBYTE byteaddr = (PBYTE)SurfObj->pvScan0 + y1 * SurfObj->lDelta; - PDWORD addr = (PDWORD)byteaddr + x; - LONG lDelta = SurfObj->lDelta >> 2; // >> 2 == / sizeof(DWORD) - - byteaddr = (PBYTE)addr; - while(y1++ < y2) - { - *addr = (DWORD)c; - addr += lDelta; - } + PBYTE byteaddr = (PBYTE)SurfObj->pvScan0 + y1 * SurfObj->lDelta; + PDWORD addr = (PDWORD)byteaddr + x; + LONG lDelta = SurfObj->lDelta >> 2; // >> 2 == / sizeof(DWORD) + + byteaddr = (PBYTE)addr; + while (y1++ < y2) + { + *addr = (DWORD)c; + addr += lDelta; + }
}
BOOLEAN DIB_32BPP_BitBltSrcCopy(PBLTINFO BltInfo) { - LONG i, j, sx, sy, xColor, f1; - PBYTE SourceBits, DestBits, SourceLine, DestLine; - PBYTE SourceBits_4BPP, SourceLine_4BPP; - PDWORD Source32, Dest32; - - DestBits = (PBYTE)BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.top * BltInfo->DestSurface->lDelta) + 4 * BltInfo->DestRect.left; - - switch(BltInfo->SourceSurface->iBitmapFormat) - { - case BMF_1BPP: - - sx = BltInfo->SourcePoint.x; - sy = BltInfo->SourcePoint.y; - - for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++) - { - sx = BltInfo->SourcePoint.x; - for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++) - { - if(DIB_1BPP_GetPixel(BltInfo->SourceSurface, sx, sy) == 0) - { - DIB_32BPP_PutPixel(BltInfo->DestSurface, i, j, XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, 0)); - } else { - DIB_32BPP_PutPixel(BltInfo->DestSurface, i, j, XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, 1)); - } - sx++; - } - sy++; - } - break; - - case BMF_4BPP: - SourceBits_4BPP = (PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + (BltInfo->SourcePoint.x >> 1); - - for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++) - { - SourceLine_4BPP = SourceBits_4BPP; - sx = BltInfo->SourcePoint.x; - f1 = sx & 1; - - for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++) - { - xColor = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, - (*SourceLine_4BPP & altnotmask[f1]) >> (4 * (1 - f1))); - DIB_32BPP_PutPixel(BltInfo->DestSurface, i, j, xColor); - if(f1 == 1) { SourceLine_4BPP++; f1 = 0; } else { f1 = 1; } - sx++; - } - - SourceBits_4BPP += BltInfo->SourceSurface->lDelta; - } - break; - - case BMF_8BPP: - SourceLine = (PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + BltInfo->SourcePoint.x; - DestLine = DestBits; - - for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) - { - SourceBits = SourceLine; - DestBits = DestLine; - - for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) - { - xColor = *SourceBits; - *((PDWORD) DestBits) = (DWORD)XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, xColor); - SourceBits += 1; - DestBits += 4; - } - - SourceLine += BltInfo->SourceSurface->lDelta; - DestLine += BltInfo->DestSurface->lDelta; - } - break; - - case BMF_16BPP: - SourceLine = (PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + 2 * BltInfo->SourcePoint.x; - DestLine = DestBits; - - for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) - { - SourceBits = SourceLine; - DestBits = DestLine; - - for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) - { - xColor = *((PWORD) SourceBits); - *((PDWORD) DestBits) = (DWORD)XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, xColor); - SourceBits += 2; - DestBits += 4; - } - - SourceLine += BltInfo->SourceSurface->lDelta; - DestLine += BltInfo->DestSurface->lDelta; - } - break; - - case BMF_24BPP: - SourceLine = (PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + 3 * BltInfo->SourcePoint.x; - DestLine = DestBits; - - for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) - { - SourceBits = SourceLine; - DestBits = DestLine; - - for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) - { - xColor = (*(SourceBits + 2) << 0x10) + - (*(SourceBits + 1) << 0x08) + - (*(SourceBits)); - *((PDWORD)DestBits) = (DWORD)XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, xColor); - SourceBits += 3; - DestBits += 4; - } - - SourceLine += BltInfo->SourceSurface->lDelta; - DestLine += BltInfo->DestSurface->lDelta; - } - break; - - case BMF_32BPP: - if (NULL == BltInfo->XlateSourceToDest || 0 != (BltInfo->XlateSourceToDest->flXlate & XO_TRIVIAL)) - { - if (BltInfo->DestRect.top < BltInfo->SourcePoint.y) - { - SourceBits = (PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + 4 * BltInfo->SourcePoint.x; - for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) - { - RtlMoveMemory(DestBits, SourceBits, 4 * (BltInfo->DestRect.right - BltInfo->DestRect.left)); - SourceBits += BltInfo->SourceSurface->lDelta; - DestBits += BltInfo->DestSurface->lDelta; - } - } - else - { - SourceBits = (PBYTE)BltInfo->SourceSurface->pvScan0 + ((BltInfo->SourcePoint.y + BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta) + 4 * BltInfo->SourcePoint.x; - DestBits = (PBYTE)BltInfo->DestSurface->pvScan0 + ((BltInfo->DestRect.bottom - 1) * BltInfo->DestSurface->lDelta) + 4 * BltInfo->DestRect.left; - for (j = BltInfo->DestRect.bottom - 1; BltInfo->DestRect.top <= j; j--) - { - RtlMoveMemory(DestBits, SourceBits, 4 * (BltInfo->DestRect.right - BltInfo->DestRect.left)); - SourceBits -= BltInfo->SourceSurface->lDelta; - DestBits -= BltInfo->DestSurface->lDelta; - } - } - } - else - { - if (BltInfo->DestRect.top < BltInfo->SourcePoint.y) - { - SourceBits = ((PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + 4 * BltInfo->SourcePoint.x); - for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) - { - if (BltInfo->DestRect.left < BltInfo->SourcePoint.x) - { - Dest32 = (DWORD *) DestBits; - Source32 = (DWORD *) SourceBits; - for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) - { - *Dest32++ = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *Source32++); - } - } + LONG i, j, sx, sy, xColor, f1; + PBYTE SourceBits, DestBits, SourceLine, DestLine; + PBYTE SourceBits_4BPP, SourceLine_4BPP; + PDWORD Source32, Dest32; + + DestBits = (PBYTE)BltInfo->DestSurface->pvScan0 + + (BltInfo->DestRect.top * BltInfo->DestSurface->lDelta) + + 4 * BltInfo->DestRect.left; + + switch (BltInfo->SourceSurface->iBitmapFormat) + { + case BMF_1BPP: + + sx = BltInfo->SourcePoint.x; + sy = BltInfo->SourcePoint.y; + + for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++) + { + sx = BltInfo->SourcePoint.x; + for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++) + { + if (DIB_1BPP_GetPixel(BltInfo->SourceSurface, sx, sy) == 0) + { + DIB_32BPP_PutPixel(BltInfo->DestSurface, i, j, XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, 0)); + } else { + DIB_32BPP_PutPixel(BltInfo->DestSurface, i, j, XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, 1)); + } + sx++; + } + sy++; + } + break; + + case BMF_4BPP: + SourceBits_4BPP = (PBYTE)BltInfo->SourceSurface->pvScan0 + + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + + (BltInfo->SourcePoint.x >> 1); + + for (j=BltInfo->DestRect.top; j<BltInfo->DestRect.bottom; j++) + { + SourceLine_4BPP = SourceBits_4BPP; + sx = BltInfo->SourcePoint.x; + f1 = sx & 1; + + for (i=BltInfo->DestRect.left; i<BltInfo->DestRect.right; i++) + { + xColor = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, + (*SourceLine_4BPP & altnotmask[f1]) >> (4 * (1 - f1))); + DIB_32BPP_PutPixel(BltInfo->DestSurface, i, j, xColor); + if (f1 == 1) { + SourceLine_4BPP++; + f1 = 0; + } else { + f1 = 1; + } + sx++; + } + + SourceBits_4BPP += BltInfo->SourceSurface->lDelta; + } + break; + + case BMF_8BPP: + SourceLine = (PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + BltInfo->SourcePoint.x; + DestLine = DestBits; + + for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) + { + SourceBits = SourceLine; + DestBits = DestLine; + + for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) + { + xColor = *SourceBits; + *((PDWORD) DestBits) = (DWORD)XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, xColor); + SourceBits += 1; + DestBits += 4; + } + + SourceLine += BltInfo->SourceSurface->lDelta; + DestLine += BltInfo->DestSurface->lDelta; + } + break; + + case BMF_16BPP: + SourceLine = (PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + 2 * BltInfo->SourcePoint.x; + DestLine = DestBits; + + for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) + { + SourceBits = SourceLine; + DestBits = DestLine; + + for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) + { + xColor = *((PWORD) SourceBits); + *((PDWORD) DestBits) = (DWORD)XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, xColor); + SourceBits += 2; + DestBits += 4; + } + + SourceLine += BltInfo->SourceSurface->lDelta; + DestLine += BltInfo->DestSurface->lDelta; + } + break; + + case BMF_24BPP: + SourceLine = (PBYTE)BltInfo->SourceSurface->pvScan0 + + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + + 3 * BltInfo->SourcePoint.x; + DestLine = DestBits; + + for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) + { + SourceBits = SourceLine; + DestBits = DestLine; + + for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) + { + xColor = (*(SourceBits + 2) << 0x10) + + (*(SourceBits + 1) << 0x08) + + (*(SourceBits)); + *((PDWORD)DestBits) = (DWORD)XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, xColor); + SourceBits += 3; + DestBits += 4; + } + + SourceLine += BltInfo->SourceSurface->lDelta; + DestLine += BltInfo->DestSurface->lDelta; + } + break; + + case BMF_32BPP: + if (NULL == BltInfo->XlateSourceToDest || + 0 != (BltInfo->XlateSourceToDest->flXlate & XO_TRIVIAL)) + { + if (BltInfo->DestRect.top < BltInfo->SourcePoint.y) + { + SourceBits = (PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + 4 * BltInfo->SourcePoint.x; + for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) + { + RtlMoveMemory(DestBits, SourceBits, 4 * (BltInfo->DestRect.right - BltInfo->DestRect.left)); + SourceBits += BltInfo->SourceSurface->lDelta; + DestBits += BltInfo->DestSurface->lDelta; + } + } else - { - Dest32 = (DWORD *) DestBits + (BltInfo->DestRect.right - BltInfo->DestRect.left - 1); - Source32 = (DWORD *) SourceBits + (BltInfo->DestRect.right - BltInfo->DestRect.left - 1); - for (i = BltInfo->DestRect.right - 1; BltInfo->DestRect.left <= i; i--) - { - *Dest32-- = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *Source32--); - } - } - SourceBits += BltInfo->SourceSurface->lDelta; - DestBits += BltInfo->DestSurface->lDelta; - } - } - else - { - SourceBits = (PBYTE)BltInfo->SourceSurface->pvScan0 + ((BltInfo->SourcePoint.y + BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta) + 4 * BltInfo->SourcePoint.x; - DestBits = (PBYTE)BltInfo->DestSurface->pvScan0 + ((BltInfo->DestRect.bottom - 1) * BltInfo->DestSurface->lDelta) + 4 * BltInfo->DestRect.left; - for (j = BltInfo->DestRect.bottom - 1; BltInfo->DestRect.top <= j; j--) - { - if (BltInfo->DestRect.left < BltInfo->SourcePoint.x) - { - Dest32 = (DWORD *) DestBits; - Source32 = (DWORD *) SourceBits; - for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) - { - *Dest32++ = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *Source32++); - } - } + { + SourceBits = (PBYTE)BltInfo->SourceSurface->pvScan0 + + ((BltInfo->SourcePoint.y + + BltInfo->DestRect.bottom + - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta) + + 4 * BltInfo->SourcePoint.x; + DestBits = (PBYTE)BltInfo->DestSurface->pvScan0 + ((BltInfo->DestRect.bottom - 1) * BltInfo->DestSurface->lDelta) + 4 * BltInfo->DestRect.left; + for (j = BltInfo->DestRect.bottom - 1; BltInfo->DestRect.top <= j; j--) + { + RtlMoveMemory(DestBits, SourceBits, 4 * (BltInfo->DestRect.right - BltInfo->DestRect.left)); + SourceBits -= BltInfo->SourceSurface->lDelta; + DestBits -= BltInfo->DestSurface->lDelta; + } + } + } + else + { + if (BltInfo->DestRect.top < BltInfo->SourcePoint.y) + { + SourceBits = ((PBYTE)BltInfo->SourceSurface->pvScan0 + (BltInfo->SourcePoint.y * BltInfo->SourceSurface->lDelta) + 4 * BltInfo->SourcePoint.x); + for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) + { + if (BltInfo->DestRect.left < BltInfo->SourcePoint.x) + { + Dest32 = (DWORD *) DestBits; + Source32 = (DWORD *) SourceBits; + for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) + { + *Dest32++ = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *Source32++); + } + } + else + { + Dest32 = (DWORD *) DestBits + (BltInfo->DestRect.right - BltInfo->DestRect.left - 1); + Source32 = (DWORD *) SourceBits + (BltInfo->DestRect.right - BltInfo->DestRect.left - 1); + for (i = BltInfo->DestRect.right - 1; BltInfo->DestRect.left <= i; i--) + { + *Dest32-- = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *Source32--); + } + } + SourceBits += BltInfo->SourceSurface->lDelta; + DestBits += BltInfo->DestSurface->lDelta; + } + } else - { - Dest32 = (DWORD *) DestBits + (BltInfo->DestRect.right - BltInfo->DestRect.left - 1); - Source32 = (DWORD *) SourceBits + (BltInfo->DestRect.right - BltInfo->DestRect.left - 1); - for (i = BltInfo->DestRect.right - 1; BltInfo->DestRect.left <= i; i--) - { - *Dest32-- = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *Source32--); - } - } - SourceBits -= BltInfo->SourceSurface->lDelta; - DestBits -= BltInfo->DestSurface->lDelta; - } - } - } - break; - - default: - DPRINT1("DIB_32BPP_Bitblt: Unhandled Source BPP: %u\n", BitsPerFormat(BltInfo->SourceSurface->iBitmapFormat)); - return FALSE; - } - - return TRUE; + { + SourceBits = (PBYTE)BltInfo->SourceSurface->pvScan0 + ((BltInfo->SourcePoint.y + BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta) + 4 * BltInfo->SourcePoint.x; + DestBits = (PBYTE)BltInfo->DestSurface->pvScan0 + ((BltInfo->DestRect.bottom - 1) * BltInfo->DestSurface->lDelta) + 4 * BltInfo->DestRect.left; + for (j = BltInfo->DestRect.bottom - 1; BltInfo->DestRect.top <= j; j--) + { + if (BltInfo->DestRect.left < BltInfo->SourcePoint.x) + { + Dest32 = (DWORD *) DestBits; + Source32 = (DWORD *) SourceBits; + for (i = BltInfo->DestRect.left; i < BltInfo->DestRect.right; i++) + { + *Dest32++ = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *Source32++); + } + } + else + { + Dest32 = (DWORD *) DestBits + (BltInfo->DestRect.right - BltInfo->DestRect.left - 1); + Source32 = (DWORD *) SourceBits + (BltInfo->DestRect.right - BltInfo->DestRect.left - 1); + for (i = BltInfo->DestRect.right - 1; BltInfo->DestRect.left <= i; i--) + { + *Dest32-- = XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *Source32--); + } + } + SourceBits -= BltInfo->SourceSurface->lDelta; + DestBits -= BltInfo->DestSurface->lDelta; + } + } + } + break; + + default: + DPRINT1("DIB_32BPP_Bitblt: Unhandled Source BPP: %u\n", BitsPerFormat(BltInfo->SourceSurface->iBitmapFormat)); + return FALSE; + } + + return TRUE; }
BOOLEAN @@ -282,61 +298,61 @@ RECTL* DestRect, RECTL *SourceRect, XLATEOBJ *ColorTranslation, ULONG iTransColor) { - ULONG X, Y, SourceX, SourceY = 0, Source = 0, wd; - ULONG *DestBits; - - LONG DstHeight; - LONG DstWidth; - LONG SrcHeight; - LONG SrcWidth; - - DstHeight = DestRect->bottom - DestRect->top; - DstWidth = DestRect->right - DestRect->left; - SrcHeight = SourceRect->bottom - SourceRect->top; - SrcWidth = SourceRect->right - SourceRect->left; - - DestBits = (ULONG*)((PBYTE)DestSurf->pvScan0 + - (DestRect->left << 2) + - DestRect->top * DestSurf->lDelta); - wd = DestSurf->lDelta - ((DestRect->right - DestRect->left) << 2); - - for(Y = DestRect->top; Y < DestRect->bottom; Y++) - { - SourceY = SourceRect->top+(Y - DestRect->top) * SrcHeight / DstHeight; - for(X = DestRect->left; X < DestRect->right; X++, DestBits++) - { - SourceX = SourceRect->left+(X - DestRect->left) * SrcWidth / DstWidth; - if (SourceX >= 0 && SourceY >= 0 && - SourceSurf->sizlBitmap.cx > SourceX && SourceSurf->sizlBitmap.cy > SourceY) - { - Source = DIB_GetSourceIndex(SourceSurf, SourceX, SourceY); - if(Source != iTransColor) + ULONG X, Y, SourceX, SourceY = 0, Source = 0, wd; + ULONG *DestBits; + + LONG DstHeight; + LONG DstWidth; + LONG SrcHeight; + LONG SrcWidth; + + DstHeight = DestRect->bottom - DestRect->top; + DstWidth = DestRect->right - DestRect->left; + SrcHeight = SourceRect->bottom - SourceRect->top; + SrcWidth = SourceRect->right - SourceRect->left; + + DestBits = (ULONG*)((PBYTE)DestSurf->pvScan0 + + (DestRect->left << 2) + + DestRect->top * DestSurf->lDelta); + wd = DestSurf->lDelta - ((DestRect->right - DestRect->left) << 2); + + for (Y = DestRect->top; Y < DestRect->bottom; Y++) + { + SourceY = SourceRect->top+(Y - DestRect->top) * SrcHeight / DstHeight; + for (X = DestRect->left; X < DestRect->right; X++, DestBits++) { - *DestBits = XLATEOBJ_iXlate(ColorTranslation, Source); + SourceX = SourceRect->left+(X - DestRect->left) * SrcWidth / DstWidth; + if (SourceX >= 0 && SourceY >= 0 && + SourceSurf->sizlBitmap.cx > SourceX && SourceSurf->sizlBitmap.cy > SourceY) + { + Source = DIB_GetSourceIndex(SourceSurf, SourceX, SourceY); + if (Source != iTransColor) + { + *DestBits = XLATEOBJ_iXlate(ColorTranslation, Source); + } + } } - } - } - - DestBits = (ULONG*)((ULONG_PTR)DestBits + wd); - } - - return TRUE; + + DestBits = (ULONG*)((ULONG_PTR)DestBits + wd); + } + + return TRUE; }
typedef union { - ULONG ul; - struct { - UCHAR red; - UCHAR green; - UCHAR blue; - UCHAR alpha; - } col; + ULONG ul; + struct { + UCHAR red; + UCHAR green; + UCHAR blue; + UCHAR alpha; + } col; } NICEPIXEL32;
static __inline UCHAR Clamp8(ULONG val) { - return (val > 255) ? 255 : val; + return (val > 255) ? 255 : val; }
BOOLEAN @@ -344,77 +360,77 @@ RECTL* SourceRect, CLIPOBJ* ClipRegion, XLATEOBJ* ColorTranslation, BLENDOBJ* BlendObj) { - INT Rows, Cols, SrcX, SrcY; - register PULONG Dst; - ULONG DstDelta; - BLENDFUNCTION BlendFunc; - register NICEPIXEL32 DstPixel, SrcPixel; - UCHAR Alpha, SrcBpp; - - DPRINT("DIB_32BPP_AlphaBlend: srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n", - SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom, - DestRect->left, DestRect->top, DestRect->right, DestRect->bottom); - - ASSERT(DestRect->bottom - DestRect->top == SourceRect->bottom - SourceRect->top && - DestRect->right - DestRect->left == SourceRect->right - SourceRect->left); - - BlendFunc = BlendObj->BlendFunction; - if (BlendFunc.BlendOp != AC_SRC_OVER) - { - DPRINT1("BlendOp != AC_SRC_OVER\n"); - return FALSE; - } - if (BlendFunc.BlendFlags != 0) - { - DPRINT1("BlendFlags != 0\n"); - return FALSE; - } - if ((BlendFunc.AlphaFormat & ~AC_SRC_ALPHA) != 0) - { - DPRINT1("Unsupported AlphaFormat (0x%x)\n", BlendFunc.AlphaFormat); - return FALSE; - } - if ((BlendFunc.AlphaFormat & AC_SRC_ALPHA) != 0 && - BitsPerFormat(Source->iBitmapFormat) != 32) - { - DPRINT1("Source bitmap must be 32bpp when AC_SRC_ALPHA is set\n"); - return FALSE; - } - - Dst = (PULONG)((ULONG_PTR)Dest->pvScan0 + (DestRect->top * Dest->lDelta) + - (DestRect->left << 2)); - DstDelta = Dest->lDelta - ((DestRect->right - DestRect->left) << 2); - SrcBpp = BitsPerFormat(Source->iBitmapFormat); - - Rows = DestRect->bottom - DestRect->top; - SrcY = SourceRect->top; - while (--Rows >= 0) - { - Cols = DestRect->right - DestRect->left; - SrcX = SourceRect->left; - while (--Cols >= 0) - { - SrcPixel.ul = DIB_GetSource(Source, SrcX++, SrcY, ColorTranslation); - SrcPixel.col.red = SrcPixel.col.red * BlendFunc.SourceConstantAlpha / 255; - SrcPixel.col.green = SrcPixel.col.green * BlendFunc.SourceConstantAlpha / 255; - SrcPixel.col.blue = SrcPixel.col.blue * BlendFunc.SourceConstantAlpha / 255; - SrcPixel.col.alpha = (SrcBpp == 32) ? (SrcPixel.col.alpha * BlendFunc.SourceConstantAlpha / 255) : BlendFunc.SourceConstantAlpha; - - Alpha = ((BlendFunc.AlphaFormat & AC_SRC_ALPHA) != 0) ? - SrcPixel.col.alpha : BlendFunc.SourceConstantAlpha; - - DstPixel.ul = *Dst; - DstPixel.col.red = Clamp8(DstPixel.col.red * (255 - Alpha) / 255 + SrcPixel.col.red); - DstPixel.col.green = Clamp8(DstPixel.col.green * (255 - Alpha) / 255 + SrcPixel.col.green); - DstPixel.col.blue = Clamp8(DstPixel.col.blue * (255 - Alpha) / 255 + SrcPixel.col.blue); - DstPixel.col.alpha = Clamp8(DstPixel.col.alpha * (255 - Alpha) / 255 + SrcPixel.col.alpha); - *Dst++ = DstPixel.ul; - } - Dst = (PULONG)((ULONG_PTR)Dst + DstDelta); - SrcY++; - } - - return TRUE; + INT Rows, Cols, SrcX, SrcY; + register PULONG Dst; + ULONG DstDelta; + BLENDFUNCTION BlendFunc; + register NICEPIXEL32 DstPixel, SrcPixel; + UCHAR Alpha, SrcBpp; + + DPRINT("DIB_32BPP_AlphaBlend: srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n", + SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom, + DestRect->left, DestRect->top, DestRect->right, DestRect->bottom); + + ASSERT(DestRect->bottom - DestRect->top == SourceRect->bottom - SourceRect->top && + DestRect->right - DestRect->left == SourceRect->right - SourceRect->left); + + BlendFunc = BlendObj->BlendFunction; + if (BlendFunc.BlendOp != AC_SRC_OVER) + { + DPRINT1("BlendOp != AC_SRC_OVER\n"); + return FALSE; + } + if (BlendFunc.BlendFlags != 0) + { + DPRINT1("BlendFlags != 0\n"); + return FALSE; + } + if ((BlendFunc.AlphaFormat & ~AC_SRC_ALPHA) != 0) + { + DPRINT1("Unsupported AlphaFormat (0x%x)\n", BlendFunc.AlphaFormat); + return FALSE; + } + if ((BlendFunc.AlphaFormat & AC_SRC_ALPHA) != 0 && + BitsPerFormat(Source->iBitmapFormat) != 32) + { + DPRINT1("Source bitmap must be 32bpp when AC_SRC_ALPHA is set\n"); + return FALSE; + } + + Dst = (PULONG)((ULONG_PTR)Dest->pvScan0 + (DestRect->top * Dest->lDelta) + + (DestRect->left << 2)); + DstDelta = Dest->lDelta - ((DestRect->right - DestRect->left) << 2); + SrcBpp = BitsPerFormat(Source->iBitmapFormat); + + Rows = DestRect->bottom - DestRect->top; + SrcY = SourceRect->top; + while (--Rows >= 0) + { + Cols = DestRect->right - DestRect->left; + SrcX = SourceRect->left; + while (--Cols >= 0) + { + SrcPixel.ul = DIB_GetSource(Source, SrcX++, SrcY, ColorTranslation); + SrcPixel.col.red = SrcPixel.col.red * BlendFunc.SourceConstantAlpha / 255; + SrcPixel.col.green = SrcPixel.col.green * BlendFunc.SourceConstantAlpha / 255; + SrcPixel.col.blue = SrcPixel.col.blue * BlendFunc.SourceConstantAlpha / 255; + SrcPixel.col.alpha = (SrcBpp == 32) ? (SrcPixel.col.alpha * BlendFunc.SourceConstantAlpha / 255) : BlendFunc.SourceConstantAlpha; + + Alpha = ((BlendFunc.AlphaFormat & AC_SRC_ALPHA) != 0) ? + SrcPixel.col.alpha : BlendFunc.SourceConstantAlpha; + + DstPixel.ul = *Dst; + DstPixel.col.red = Clamp8(DstPixel.col.red * (255 - Alpha) / 255 + SrcPixel.col.red); + DstPixel.col.green = Clamp8(DstPixel.col.green * (255 - Alpha) / 255 + SrcPixel.col.green); + DstPixel.col.blue = Clamp8(DstPixel.col.blue * (255 - Alpha) / 255 + SrcPixel.col.blue); + DstPixel.col.alpha = Clamp8(DstPixel.col.alpha * (255 - Alpha) / 255 + SrcPixel.col.alpha); + *Dst++ = DstPixel.ul; + } + Dst = (PULONG)((ULONG_PTR)Dst + DstDelta); + SrcY++; + } + + return TRUE; }
/* EOF */