sorry revert to 15772

svn path=/trunk/; revision=15777
This commit is contained in:
Magnus Olsen 2005-06-04 18:43:39 +00:00
parent 33798a8e08
commit de07d08907

View file

@ -20,6 +20,9 @@
#include <w32k.h> #include <w32k.h>
#include <w32k.h>
VOID VOID
DIB_32BPP_PutPixel(SURFOBJ *SurfObj, LONG x, LONG y, ULONG c) DIB_32BPP_PutPixel(SURFOBJ *SurfObj, LONG x, LONG y, ULONG c)
{ {
@ -402,12 +405,10 @@ BOOLEAN
FASTCALL FASTCALL
DIB_32DstInvert(PBLTINFO BltInfo) DIB_32DstInvert(PBLTINFO BltInfo)
{ {
ULONG SourceX, SourceY;
ULONG right = BltInfo->DestRect.right;
PULONG DestBits; PULONG DestBits;
ULONG top = BltInfo->DestRect.top; ULONG top = BltInfo->DestRect.top;
ULONG left = BltInfo->DestRect.left; ULONG left = BltInfo->DestRect.left;
ULONG DestX; ULONG DestX = BltInfo->DestRect.right - left;
ULONG DestY = BltInfo->DestRect.bottom - top; ULONG DestY = BltInfo->DestRect.bottom - top;
ULONG delta = BltInfo->DestSurface->lDelta - (DestX << 2); ULONG delta = BltInfo->DestSurface->lDelta - (DestX << 2);
@ -415,20 +416,24 @@ DIB_32DstInvert(PBLTINFO BltInfo)
DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (left << 2) + DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (left << 2) +
top * BltInfo->DestSurface->lDelta); top * BltInfo->DestSurface->lDelta);
SourceY = BltInfo->SourcePoint.y;
while (DestY > 0) while (DestY > 0)
{ {
SourceX = BltInfo->SourcePoint.x; while (DestX > 0)
for (DestX = BltInfo->DestRect.left; DestX < right; DestX++, DestBits++, SourceX++)
{ {
/* Invert bits */
*DestBits =~ *DestBits; *DestBits =~ *DestBits;
/* Update Position */
DestBits++;
/* Decrease distance to do */
DestX--;
} }
/* Update position */
DestBits = (PULONG)((ULONG_PTR)DestBits + delta); DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
SourceY++;
/* Decrease distance to do */
DestY--; DestY--;
} }
@ -448,37 +453,64 @@ DIB32_SrcPaint(PBLTINFO BltInfo)
case BMF_4BPP: case BMF_4BPP:
case BMF_16BPP: case BMF_16BPP:
case BMF_24BPP: case BMF_24BPP:
case BMF_32BPP:
{ {
ULONG DestX, DestY;
ULONG SourceX, SourceY; ULONG SourceX, SourceY;
ULONG right = BltInfo->DestRect.right;
PULONG DestBits; PULONG DestBits;
ULONG top = BltInfo->DestRect.top;
ULONG left = BltInfo->DestRect.left;
ULONG DestX;
ULONG DestY = BltInfo->DestRect.bottom - top;
ULONG delta = BltInfo->DestSurface->lDelta - (DestX << 2);
/* Calculate the Initial Destination */ ULONG bottom = BltInfo->DestRect.bottom;
DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (left << 2) + ULONG right = BltInfo->DestRect.right;
top * BltInfo->DestSurface->lDelta); ULONG delta = BltInfo->DestSurface->lDelta - ((BltInfo->DestRect.right - BltInfo->DestRect.left) <<2) ;
DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
SourceY = BltInfo->SourcePoint.y; SourceY = BltInfo->SourcePoint.y;
while (DestY>0)
for (DestY = BltInfo->DestRect.top; DestY < bottom; DestY++)
{ {
SourceX = BltInfo->SourcePoint.x; SourceX = BltInfo->SourcePoint.x;
for (DestX = BltInfo->DestRect.left; DestX < right; DestX++, DestBits++, SourceX++)
for (DestX = left; DestX < right; DestX++, DestBits++, SourceX++)
{ {
*DestBits |= DIB_GetSource(BltInfo->SourceSurface, SourceX, *DestBits = (*DestBits | DIB_GetSource(BltInfo->SourceSurface, SourceX,
SourceY, BltInfo->XlateSourceToDest); SourceY, BltInfo->XlateSourceToDest));
}
DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
SourceY++;
}
}
status = TRUE;
break;
case BMF_32BPP:
{
ULONG DestX, DestY;
ULONG SourceX, SourceY;
PULONG DestBits;
ULONG bottom = BltInfo->DestRect.bottom;
ULONG right = BltInfo->DestRect.right;
ULONG delta = BltInfo->DestSurface->lDelta - ((BltInfo->DestRect.right - BltInfo->DestRect.left) <<2) ;
DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
SourceY = BltInfo->SourcePoint.y;
for (DestY = BltInfo->DestRect.top; DestY < bottom; DestY++)
{
SourceX = BltInfo->SourcePoint.x;
for (DestX = BltInfo->DestRect.left; DestX < right; DestX++, DestBits++, SourceX++)
{
*DestBits = (*DestBits | DIB_32BPP_GetPixel(BltInfo->SourceSurface, SourceX, SourceY));
} }
DestBits = (PULONG)((ULONG_PTR)DestBits + delta); DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
SourceY++; SourceY++;
DestY--;
} }
} }
@ -491,7 +523,6 @@ DIB32_SrcPaint(PBLTINFO BltInfo)
return status; return status;
} }
BOOLEAN BOOLEAN
DIB32_Srccopy(PBLTINFO BltInfo) DIB32_Srccopy(PBLTINFO BltInfo)
{ {
@ -505,34 +536,35 @@ DIB32_Srccopy(PBLTINFO BltInfo)
case BMF_16BPP: case BMF_16BPP:
case BMF_24BPP: case BMF_24BPP:
{ {
ULONG DestX, DestY;
ULONG SourceX, SourceY; ULONG SourceX, SourceY;
ULONG right = BltInfo->DestRect.right;
PULONG DestBits; PULONG DestBits;
ULONG top = BltInfo->DestRect.top;
ULONG left = BltInfo->DestRect.left;
ULONG DestX;
ULONG DestY = BltInfo->DestRect.bottom - top;
ULONG delta = BltInfo->DestSurface->lDelta - (DestX << 2);
/* Calculate the Initial Destination */ ULONG bottom = BltInfo->DestRect.bottom;
DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (left << 2) + ULONG right = BltInfo->DestRect.right;
top * BltInfo->DestSurface->lDelta); ULONG delta = ((BltInfo->DestRect.right - BltInfo->DestRect.left) <<2) + BltInfo->DestSurface->lDelta;
DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
SourceY = BltInfo->SourcePoint.y; SourceY = BltInfo->SourcePoint.y;
while (DestY>0)
for (DestY = BltInfo->DestRect.top; DestY < bottom; DestY++)
{ {
SourceX = BltInfo->SourcePoint.x; SourceX = BltInfo->SourcePoint.x;
for (DestX = left; DestX < right; DestX++, DestBits++, SourceX++) for (DestX = BltInfo->DestRect.left; DestX < right; DestX++, DestBits++, SourceX++)
{ {
if (SourceX > BltInfo->SourceSurface->sizlBitmap.cx) break;
*DestBits = DIB_GetSource(BltInfo->SourceSurface, SourceX, *DestBits = DIB_GetSource(BltInfo->SourceSurface, SourceX,
SourceY, BltInfo->XlateSourceToDest); SourceY, BltInfo->XlateSourceToDest);
} }
DestBits = (PULONG)((ULONG_PTR)DestBits + delta); DestBits = (PULONG)((ULONG_PTR)DestBits - delta);
SourceY++; SourceY++;
DestY--;
} }
} }
status = TRUE; status = TRUE;
break; break;