--- trunk/reactos/subsys/win32k/dib/dib.c 2005-06-07 23:11:35 UTC (rev 15839)
+++ trunk/reactos/subsys/win32k/dib/dib.c 2005-06-08 16:28:41 UTC (rev 15840)
@@ -35,57 +35,57 @@
{
DIB_1BPP_PutPixel, DIB_1BPP_GetPixel, DIB_1BPP_HLine, DIB_1BPP_VLine,
DIB_1BPP_BitBlt, DIB_1BPP_BitBltSrcCopy, DIB_1BPP_StretchBlt,
- DIB_1BPP_TransparentBlt
+ DIB_1BPP_TransparentBlt, DIB_1BPP_ColorFill
},
/* BMF_4BPP */
{
DIB_4BPP_PutPixel, DIB_4BPP_GetPixel, DIB_4BPP_HLine, DIB_4BPP_VLine,
DIB_4BPP_BitBlt, DIB_4BPP_BitBltSrcCopy, DIB_4BPP_StretchBlt,
- DIB_4BPP_TransparentBlt
+ DIB_4BPP_TransparentBlt, DIB_4BPP_ColorFill
},
/* BMF_8BPP */
{
DIB_8BPP_PutPixel, DIB_8BPP_GetPixel, DIB_8BPP_HLine, DIB_8BPP_VLine,
DIB_8BPP_BitBlt, DIB_8BPP_BitBltSrcCopy, DIB_8BPP_StretchBlt,
- DIB_8BPP_TransparentBlt
+ DIB_8BPP_TransparentBlt, DIB_8BPP_ColorFill
},
/* BMF_16BPP */
{
DIB_16BPP_PutPixel, DIB_16BPP_GetPixel, DIB_16BPP_HLine, DIB_16BPP_VLine,
DIB_16BPP_BitBlt, DIB_16BPP_BitBltSrcCopy, DIB_16BPP_StretchBlt,
- DIB_16BPP_TransparentBlt
+ DIB_16BPP_TransparentBlt, DIB_16BPP_ColorFill
},
/* BMF_24BPP */
{
DIB_24BPP_PutPixel, DIB_24BPP_GetPixel, DIB_24BPP_HLine, DIB_24BPP_VLine,
DIB_24BPP_BitBlt, DIB_24BPP_BitBltSrcCopy, DIB_24BPP_StretchBlt,
- DIB_24BPP_TransparentBlt
+ DIB_24BPP_TransparentBlt, DIB_24BPP_ColorFill
},
/* BMF_32BPP */
{
DIB_32BPP_PutPixel, DIB_32BPP_GetPixel, DIB_32BPP_HLine, DIB_32BPP_VLine,
DIB_32BPP_BitBlt, DIB_32BPP_BitBltSrcCopy, DIB_32BPP_StretchBlt,
- DIB_32BPP_TransparentBlt
+ DIB_32BPP_TransparentBlt, DIB_32BPP_ColorFill
},
/* BMF_4RLE */
{
Dummy_PutPixel, Dummy_GetPixel, Dummy_HLine, Dummy_VLine,
- Dummy_BitBlt, Dummy_BitBlt, Dummy_StretchBlt, Dummy_TransparentBlt
+ Dummy_BitBlt, Dummy_BitBlt, Dummy_StretchBlt, Dummy_TransparentBlt, Dummy_ColorFill
},
/* BMF_8RLE */
{
Dummy_PutPixel, Dummy_GetPixel, Dummy_HLine, Dummy_VLine,
- Dummy_BitBlt, Dummy_BitBlt, Dummy_StretchBlt, Dummy_TransparentBlt
+ Dummy_BitBlt, Dummy_BitBlt, Dummy_StretchBlt, Dummy_TransparentBlt, Dummy_ColorFill
},
/* BMF_JPEG */
{
Dummy_PutPixel, Dummy_GetPixel, Dummy_HLine, Dummy_VLine,
- Dummy_BitBlt, Dummy_BitBlt, Dummy_StretchBlt, Dummy_TransparentBlt
+ Dummy_BitBlt, Dummy_BitBlt, Dummy_StretchBlt, Dummy_TransparentBlt, Dummy_ColorFill
},
/* BMF_PNG */
{
Dummy_PutPixel, Dummy_GetPixel, Dummy_HLine, Dummy_VLine,
- Dummy_BitBlt, Dummy_BitBlt, Dummy_StretchBlt, Dummy_TransparentBlt
+ Dummy_BitBlt, Dummy_BitBlt, Dummy_StretchBlt, Dummy_TransparentBlt, Dummy_ColorFill
}
};
@@ -230,4 +230,10 @@
return FALSE;
}
+BOOLEAN Dummy_ColorFill(SURFOBJ* Dest, RECTL* DestRect, ULONG Color)
+{
+ return FALSE;
+}
+
+
/* EOF */
--- trunk/reactos/subsys/win32k/dib/dib.h 2005-06-07 23:11:35 UTC (rev 15839)
+++ trunk/reactos/subsys/win32k/dib/dib.h 2005-06-08 16:28:41 UTC (rev 15840)
@@ -43,6 +43,7 @@
typedef BOOLEAN (*PFN_DIB_BitBlt)(PBLTINFO);
typedef BOOLEAN (*PFN_DIB_StretchBlt)(SURFOBJ*,SURFOBJ*,RECTL*,RECTL*,POINTL*,POINTL,CLIPOBJ*,XLATEOBJ*,ULONG);
typedef BOOLEAN (*PFN_DIB_TransparentBlt)(SURFOBJ*,SURFOBJ*,RECTL*,POINTL*,XLATEOBJ*,ULONG);
+typedef BOOLEAN (*PFN_DIB_ColorFill)(SURFOBJ*, RECTL*, ULONG);
typedef struct
{
@@ -54,6 +55,7 @@
PFN_DIB_BitBlt DIB_BitBltSrcCopy;
PFN_DIB_StretchBlt DIB_StretchBlt;
PFN_DIB_TransparentBlt DIB_TransparentBlt;
+ PFN_DIB_ColorFill DIB_ColorFill;
} DIB_FUNCTIONS;
extern DIB_FUNCTIONS DibFunctionsForBitmapFormat[];
@@ -65,6 +67,7 @@
BOOLEAN Dummy_BitBlt(PBLTINFO);
BOOLEAN Dummy_StretchBlt(SURFOBJ*,SURFOBJ*,RECTL*,RECTL*,POINTL*,POINTL,CLIPOBJ*,XLATEOBJ*,ULONG);
BOOLEAN Dummy_TransparentBlt(SURFOBJ*,SURFOBJ*,RECTL*,POINTL*,XLATEOBJ*,ULONG);
+BOOLEAN Dummy_ColorFill(SURFOBJ*, RECTL*, ULONG);
VOID DIB_1BPP_PutPixel(SURFOBJ*,LONG,LONG,ULONG);
ULONG DIB_1BPP_GetPixel(SURFOBJ*,LONG,LONG);
@@ -74,6 +77,7 @@
BOOLEAN DIB_1BPP_BitBltSrcCopy(PBLTINFO);
BOOLEAN DIB_1BPP_StretchBlt(SURFOBJ*,SURFOBJ*,RECTL*,RECTL*,POINTL*,POINTL,CLIPOBJ*,XLATEOBJ*,ULONG);
BOOLEAN DIB_1BPP_TransparentBlt(SURFOBJ*,SURFOBJ*,RECTL*,POINTL*,XLATEOBJ*,ULONG);
+BOOLEAN DIB_1BPP_ColorFill(SURFOBJ*, RECTL*, ULONG);
VOID DIB_4BPP_PutPixel(SURFOBJ*,LONG,LONG,ULONG);
ULONG DIB_4BPP_GetPixel(SURFOBJ*,LONG,LONG);
@@ -83,6 +87,7 @@
BOOLEAN DIB_4BPP_BitBltSrcCopy(PBLTINFO);
BOOLEAN DIB_4BPP_StretchBlt(SURFOBJ*,SURFOBJ*,RECTL*,RECTL*,POINTL*,POINTL,CLIPOBJ*,XLATEOBJ*,ULONG);
BOOLEAN DIB_4BPP_TransparentBlt(SURFOBJ*,SURFOBJ*,RECTL*,POINTL*,XLATEOBJ*,ULONG);
+BOOLEAN DIB_4BPP_ColorFill(SURFOBJ*, RECTL*, ULONG);
VOID DIB_8BPP_PutPixel(SURFOBJ*,LONG,LONG,ULONG);
ULONG DIB_8BPP_GetPixel(SURFOBJ*,LONG,LONG);
@@ -92,6 +97,7 @@
BOOLEAN DIB_8BPP_BitBltSrcCopy(PBLTINFO);
BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ*,SURFOBJ*,RECTL*,RECTL*,POINTL*,POINTL,CLIPOBJ*,XLATEOBJ*,ULONG);
BOOLEAN DIB_8BPP_TransparentBlt(SURFOBJ*,SURFOBJ*,RECTL*,POINTL*,XLATEOBJ*,ULONG);
+BOOLEAN DIB_8BPP_ColorFill(SURFOBJ*, RECTL*, ULONG);
VOID DIB_16BPP_PutPixel(SURFOBJ*,LONG,LONG,ULONG);
ULONG DIB_16BPP_GetPixel(SURFOBJ*,LONG,LONG);
@@ -101,6 +107,7 @@
BOOLEAN DIB_16BPP_BitBltSrcCopy(PBLTINFO);
BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ*,SURFOBJ*,RECTL*,RECTL*,POINTL*,POINTL,CLIPOBJ*,XLATEOBJ*,ULONG);
BOOLEAN DIB_16BPP_TransparentBlt(SURFOBJ*,SURFOBJ*,RECTL*,POINTL*,XLATEOBJ*,ULONG);
+BOOLEAN DIB_16BPP_ColorFill(SURFOBJ*, RECTL*, ULONG);
VOID DIB_24BPP_PutPixel(SURFOBJ*,LONG,LONG,ULONG);
ULONG DIB_24BPP_GetPixel(SURFOBJ*,LONG,LONG);
@@ -110,6 +117,7 @@
BOOLEAN DIB_24BPP_BitBltSrcCopy(PBLTINFO);
BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ*,SURFOBJ*,RECTL*,RECTL*,POINTL*,POINTL,CLIPOBJ*,XLATEOBJ*,ULONG);
BOOLEAN DIB_24BPP_TransparentBlt(SURFOBJ*,SURFOBJ*,RECTL*,POINTL*,XLATEOBJ*,ULONG);
+BOOLEAN DIB_24BPP_ColorFill(SURFOBJ*, RECTL*, ULONG);
VOID DIB_32BPP_PutPixel(SURFOBJ*,LONG,LONG,ULONG);
ULONG DIB_32BPP_GetPixel(SURFOBJ*,LONG,LONG);
@@ -119,17 +127,14 @@
BOOLEAN DIB_32BPP_BitBltSrcCopy(PBLTINFO);
BOOLEAN DIB_32BPP_StretchBlt(SURFOBJ*,SURFOBJ*,RECTL*,RECTL*,POINTL*,POINTL,CLIPOBJ*,XLATEOBJ*,ULONG);
BOOLEAN DIB_32BPP_TransparentBlt(SURFOBJ*,SURFOBJ*,RECTL*,POINTL*,XLATEOBJ*,ULONG);
+BOOLEAN DIB_32BPP_ColorFill(SURFOBJ*, RECTL*, ULONG);
BOOLEAN FASTCALL DIB_32DstInvert(PBLTINFO);
-BOOLEAN FASTCALL DIB32_Srccopy(PBLTINFO);
-BOOLEAN FASTCALL DIB32_ColorFill(PBLTINFO, ULONG);
+
BOOLEAN FASTCALL DIB32_SrcPaint(PBLTINFO);
BOOLEAN FASTCALL DIB32_NotSrcErase(PBLTINFO);
BOOLEAN FASTCALL DIB32_SrcErase(PBLTINFO);
-BOOLEAN FASTCALL DIB_32PatCopy(PBLTINFO);
-
-
extern unsigned char notmask[2];
extern unsigned char altnotmask[2];
#define MASK1BPP(x) (1<<(7-((x)&7)))
--- trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-07 23:11:35 UTC (rev 15839)
+++ trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-08 16:28:41 UTC (rev 15840)
@@ -45,54 +45,46 @@
VOID
DIB_32BPP_HLine(SURFOBJ *SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
{
- LONG cx = (x2 - x1) ;
- if (cx>0)
- {
+ LONG cx = (x2 - x1) ;
PBYTE byteaddr = SurfObj->pvScan0 + y * SurfObj->lDelta;
PDWORD addr = (PDWORD)byteaddr + x1;
memset4(addr, c, cx);
- }
- else if (cx<0)
- {
- PBYTE byteaddr = SurfObj->pvScan0 + y * SurfObj->lDelta;
- PDWORD addr = (PDWORD)byteaddr + x2;
- cx = (x1 - x2) ;
- memset4(addr, c, cx);
- }
+
+
}
#else
VOID
DIB_32BPP_HLine(SURFOBJ *SurfObj, LONG x1, LONG x2, LONG y, ULONG c)
{
-
-
- PBYTE byteaddr = SurfObj->pvScan0 + y * SurfObj->lDelta;
- PDWORD addr = (PDWORD)byteaddr + x1;
- LONG cx = x1;
- while(cx < x2)
- {
- *addr = (DWORD)c;
- ++addr;
- ++cx;
- }
+ PBYTE byteaddr = SurfObj->pvScan0 + y * SurfObj->lDelta;
+ PDWORD addr = (PDWORD)byteaddr + x1;
+ LONG cx = x1;
+ while(cx < x2)
+ {
+ *addr = (DWORD)c;
+ ++addr;
+ ++cx;
+ }
}
#endif
VOID
DIB_32BPP_VLine(SURFOBJ *SurfObj, LONG x, LONG y1, LONG y2, ULONG c)
{
+
+
PBYTE byteaddr = SurfObj->pvScan0 + y1 * SurfObj->lDelta;
PDWORD addr = (PDWORD)byteaddr + x;
- LONG lDelta = SurfObj->lDelta >> 2; /* >> 2 == / sizeof(DWORD) */
+ LONG lDelta = SurfObj->lDelta >> 2; // >> 2 == / sizeof(DWORD)
byteaddr = (PBYTE)addr;
while(y1++ < y2)
{
- *addr = (DWORD)c;
- addr += lDelta;
- }
-
+ *addr = (DWORD)c;
+ addr += lDelta;
+ }
+
}
BOOLEAN
@@ -315,236 +307,241 @@
BOOLEAN
DIB_32BPP_BitBlt(PBLTINFO BltInfo)
{
- ULONG DestX, DestY;
- ULONG SourceX, SourceY;
- ULONG PatternY = 0;
- ULONG Dest, Source = 0, Pattern = 0;
- BOOL UsesSource;
- BOOL UsesPattern;
- PULONG DestBits;
+ ULONG DestX, DestY;
+ ULONG SourceX, SourceY;
+ ULONG PatternY = 0, PatternX = 0, orgPatternX = 0;
+ ULONG Source = 0, Pattern = 0;
+ BOOL UsesSource;
+ BOOL UsesPattern;
+ PULONG DestBits;
+ ULONG Delta;
- switch (BltInfo->Rop4)
- {
+ switch (BltInfo->Rop4)
+ {
+ case ROP4_DSTINVERT:
+ return DIB_32DstInvert(BltInfo);
+ break;
- case ROP4_BLACKNESS:
- //return(0x00000000);
- return DIB32_ColorFill(BltInfo, 0x00000000);
- break;
+ case ROP4_SRCPAINT:
+ return DIB32_SrcPaint(BltInfo);
+ break;
- case ROP4_WHITENESS:
- //return(0xFFFFFFFF);
- return DIB32_ColorFill(BltInfo, 0xFFFFFFFF);
- break;
+ case ROP4_NOTSRCERASE:
+ return DIB32_NotSrcErase(BltInfo);
+ break;
- case ROP4_SRCCOPY:
- // return(Source);
- return DIB32_Srccopy(BltInfo);
- break;
-
- case ROP4_DSTINVERT:
- // return(~Dest);
- return DIB_32DstInvert(BltInfo);
- break;
-
- case ROP4_SRCPAINT:
- // return(Dest | Source);
- return DIB32_SrcPaint(BltInfo);
- break;
-
- case ROP4_NOTSRCERASE:
- return DIB32_NotSrcErase(BltInfo);
- break;
- case ROP4_SRCERASE:
- return DIB32_SrcErase(BltInfo);
- break;
-
- case ROP4_PATCOPY:
- // return(Pattern);
- return DIB_32PatCopy(BltInfo);
- break;
+ case ROP4_SRCERASE:
+ return DIB32_SrcErase(BltInfo);
+ break;
- default:
- break;
- }
+ default:
+ break;
+ }
UsesSource = ROP4_USES_SOURCE(BltInfo->Rop4);
UsesPattern = ROP4_USES_PATTERN(BltInfo->Rop4);
SourceY = BltInfo->SourcePoint.y;
- DestBits = (PULONG)(
- BltInfo->DestSurface->pvScan0 +
- (BltInfo->DestRect.left << 2) +
- BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
+ DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
+ BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
- if (UsesPattern)
+ Delta = BltInfo->DestSurface->lDelta - ((BltInfo->DestRect.right - BltInfo->DestRect.left) << 2);
+
+ if ((UsesSource) && (BltInfo->PatternSurface))
{
- if (BltInfo->PatternSurface)
+ if (UsesPattern)
{
- PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
- BltInfo->PatternSurface->sizlBitmap.cy;
+ PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
+ BltInfo->PatternSurface->sizlBitmap.cy;
}
- else
+
+ orgPatternX = (BltInfo->DestRect.left + BltInfo->BrushOrigin.x) % BltInfo->PatternSurface->sizlBitmap.cx;
+
+
+ for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
{
- Pattern = BltInfo->Brush->iSolidColor;
- }
- }
+ SourceX = BltInfo->SourcePoint.x;
- for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
- {
- SourceX = BltInfo->SourcePoint.x;
+ PatternX = orgPatternX;
- for (DestX = BltInfo->DestRect.left; DestX < BltInfo->DestRect.right; DestX++, DestBits++, SourceX++)
+ for (DestX = BltInfo->DestRect.left; DestX < BltInfo->DestRect.right; DestX++, DestBits++, SourceX++)
+ {
+
+ Source = DIB_GetSource(BltInfo->SourceSurface, SourceX, SourceY, BltInfo->XlateSourceToDest);
+
+ Pattern = DIB_GetSource(BltInfo->PatternSurface, PatternX, PatternY, BltInfo->XlatePatternToDest);
+
+ *DestBits = DIB_DoRop(BltInfo->Rop4, *DestBits, Source, Pattern);
+
+ PatternX++;
+ PatternX %= BltInfo->PatternSurface->sizlBitmap.cx;
+
+ }
+
+ SourceY++;
+
+ PatternY++;
+ PatternY %= BltInfo->PatternSurface->sizlBitmap.cy;
+
+ DestBits = (PULONG)((ULONG_PTR)DestBits + Delta);
+ }
+ }
+
+ else if ((UsesSource) && (!BltInfo->PatternSurface))
+ {
+ if (UsesPattern)
{
- Dest = *DestBits;
+ Pattern = BltInfo->Brush->iSolidColor;
+ }
- if (UsesSource)
- {
- Source = DIB_GetSource(BltInfo->SourceSurface, SourceX, SourceY, BltInfo->XlateSourceToDest);
- }
+ for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
+ {
+ SourceX = BltInfo->SourcePoint.x;
- if (BltInfo->PatternSurface)
- {
- Pattern = DIB_GetSource(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY, BltInfo->XlatePatternToDest);
+ for (DestX = BltInfo->DestRect.left; DestX < BltInfo->DestRect.right; DestX++, DestBits++, SourceX++)
+ {
+ Source = DIB_GetSource(BltInfo->SourceSurface, SourceX, SourceY, BltInfo->XlateSourceToDest);
+
+ *DestBits = DIB_DoRop(BltInfo->Rop4, *DestBits, Source, Pattern);
}
- *DestBits = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern);
+ SourceY++;
+ DestBits = (PULONG)((ULONG_PTR)DestBits + Delta);
}
+ }
- SourceY++;
- if (BltInfo->PatternSurface)
+ else if ((!UsesSource) && (BltInfo->PatternSurface))
+ {
+ if (UsesPattern)
{
- PatternY++;
- PatternY %= BltInfo->PatternSurface->sizlBitmap.cy;
+ PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) %
+ BltInfo->PatternSurface->sizlBitmap.cy;
}
- DestBits = (PULONG)(
- (ULONG_PTR)DestBits -
- ((BltInfo->DestRect.right - BltInfo->DestRect.left) << 2) +
- BltInfo->DestSurface->lDelta);
- }
- return TRUE;
-}
+ orgPatternX = (BltInfo->DestRect.left + BltInfo->BrushOrigin.x) % BltInfo->PatternSurface->sizlBitmap.cx;
+
+ for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
+ {
-/* optimze functions for bitblt */
+ PatternX = orgPatternX;
-BOOLEAN
-FASTCALL
-DIB_32PatCopy(PBLTINFO BltInfo)
-{
- ULONG delta;
- ULONG DestX, DestY, PatternY;
- PULONG DestBits;
+ for (DestX = BltInfo->DestRect.left; DestX < BltInfo->DestRect.right; DestX++, DestBits++)
+ {
+
+ Pattern = DIB_GetSource(BltInfo->PatternSurface, PatternX, PatternY, BltInfo->XlatePatternToDest);
+ *DestBits = DIB_DoRop(BltInfo->Rop4, *DestBits, 0, Pattern);
- if (!BltInfo->PatternSurface)
- {
- return DIB32_ColorFill(BltInfo, XLATEOBJ_iXlate(BltInfo->XlatePatternToDest, BltInfo->Brush->iSolidColor));
- }
+ PatternX++;
+ PatternX %= BltInfo->PatternSurface->sizlBitmap.cx;
+ }
+
+ PatternY++;
+ PatternY %= BltInfo->PatternSurface->sizlBitmap.cy;
+
+ DestBits = (PULONG)((ULONG_PTR)DestBits + Delta);
+ }
+ }
+ else if ((!UsesSource) && (!BltInfo->PatternSurface))
+ {
+ if (UsesPattern)
+ {
+ Pattern = BltInfo->Brush->iSolidColor;
+ }
- DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
- BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
+ for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
+ {
- delta = BltInfo->DestSurface->lDelta - ((BltInfo->DestRect.right - BltInfo->DestRect.left) <<2);
-
- PatternY = (BltInfo->DestRect.top + BltInfo->BrushOrigin.y) % BltInfo->PatternSurface->sizlBitmap.cy;
-
- for (DestY = BltInfo->DestRect.top; DestY < BltInfo->DestRect.bottom; DestY++)
- {
+ for (DestX = BltInfo->DestRect.left; DestX < BltInfo->DestRect.right; DestX++, DestBits++)
+ {
+ *DestBits = DIB_DoRop(BltInfo->Rop4, *DestBits, 0, Pattern);
+ }
- for (DestX = BltInfo->DestRect.left; DestX < BltInfo->DestRect.right; DestX++, DestBits++)
- {
- *DestBits = DIB_GetSource(BltInfo->PatternSurface, (DestX + BltInfo->BrushOrigin.x) % BltInfo->PatternSurface->sizlBitmap.cx, PatternY, BltInfo->XlatePatternToDest);
+ DestBits = (PULONG)((ULONG_PTR)DestBits + Delta);
}
-
- PatternY++;
- PatternY %= BltInfo->PatternSurface->sizlBitmap.cy;
+ }
- DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
- }
-
-
return TRUE;
}
+/* optimze functions for bitblt */
+
BOOLEAN
FASTCALL
DIB_32DstInvert(PBLTINFO BltInfo)
{
- ULONG DestX, DestY;
- PULONG DestBits;
+ ULONG DestX, DestY;
+ PULONG DestBits;
- ULONG bottom = BltInfo->DestRect.bottom;
- ULONG right = BltInfo->DestRect.right;
- ULONG delta = BltInfo->DestSurface->lDelta - ((BltInfo->DestRect.right - BltInfo->DestRect.left) <<2) ;
+ 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);
+ DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
+ BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
- for (DestY = BltInfo->DestRect.top; DestY < bottom; DestY++)
- {
- for (DestX = BltInfo->DestRect.left; DestX < right; DestX++, DestBits++)
- {
-
- *DestBits = ~*DestBits ;
- }
+ for (DestY = BltInfo->DestRect.top; DestY < bottom; DestY++)
+ {
+ for (DestX = BltInfo->DestRect.left; DestX < right; DestX++, DestBits++)
+ {
+ *DestBits = ~*DestBits ;
+ }
- DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
- }
+ DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
+ }
- /* Return TRUE */
- return TRUE;
+ /* Return TRUE */
+ return TRUE;
}
BOOLEAN
FASTCALL
DIB32_SrcErase(PBLTINFO BltInfo)
{
- BOOLEAN status = FALSE;
+ BOOLEAN status = FALSE;
- switch (BltInfo->SourceSurface->iBitmapFormat)
- {
- case BMF_1BPP:
- case BMF_4BPP:
- case BMF_16BPP:
- case BMF_24BPP:
- case BMF_32BPP:
- {
- ULONG DestX, DestY;
- ULONG SourceX, SourceY;
- PULONG DestBits;
+ switch (BltInfo->SourceSurface->iBitmapFormat)
+ {
+ case BMF_1BPP:
+ case BMF_4BPP:
+ case BMF_16BPP:
+ case BMF_24BPP:
+ 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) ;
+ 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);
+ DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
+ BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
- SourceY = BltInfo->SourcePoint.y;
+ 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_GetSource(BltInfo->SourceSurface, SourceX,
- SourceY, BltInfo->XlateSourceToDest));
- }
+ 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_GetSource(BltInfo->SourceSurface, SourceX,
+ SourceY, BltInfo->XlateSourceToDest));
+ }
- DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
- SourceY++;
- }
-
- }
- status = TRUE;
- break;
+ DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
+ SourceY++;
+ }
+ }
+ status = TRUE;
+ break;
- default:
- break;
- }
+ default:
+ break;
+ }
return status;
}
@@ -553,51 +550,50 @@
FASTCALL
DIB32_NotSrcErase(PBLTINFO BltInfo)
{
- BOOLEAN status = FALSE;
+ BOOLEAN status = FALSE;
- switch (BltInfo->SourceSurface->iBitmapFormat)
- {
- case BMF_1BPP:
- case BMF_4BPP:
- case BMF_16BPP:
- case BMF_24BPP:
- case BMF_32BPP:
- {
- ULONG DestX, DestY;
- ULONG SourceX, SourceY;
- PULONG DestBits;
+ switch (BltInfo->SourceSurface->iBitmapFormat)
+ {
+ case BMF_1BPP:
+ case BMF_4BPP:
+ case BMF_16BPP:
+ case BMF_24BPP:
+ 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) ;
+ 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) +
+ DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
- SourceY = BltInfo->SourcePoint.y;
+ 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_GetSource(BltInfo->SourceSurface, SourceX,
- SourceY, BltInfo->XlateSourceToDest));
- }
+ 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_GetSource(BltInfo->SourceSurface, SourceX,
+ SourceY, BltInfo->XlateSourceToDest));
+ }
- DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
- SourceY++;
- }
+ DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
+ SourceY++;
+ }
- }
- status = TRUE;
- break;
+ }
+ status = TRUE;
+ break;
+ default:
+ break;
+ }
- default:
- break;
- }
-
return status;
}
@@ -605,214 +601,107 @@
FASTCALL
DIB32_SrcPaint(PBLTINFO BltInfo)
{
- BOOLEAN status = FALSE;
+ BOOLEAN status = FALSE;
+
+ switch (BltInfo->SourceSurface->iBitmapFormat)
+ {
+ case BMF_1BPP:
+ case BMF_4BPP:
+ case BMF_16BPP:
+ case BMF_24BPP:
+ {
+ ULONG DestX, DestY;
+ ULONG SourceX, SourceY;
+ PULONG DestBits;
- // return(Source);
- switch (BltInfo->SourceSurface->iBitmapFormat)
- {
- case BMF_1BPP:
- case BMF_4BPP:
- case BMF_16BPP:
- case BMF_24BPP:
- {
- 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) ;
- 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);
+ DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
+ BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
- SourceY = BltInfo->SourcePoint.y;
+ 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_GetSource(BltInfo->SourceSurface, SourceX,
- SourceY, BltInfo->XlateSourceToDest));
- }
+ 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_GetSource(BltInfo->SourceSurface, SourceX,
+ SourceY, BltInfo->XlateSourceToDest));
+ }
- DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
- SourceY++;
- }
+ DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
+ SourceY++;
+ }
- }
- status = TRUE;
- break;
+ }
+ status = TRUE;
+ break;
- case BMF_32BPP:
- {
- ULONG DestX, DestY;
- ULONG SourceX, SourceY;
- PULONG DestBits;
+ 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) ;
+ 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);
+ DestBits = (PULONG)(BltInfo->DestSurface->pvScan0 + (BltInfo->DestRect.left << 2) +
+ BltInfo->DestRect.top * BltInfo->DestSurface->lDelta);
- SourceY = BltInfo->SourcePoint.y;
+ 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));
- }
+ 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++;
- }
+ DestBits = (PULONG)((ULONG_PTR)DestBits + delta);
+ SourceY++;
+ }
- }
- status = TRUE;
- break;
+ }
+ status = TRUE;
+ break;
- default:
- break;
+ default:
+ break;
}
return status;
}
BOOLEAN
-FASTCALL
-DIB32_Srccopy(PBLTINFO BltInfo)
-{
- BOOLEAN status = FALSE;
-
- // return(Source);
- switch (BltInfo->SourceSurface->iBitmapFormat)
- {
- case BMF_1BPP:
- case BMF_4BPP:
- case BMF_16BPP:
- case BMF_24BPP:
- {
[truncated at 1000 lines; 237 more skipped]