DIB_32BPP_BitBlt: Fix ROP4_SRCCOPY case for 32bpp.
This file is ugly!
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
_____
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c
--- trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-03 01:18:02 UTC
(rev 15744)
+++ trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-03 01:45:26 UTC
(rev 15745)
@@ -393,9 +393,14 @@
case BMF_24BPP:
break;
case BMF_32BPP:
-
- SrcmaxX =
BltInfo->SourceSurface->sizlBitmap.cx - BltInfo->SourcePoint.x;
- SrcmaxY =
BltInfo->SourceSurface->sizlBitmap.cy - BltInfo->SourcePoint.y;
+ {
+ INT Destdelta;
+ INT Sourcedelta;
+ register PBYTE Destaddr;
+ register PBYTE Srcaddr;
+
+ SrcmaxX = BltInfo->SourceSurface->sizlBitmap.cx -
BltInfo->SourcePoint.x;
+ SrcmaxY =
BltInfo->SourceSurface->sizlBitmap.cy - BltInfo->SourcePoint.y;
/* calc the dst BMP size */
DesmaxX =
BltInfo->DestRect.right - BltInfo->DestRect.left;
@@ -406,19 +411,24 @@
if (DesmaxY > SrcmaxY ) DesmaxY
= SrcmaxY;
/* do blt */
- INT Destdelta =
BltInfo->DestSurface->lDelta;
- INT Sourcedelta =
BltInfo->SourceSurface->lDelta;
- register PBYTE Destaddr =
BltInfo->DestSurface->pvScan0 + BltInfo->DestRect.top * Destdelta +
BltInfo->DestRect.left;
- register PBYTE Srcaddr =
BltInfo->SourceSurface->pvScan0 + BltInfo->SourcePoint.y * Sourcedelta +
BltInfo->SourcePoint.x;
+ Destdelta =
BltInfo->DestSurface->lDelta;
+ Sourcedelta =
BltInfo->SourceSurface->lDelta;
+ Destaddr =
BltInfo->DestSurface->pvScan0 + BltInfo->DestRect.top * Destdelta +
BltInfo->DestRect.left;
+ Srcaddr =
BltInfo->SourceSurface->pvScan0 + BltInfo->SourcePoint.y * Sourcedelta +
BltInfo->SourcePoint.x;
DesmaxX *= 4;
- while (--DesmaxY)
+ if (DesmaxY > 0)
{
- RtlCopyMemory(Destaddr,
Srcaddr, DesmaxX);
- Destaddr += Destdelta;
- Srcaddr += Sourcedelta;
+ do
+ {
+
RtlCopyMemory(Destaddr, Srcaddr, DesmaxX);
+ Destaddr +=
Destdelta;
+ Srcaddr +=
Sourcedelta;
+ }
+ while (--DesmaxY);
}
- break;
+ break;
+ }
default:
break;