mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
sorry revert to 15772
svn path=/trunk/; revision=15777
This commit is contained in:
parent
33798a8e08
commit
de07d08907
1 changed files with 104 additions and 72 deletions
|
@ -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,36 +405,38 @@ 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);
|
||||||
|
|
||||||
/* Calculate the Initial Destination */
|
/* Calculate the Initial Destination */
|
||||||
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)
|
|
||||||
{
|
|
||||||
SourceX = BltInfo->SourcePoint.x;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (DestX = BltInfo->DestRect.left; DestX < right; DestX++, DestBits++, SourceX++)
|
|
||||||
{
|
|
||||||
*DestBits = ~*DestBits;
|
|
||||||
}
|
|
||||||
|
|
||||||
DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
|
|
||||||
SourceY++;
|
|
||||||
DestY--;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
while (DestY > 0)
|
||||||
|
{
|
||||||
|
while (DestX > 0)
|
||||||
|
{
|
||||||
|
/* Invert bits */
|
||||||
|
*DestBits =~ *DestBits;
|
||||||
|
|
||||||
|
/* Update Position */
|
||||||
|
DestBits++;
|
||||||
|
|
||||||
|
/* Decrease distance to do */
|
||||||
|
DestX--;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update position */
|
||||||
|
DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
|
||||||
|
|
||||||
|
/* Decrease distance to do */
|
||||||
|
DestY--;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return TRUE */
|
/* Return TRUE */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -448,50 +453,76 @@ 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);
|
DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
|
||||||
SourceY++;
|
SourceY++;
|
||||||
DestY--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
status = TRUE;
|
status = TRUE;
|
||||||
break;
|
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);
|
||||||
|
SourceY++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
status = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 SourceX, SourceY;
|
ULONG DestX, DestY;
|
||||||
ULONG right = BltInfo->DestRect.right;
|
ULONG SourceX, SourceY;
|
||||||
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)
|
|
||||||
{
|
|
||||||
SourceX = BltInfo->SourcePoint.x;
|
|
||||||
for (DestX = left; DestX < right; DestX++, DestBits++, SourceX++)
|
|
||||||
{
|
|
||||||
|
|
||||||
*DestBits = DIB_GetSource(BltInfo->SourceSurface, SourceX,
|
|
||||||
SourceY, BltInfo->XlateSourceToDest);
|
|
||||||
}
|
|
||||||
|
|
||||||
DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
|
for (DestY = BltInfo->DestRect.top; DestY < bottom; DestY++)
|
||||||
SourceY++;
|
{
|
||||||
DestY--;
|
|
||||||
}
|
SourceX = BltInfo->SourcePoint.x;
|
||||||
|
for (DestX = BltInfo->DestRect.left; DestX < right; DestX++, DestBits++, SourceX++)
|
||||||
|
{
|
||||||
|
if (SourceX > BltInfo->SourceSurface->sizlBitmap.cx) break;
|
||||||
|
|
||||||
|
*DestBits = DIB_GetSource(BltInfo->SourceSurface, SourceX,
|
||||||
|
SourceY, BltInfo->XlateSourceToDest);
|
||||||
|
}
|
||||||
|
|
||||||
|
DestBits = (PULONG)((ULONG_PTR)DestBits - delta);
|
||||||
|
SourceY++;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
status = TRUE;
|
status = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue