diff --git a/win32ss/gdi/dib/dib8bpp.c b/win32ss/gdi/dib/dib8bpp.c index 32c2baf5196..6e4c50fd5a0 100644 --- a/win32ss/gdi/dib/dib8bpp.c +++ b/win32ss/gdi/dib/dib8bpp.c @@ -323,6 +323,7 @@ DIB_8BPP_BitBltSrcCopy(PBLTINFO BltInfo) DPRINT("Flip is bTopToBottom.\n"); DWORD Index; + LONG SrcDelta; /* Allocate enough pixels for a column in BYTE's */ BYTE *store = ExAllocatePoolWithTag(NonPagedPool, @@ -344,6 +345,7 @@ DIB_8BPP_BitBltSrcCopy(PBLTINFO BltInfo) SourceLine = (PBYTE)BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.top * BltInfo->DestSurface->lDelta) + BltInfo->DestRect.left + (BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->DestSurface->lDelta; + SrcDelta = BltInfo->DestSurface->lDelta; } else { @@ -352,6 +354,7 @@ DIB_8BPP_BitBltSrcCopy(PBLTINFO BltInfo) ((BltInfo->SourcePoint.y + BltInfo->DestRect.bottom - BltInfo->DestRect.top - 1) * BltInfo->SourceSurface->lDelta) + BltInfo->SourcePoint.x; + SrcDelta = BltInfo->SourceSurface->lDelta; } /* This set the DestLine to the top line */ @@ -371,9 +374,9 @@ DIB_8BPP_BitBltSrcCopy(PBLTINFO BltInfo) /* Read up the column and store the pixels */ for (j = BltInfo->DestRect.top; j < BltInfo->DestRect.bottom; j++) { - store[Index] = (BYTE)XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *SourceBits); + store[Index] = OneDone ? *SourceBits : (BYTE)XLATEOBJ_iXlate(BltInfo->XlateSourceToDest, *SourceBits); /* Go up a line */ - SourceBits -= BltInfo->SourceSurface->lDelta; + SourceBits -= SrcDelta; Index++; } @@ -384,7 +387,7 @@ DIB_8BPP_BitBltSrcCopy(PBLTINFO BltInfo) { *DestBits = store[Index]; /* Go down a line */ - DestBits += BltInfo->SourceSurface->lDelta; + DestBits += BltInfo->DestSurface->lDelta; Index++; } /* Index to next column */