Author: tkreuzer
Date: Sun May 25 14:41:33 2014
New Revision: 63444
URL:
http://svn.reactos.org/svn/reactos?rev=63444&view=rev
Log:
[WIN32K]
Remove obsolete patblt.c (all the code is in bitblt.c)
Removed:
trunk/reactos/win32ss/gdi/ntgdi/patblt.c
Removed: trunk/reactos/win32ss/gdi/ntgdi/patblt.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/patblt.c…
==============================================================================
--- trunk/reactos/win32ss/gdi/ntgdi/patblt.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/gdi/ntgdi/patblt.c (removed)
@@ -1,972 +0,0 @@
-/*
- * COPYRIGHT: GNU GPL, See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * PURPOSE: Bit blit functions
- * FILE: subsys/win32k/objects/bitblt.c
- * PROGRAMER: Unknown
- */
-
-#include <win32k.h>
-
-#define NDEBUG
-#include <debug.h>
-
-#define ROP_USES_SOURCE(Rop) (((((Rop) & 0xCC0000) >> 2) != ((Rop) &
0x330000)) || ((((Rop) & 0xCC000000) >> 2) != ((Rop) & 0x33000000)))
-#define ROP_USES_MASK(Rop) (((Rop) & 0xFF000000) != (((Rop) & 0xff0000)
<< 8))
-
-#define FIXUP_ROP(Rop) if(((Rop) & 0xFF000000) == 0) Rop = MAKEROP4((Rop), (Rop))
-#define ROP_TO_ROP4(Rop) ((Rop) >> 16)
-
-BOOL APIENTRY
-NtGdiAlphaBlend(
- HDC hDCDest,
- LONG XOriginDest,
- LONG YOriginDest,
- LONG WidthDest,
- LONG HeightDest,
- HDC hDCSrc,
- LONG XOriginSrc,
- LONG YOriginSrc,
- LONG WidthSrc,
- LONG HeightSrc,
- BLENDFUNCTION BlendFunc,
- HANDLE hcmXform)
-{
- PDC DCDest;
- PDC DCSrc;
- HDC ahDC[2];
- PGDIOBJ apObj[2];
- SURFACE *BitmapDest, *BitmapSrc;
- RECTL DestRect, SourceRect;
- BOOL bResult;
- EXLATEOBJ exlo;
- BLENDOBJ BlendObj;
- BlendObj.BlendFunction = BlendFunc;
-
- if (WidthDest < 0 || HeightDest < 0 || WidthSrc < 0 || HeightSrc < 0)
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
-
- DPRINT("Locking DCs\n");
- ahDC[0] = hDCDest;
- ahDC[1] = hDCSrc ;
- if (!GDIOBJ_bLockMultipleObjects(2, ahDC, apObj, GDIObjType_DC_TYPE))
- {
- DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to
NtGdiAlphaBlend\n", hDCDest, hDCSrc);
- EngSetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
- }
- DCDest = apObj[0];
- DCSrc = apObj[1];
-
- if (DCDest->dctype == DC_TYPE_INFO || DCDest->dctype == DCTYPE_INFO)
- {
- GDIOBJ_vUnlockObject(&DCSrc->BaseObject);
- GDIOBJ_vUnlockObject(&DCDest->BaseObject);
- /* Yes, Windows really returns TRUE in this case */
- return TRUE;
- }
-
- DestRect.left = XOriginDest;
- DestRect.top = YOriginDest;
- DestRect.right = XOriginDest + WidthDest;
- DestRect.bottom = YOriginDest + HeightDest;
- IntLPtoDP(DCDest, (LPPOINT)&DestRect, 2);
-
- DestRect.left += DCDest->ptlDCOrig.x;
- DestRect.top += DCDest->ptlDCOrig.y;
- DestRect.right += DCDest->ptlDCOrig.x;
- DestRect.bottom += DCDest->ptlDCOrig.y;
-
- SourceRect.left = XOriginSrc;
- SourceRect.top = YOriginSrc;
- SourceRect.right = XOriginSrc + WidthSrc;
- SourceRect.bottom = YOriginSrc + HeightSrc;
- IntLPtoDP(DCSrc, (LPPOINT)&SourceRect, 2);
-
- SourceRect.left += DCSrc->ptlDCOrig.x;
- SourceRect.top += DCSrc->ptlDCOrig.y;
- SourceRect.right += DCSrc->ptlDCOrig.x;
- SourceRect.bottom += DCSrc->ptlDCOrig.y;
-
- if (!DestRect.right ||
- !DestRect.bottom ||
- !SourceRect.right ||
- !SourceRect.bottom)
- {
- GDIOBJ_vUnlockObject(&DCSrc->BaseObject);
- GDIOBJ_vUnlockObject(&DCDest->BaseObject);
- return TRUE;
- }
-
- /* Prepare DCs for blit */
- DPRINT("Preparing DCs for blit\n");
- DC_vPrepareDCsForBlit(DCDest, DestRect, DCSrc, SourceRect);
-
- /* Determine surfaces to be used in the bitblt */
- BitmapDest = DCDest->dclevel.pSurface;
- if (!BitmapDest)
- {
- bResult = FALSE ;
- goto leave ;
- }
-
- BitmapSrc = DCSrc->dclevel.pSurface;
- if (!BitmapSrc)
- {
- bResult = FALSE;
- goto leave;
- }
-
- /* Create the XLATEOBJ. */
- EXLATEOBJ_vInitXlateFromDCs(&exlo, DCSrc, DCDest);
-
- /* Perform the alpha blend operation */
- DPRINT("Performing the alpha blend\n");
- bResult = IntEngAlphaBlend(&BitmapDest->SurfObj,
- &BitmapSrc->SurfObj,
- DCDest->rosdc.CombinedClip,
- &exlo.xlo,
- &DestRect,
- &SourceRect,
- &BlendObj);
-
- EXLATEOBJ_vCleanup(&exlo);
-leave :
- DPRINT("Finishing blit\n");
- DC_vFinishBlit(DCDest, DCSrc);
- GDIOBJ_vUnlockObject(&DCSrc->BaseObject);
- GDIOBJ_vUnlockObject(&DCDest->BaseObject);
-
- return bResult;
-}
-
-BOOL APIENTRY
-NtGdiBitBlt(
- HDC hDCDest,
- INT XDest,
- INT YDest,
- INT Width,
- INT Height,
- HDC hDCSrc,
- INT XSrc,
- INT YSrc,
- DWORD ROP,
- IN DWORD crBackColor,
- IN FLONG fl)
-{
- /* Forward to NtGdiMaskBlt */
- // TODO: What's fl for?
- return NtGdiMaskBlt(hDCDest,
- XDest,
- YDest,
- Width,
- Height,
- hDCSrc,
- XSrc,
- YSrc,
- NULL,
- 0,
- 0,
- ROP,
- crBackColor);
-}
-
-BOOL APIENTRY
-NtGdiTransparentBlt(
- HDC hdcDst,
- INT xDst,
- INT yDst,
- INT cxDst,
- INT cyDst,
- HDC hdcSrc,
- INT xSrc,
- INT ySrc,
- INT cxSrc,
- INT cySrc,
- COLORREF TransColor)
-{
- PDC DCDest, DCSrc;
- HDC ahDC[2];
- PGDIOBJ apObj[2];
- RECTL rcDest, rcSrc;
- SURFACE *BitmapDest, *BitmapSrc = NULL;
- ULONG TransparentColor = 0;
- BOOL Ret = FALSE;
- EXLATEOBJ exlo;
-
- DPRINT("Locking DCs\n");
- ahDC[0] = hdcDst;
- ahDC[1] = hdcSrc ;
- if (!GDIOBJ_bLockMultipleObjects(2, ahDC, apObj, GDIObjType_DC_TYPE))
- {
- DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to
NtGdiAlphaBlend\n", hdcDst, hdcSrc);
- EngSetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
- }
- DCDest = apObj[0];
- DCSrc = apObj[1];
-
- if (DCDest->dctype == DC_TYPE_INFO || DCDest->dctype == DCTYPE_INFO)
- {
- GDIOBJ_vUnlockObject(&DCSrc->BaseObject);
- GDIOBJ_vUnlockObject(&DCDest->BaseObject);
- /* Yes, Windows really returns TRUE in this case */
- return TRUE;
- }
-
- rcDest.left = xDst;
- rcDest.top = yDst;
- rcDest.right = rcDest.left + cxDst;
- rcDest.bottom = rcDest.top + cyDst;
- IntLPtoDP(DCDest, (LPPOINT)&rcDest, 2);
-
- rcDest.left += DCDest->ptlDCOrig.x;
- rcDest.top += DCDest->ptlDCOrig.y;
- rcDest.right += DCDest->ptlDCOrig.x;
- rcDest.bottom += DCDest->ptlDCOrig.y;
-
- rcSrc.left = xSrc;
- rcSrc.top = ySrc;
- rcSrc.right = rcSrc.left + cxSrc;
- rcSrc.bottom = rcSrc.top + cySrc;
- IntLPtoDP(DCSrc, (LPPOINT)&rcSrc, 2);
-
- rcSrc.left += DCSrc->ptlDCOrig.x;
- rcSrc.top += DCSrc->ptlDCOrig.y;
- rcSrc.right += DCSrc->ptlDCOrig.x;
- rcSrc.bottom += DCSrc->ptlDCOrig.y;
-
- /* Prepare for blit */
- DC_vPrepareDCsForBlit(DCDest, rcDest, DCSrc, rcSrc);
-
- BitmapDest = DCDest->dclevel.pSurface;
- if (!BitmapDest)
- {
- goto done;
- }
-
- BitmapSrc = DCSrc->dclevel.pSurface;
- if (!BitmapSrc)
- {
- goto done;
- }
-
- /* Translate Transparent (RGB) Color to the source palette */
- EXLATEOBJ_vInitialize(&exlo, &gpalRGB, BitmapSrc->ppal, 0, 0, 0);
- TransparentColor = XLATEOBJ_iXlate(&exlo.xlo, (ULONG)TransColor);
- EXLATEOBJ_vCleanup(&exlo);
-
- EXLATEOBJ_vInitXlateFromDCs(&exlo, DCSrc, DCDest);
-
- Ret = IntEngTransparentBlt(&BitmapDest->SurfObj, &BitmapSrc->SurfObj,
- DCDest->rosdc.CombinedClip, &exlo.xlo, &rcDest, &rcSrc,
- TransparentColor, 0);
-
- EXLATEOBJ_vCleanup(&exlo);
-
-done:
- DC_vFinishBlit(DCDest, DCSrc);
- GDIOBJ_vUnlockObject(&DCDest->BaseObject);
- GDIOBJ_vUnlockObject(&DCSrc->BaseObject);
-
- return Ret;
-}
-
-BOOL APIENTRY
-NtGdiMaskBlt(
- HDC hdcDest,
- INT nXDest,
- INT nYDest,
- INT nWidth,
- INT nHeight,
- HDC hdcSrc,
- INT nXSrc,
- INT nYSrc,
- HBITMAP hbmMask,
- INT xMask,
- INT yMask,
- DWORD dwRop,
- IN DWORD crBackColor)
-{
- PDC DCDest;
- PDC DCSrc = NULL;
- HDC ahDC[2];
- PGDIOBJ apObj[2];
- PDC_ATTR pdcattr = NULL;
- SURFACE *BitmapDest, *BitmapSrc = NULL, *psurfMask = NULL;
- RECTL DestRect, SourceRect;
- POINTL SourcePoint, MaskPoint;
- BOOL Status = FALSE;
- EXLATEOBJ exlo;
- XLATEOBJ *XlateObj = NULL;
- BOOL UsesSource = ROP_USES_SOURCE(dwRop);
- BOOL UsesMask;
-
- FIXUP_ROP(dwRop);
-
- UsesMask = ROP_USES_MASK(dwRop);
-
- //DPRINT1("dwRop : 0x%08x\n", dwRop);
- if (!hdcDest || (UsesSource && !hdcSrc))
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
-
- /* Take care of mask bitmap */
- if(hbmMask)
- {
- psurfMask = SURFACE_ShareLockSurface(hbmMask);
- if(!psurfMask)
- {
- EngSetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
- }
- }
-
- if(UsesMask)
- {
- if(!psurfMask)
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
- if(gajBitsPerFormat[psurfMask->SurfObj.iBitmapFormat] != 1)
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
- SURFACE_ShareUnlockSurface(psurfMask);
- return FALSE;
- }
- }
- else if(psurfMask)
- {
- DPRINT1("Getting Mask bitmap without needing it?\n");
- SURFACE_ShareUnlockSurface(psurfMask);
- psurfMask = NULL;
- }
- MaskPoint.x = xMask;
- MaskPoint.y = yMask;
-
- /* Take care of source and destination bitmap */
- DPRINT("Locking DCs\n");
- ahDC[0] = hdcDest;
- ahDC[1] = UsesSource ? hdcSrc : NULL;
- if (!GDIOBJ_bLockMultipleObjects(2, ahDC, apObj, GDIObjType_DC_TYPE))
- {
- DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to
NtGdiAlphaBlend\n", hdcDest, hdcSrc);
- EngSetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
- }
- DCDest = apObj[0];
- DCSrc = apObj[1];
-
- ASSERT(DCDest);
- if (NULL == DCDest)
- {
- if(DCSrc) DC_UnlockDc(DCSrc);
- DPRINT("Invalid destination dc handle (0x%08x) passed to
NtGdiBitBlt\n", hdcDest);
- return FALSE;
- }
-
- if (DCDest->dctype == DC_TYPE_INFO)
- {
- if(DCSrc) DC_UnlockDc(DCSrc);
- DC_UnlockDc(DCDest);
- /* Yes, Windows really returns TRUE in this case */
- return TRUE;
- }
-
- if (UsesSource)
- {
- ASSERT(DCSrc);
- if (DCSrc->dctype == DC_TYPE_INFO)
- {
- DC_UnlockDc(DCDest);
- DC_UnlockDc(DCSrc);
- /* Yes, Windows really returns TRUE in this case */
- return TRUE;
- }
- }
-
- pdcattr = DCDest->pdcattr;
-
- DestRect.left = nXDest;
- DestRect.top = nYDest;
- DestRect.right = nXDest + nWidth;
- DestRect.bottom = nYDest + nHeight;
- IntLPtoDP(DCDest, (LPPOINT)&DestRect, 2);
-
- DestRect.left += DCDest->ptlDCOrig.x;
- DestRect.top += DCDest->ptlDCOrig.y;
- DestRect.right += DCDest->ptlDCOrig.x;
- DestRect.bottom += DCDest->ptlDCOrig.y;
-
- SourcePoint.x = nXSrc;
- SourcePoint.y = nYSrc;
-
- if (UsesSource)
- {
- IntLPtoDP(DCSrc, (LPPOINT)&SourcePoint, 1);
-
- SourcePoint.x += DCSrc->ptlDCOrig.x;
- SourcePoint.y += DCSrc->ptlDCOrig.y;
- /* Calculate Source Rect */
- SourceRect.left = SourcePoint.x;
- SourceRect.top = SourcePoint.y;
- SourceRect.right = SourcePoint.x + DestRect.right - DestRect.left;
- SourceRect.bottom = SourcePoint.y + DestRect.bottom - DestRect.top ;
- }
-
- /* Prepare blit */
- DC_vPrepareDCsForBlit(DCDest, DestRect, DCSrc, SourceRect);
-
- if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
- DC_vUpdateFillBrush(DCDest);
-
- /* Determine surfaces to be used in the bitblt */
- BitmapDest = DCDest->dclevel.pSurface;
- if (!BitmapDest)
- goto cleanup;
-
- if (UsesSource)
- {
- {
- BitmapSrc = DCSrc->dclevel.pSurface;
- if (!BitmapSrc)
- goto cleanup;
- }
- }
-
- /* Create the XLATEOBJ. */
- if (UsesSource)
- {
- EXLATEOBJ_vInitXlateFromDCs(&exlo, DCSrc, DCDest);
- XlateObj = &exlo.xlo;
- }
-
-
- /* Perform the bitblt operation */
- Status = IntEngBitBlt(&BitmapDest->SurfObj,
- BitmapSrc ? &BitmapSrc->SurfObj : NULL,
- psurfMask ? &psurfMask->SurfObj : NULL,
- DCDest->rosdc.CombinedClip,
- XlateObj,
- &DestRect,
- &SourcePoint,
- &MaskPoint,
- &DCDest->eboFill.BrushObject,
- &DCDest->dclevel.pbrFill->ptOrigin,
- ROP_TO_ROP4(dwRop));
-
- if (UsesSource)
- EXLATEOBJ_vCleanup(&exlo);
-cleanup:
- DC_vFinishBlit(DCDest, DCSrc);
- if (UsesSource)
- {
- DC_UnlockDc(DCSrc);
- }
- DC_UnlockDc(DCDest);
- if(psurfMask) SURFACE_ShareUnlockSurface(psurfMask);
-
- return Status;
-}
-
-BOOL
-APIENTRY
-NtGdiPlgBlt(
- IN HDC hdcTrg,
- IN LPPOINT pptlTrg,
- IN HDC hdcSrc,
- IN INT xSrc,
- IN INT ySrc,
- IN INT cxSrc,
- IN INT cySrc,
- IN HBITMAP hbmMask,
- IN INT xMask,
- IN INT yMask,
- IN DWORD crBackColor)
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-BOOL APIENTRY
-GreStretchBltMask(
- HDC hDCDest,
- INT XOriginDest,
- INT YOriginDest,
- INT WidthDest,
- INT HeightDest,
- HDC hDCSrc,
- INT XOriginSrc,
- INT YOriginSrc,
- INT WidthSrc,
- INT HeightSrc,
- DWORD ROP,
- IN DWORD dwBackColor,
- HDC hDCMask,
- INT XOriginMask,
- INT YOriginMask)
-{
- PDC DCDest;
- PDC DCSrc = NULL;
- PDC DCMask = NULL;
- HDC ahDC[3];
- PGDIOBJ apObj[3];
- PDC_ATTR pdcattr;
- SURFACE *BitmapDest, *BitmapSrc = NULL;
- SURFACE *BitmapMask = NULL;
- RECTL DestRect;
- RECTL SourceRect;
- POINTL MaskPoint;
- BOOL Status = FALSE;
- EXLATEOBJ exlo;
- XLATEOBJ *XlateObj = NULL;
- POINTL BrushOrigin;
- BOOL UsesSource;
- BOOL UsesMask;
-
- FIXUP_ROP(ROP);
- UsesSource = ROP_USES_SOURCE(ROP);
- UsesMask = ROP_USES_MASK(ROP);
-
- if (0 == WidthDest || 0 == HeightDest || 0 == WidthSrc || 0 == HeightSrc)
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
- return TRUE;
- }
-
- if (!hDCDest || (UsesSource && !hDCSrc) || (UsesMask && !hDCMask))
- {
- EngSetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
-
- ahDC[0] = hDCDest;
- ahDC[1] = UsesSource ? hDCSrc : NULL;
- ahDC[2] = UsesMask ? hDCMask : NULL;
- if (!GDIOBJ_bLockMultipleObjects(3, ahDC, apObj, GDIObjType_DC_TYPE))
- {
- DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to
NtGdiAlphaBlend\n", hDCDest, hDCSrc);
- EngSetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
- }
- DCDest = apObj[0];
- DCSrc = apObj[1];
- DCMask = apObj[2];
-
- if (DCDest->dctype == DC_TYPE_INFO)
- {
- if(DCSrc) GDIOBJ_vUnlockObject(&DCSrc->BaseObject);
- if(DCMask) GDIOBJ_vUnlockObject(&DCMask->BaseObject);
- GDIOBJ_vUnlockObject(&DCDest->BaseObject);
- /* Yes, Windows really returns TRUE in this case */
- return TRUE;
- }
-
- if (UsesSource)
- {
- if (DCSrc->dctype == DC_TYPE_INFO)
- {
- GDIOBJ_vUnlockObject(&DCDest->BaseObject);
- GDIOBJ_vUnlockObject(&DCSrc->BaseObject);
- if(DCMask) GDIOBJ_vUnlockObject(&DCMask->BaseObject);
- /* Yes, Windows really returns TRUE in this case */
- return TRUE;
- }
- }
-
- pdcattr = DCDest->pdcattr;
-
- DestRect.left = XOriginDest;
- DestRect.top = YOriginDest;
- DestRect.right = XOriginDest+WidthDest;
- DestRect.bottom = YOriginDest+HeightDest;
- IntLPtoDP(DCDest, (LPPOINT)&DestRect, 2);
-
- DestRect.left += DCDest->ptlDCOrig.x;
- DestRect.top += DCDest->ptlDCOrig.y;
- DestRect.right += DCDest->ptlDCOrig.x;
- DestRect.bottom += DCDest->ptlDCOrig.y;
-
- SourceRect.left = XOriginSrc;
- SourceRect.top = YOriginSrc;
- SourceRect.right = XOriginSrc+WidthSrc;
- SourceRect.bottom = YOriginSrc+HeightSrc;
-
- if (UsesSource)
- {
- IntLPtoDP(DCSrc, (LPPOINT)&SourceRect, 2);
-
- SourceRect.left += DCSrc->ptlDCOrig.x;
- SourceRect.top += DCSrc->ptlDCOrig.y;
- SourceRect.right += DCSrc->ptlDCOrig.x;
- SourceRect.bottom += DCSrc->ptlDCOrig.y;
- }
-
- BrushOrigin.x = 0;
- BrushOrigin.y = 0;
-
- /* Only prepare Source and Dest, hdcMask represents a DIB */
- DC_vPrepareDCsForBlit(DCDest, DestRect, DCSrc, SourceRect);
-
- if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
- DC_vUpdateFillBrush(DCDest);
-
- /* Determine surfaces to be used in the bitblt */
- BitmapDest = DCDest->dclevel.pSurface;
- if (BitmapDest == NULL)
- goto failed;
- if (UsesSource)
- {
- BitmapSrc = DCSrc->dclevel.pSurface;
- if (BitmapSrc == NULL)
- goto failed;
-
- /* Create the XLATEOBJ. */
- EXLATEOBJ_vInitXlateFromDCs(&exlo, DCSrc, DCDest);
- XlateObj = &exlo.xlo;
- }
-
- /* Offset the brush */
- BrushOrigin.x += DCDest->ptlDCOrig.x;
- BrushOrigin.y += DCDest->ptlDCOrig.y;
-
- /* Make mask surface for source surface */
- if (BitmapSrc && DCMask)
- {
- BitmapMask = DCMask->dclevel.pSurface;
- if (BitmapMask &&
- (BitmapMask->SurfObj.sizlBitmap.cx < WidthSrc ||
- BitmapMask->SurfObj.sizlBitmap.cy < HeightSrc))
- {
- DPRINT1("%dx%d mask is smaller than %dx%d bitmap\n",
- BitmapMask->SurfObj.sizlBitmap.cx,
BitmapMask->SurfObj.sizlBitmap.cy,
- WidthSrc, HeightSrc);
- EXLATEOBJ_vCleanup(&exlo);
- goto failed;
- }
- /* Create mask offset point */
- MaskPoint.x = XOriginMask;
- MaskPoint.y = YOriginMask;
- IntLPtoDP(DCMask, &MaskPoint, 1);
- MaskPoint.x += DCMask->ptlDCOrig.x;
- MaskPoint.y += DCMask->ptlDCOrig.y;
- }
-
- /* Perform the bitblt operation */
- Status = IntEngStretchBlt(&BitmapDest->SurfObj,
- &BitmapSrc->SurfObj,
- BitmapMask ? &BitmapMask->SurfObj : NULL,
- DCDest->rosdc.CombinedClip,
- XlateObj,
- &DestRect,
- &SourceRect,
- BitmapMask ? &MaskPoint : NULL,
- &DCDest->eboFill.BrushObject,
- &BrushOrigin,
- ROP_TO_ROP4(ROP));
- if (UsesSource)
- {
- EXLATEOBJ_vCleanup(&exlo);
- }
-
-failed:
- DC_vFinishBlit(DCDest, DCSrc);
- if (UsesSource)
- {
- DC_UnlockDc(DCSrc);
- }
- if (DCMask)
- {
- DC_UnlockDc(DCMask);
- }
- DC_UnlockDc(DCDest);
-
- return Status;
-}
-
-
-BOOL APIENTRY
-NtGdiStretchBlt(
- HDC hDCDest,
- INT XOriginDest,
- INT YOriginDest,
- INT WidthDest,
- INT HeightDest,
- HDC hDCSrc,
- INT XOriginSrc,
- INT YOriginSrc,
- INT WidthSrc,
- INT HeightSrc,
- DWORD ROP,
- IN DWORD dwBackColor)
-{
- return GreStretchBltMask(
- hDCDest,
- XOriginDest,
- YOriginDest,
- WidthDest,
- HeightDest,
- hDCSrc,
- XOriginSrc,
- YOriginSrc,
- WidthSrc,
- HeightSrc,
- ROP,
- dwBackColor,
- NULL,
- 0,
- 0);
-}
-
-
-BOOL FASTCALL
-IntPatBlt(
- PDC pdc,
- INT XLeft,
- INT YLeft,
- INT Width,
- INT Height,
- DWORD dwRop,
- PBRUSH pbrush)
-{
- RECTL DestRect;
- SURFACE *psurf;
- EBRUSHOBJ eboFill ;
- POINTL BrushOrigin;
- BOOL ret;
-
- ASSERT(pbrush);
-
- FIXUP_ROP(dwRop);
-
- if (pbrush->flAttrs & GDIBRUSH_IS_NULL)
- {
- return TRUE;
- }
-
- if (Width > 0)
- {
- DestRect.left = XLeft;
- DestRect.right = XLeft + Width;
- }
- else
- {
- DestRect.left = XLeft + Width + 1;
- DestRect.right = XLeft + 1;
- }
-
- if (Height > 0)
- {
- DestRect.top = YLeft;
- DestRect.bottom = YLeft + Height;
- }
- else
- {
- DestRect.top = YLeft + Height + 1;
- DestRect.bottom = YLeft + 1;
- }
-
- IntLPtoDP(pdc, (LPPOINT)&DestRect, 2);
-
- DestRect.left += pdc->ptlDCOrig.x;
- DestRect.top += pdc->ptlDCOrig.y;
- DestRect.right += pdc->ptlDCOrig.x;
- DestRect.bottom += pdc->ptlDCOrig.y;
-#ifdef _USE_DIBLIB_
- BrushOrigin.x = pbrush->ptOrigin.x + pdc->ptlDCOrig.x + XLeft;
- BrushOrigin.y = pbrush->ptOrigin.y + pdc->ptlDCOrig.y + YLeft;
-#else
- BrushOrigin.x = pbrush->ptOrigin.x + pdc->ptlDCOrig.x;
- BrushOrigin.y = pbrush->ptOrigin.y + pdc->ptlDCOrig.y;
-#endif
-
- DC_vPrepareDCsForBlit(pdc, DestRect, NULL, DestRect);
-
- psurf = pdc->dclevel.pSurface;
-
- if (pdc->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
- DC_vUpdateFillBrush(pdc);
-
- EBRUSHOBJ_vInit(&eboFill, pbrush, pdc);
-
- ret = IntEngBitBlt(
- &psurf->SurfObj,
- NULL,
- NULL,
- pdc->rosdc.CombinedClip,
- NULL,
- &DestRect,
- NULL,
- NULL,
- &eboFill.BrushObject,
- &BrushOrigin,
- ROP_TO_ROP4(dwRop));
-
- DC_vFinishBlit(pdc, NULL);
-
- EBRUSHOBJ_vCleanup(&eboFill);
-
- return ret;
-}
-
-BOOL FASTCALL
-IntGdiPolyPatBlt(
- HDC hDC,
- DWORD dwRop,
- PPATRECT pRects,
- INT cRects,
- ULONG Reserved)
-{
- INT i;
- PBRUSH pbrush;
- PDC pdc;
-
- pdc = DC_LockDc(hDC);
- if (!pdc)
- {
- EngSetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
- }
-
- if (pdc->dctype == DC_TYPE_INFO)
- {
- DC_UnlockDc(pdc);
- /* Yes, Windows really returns TRUE in this case */
- return TRUE;
- }
-
- for (i = 0; i < cRects; i++)
- {
- pbrush = BRUSH_ShareLockBrush(pRects->hBrush);
- if(pbrush != NULL)
- {
- IntPatBlt(
- pdc,
- pRects->r.left,
- pRects->r.top,
- pRects->r.right,
- pRects->r.bottom,
- dwRop,
- pbrush);
- BRUSH_ShareUnlockBrush(pbrush);
- }
- pRects++;
- }
-
- DC_UnlockDc(pdc);
-
- return TRUE;
-}
-
-BOOL APIENTRY
-NtGdiPatBlt(
- HDC hDC,
- INT XLeft,
- INT YLeft,
- INT Width,
- INT Height,
- DWORD ROP)
-{
- PBRUSH pbrush;
- DC *dc;
- PDC_ATTR pdcattr;
- BOOL ret;
-
- BOOL UsesSource = ROP_USES_SOURCE(ROP);
- if (UsesSource)
- {
- /* In this case we call on GdiMaskBlt */
- return NtGdiMaskBlt(hDC, XLeft, YLeft, Width, Height, 0,0,0,0,0,0,ROP,0);
- }
-
- dc = DC_LockDc(hDC);
- if (dc == NULL)
- {
- EngSetLastError(ERROR_INVALID_HANDLE);
- return FALSE;
- }
- if (dc->dctype == DC_TYPE_INFO)
- {
- DC_UnlockDc(dc);
- DPRINT1("NtGdiPatBlt on info DC!\n");
- /* Yes, Windows really returns TRUE in this case */
- return TRUE;
- }
-
- pdcattr = dc->pdcattr;
-
- if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
- DC_vUpdateFillBrush(dc);
-
- pbrush = BRUSH_ShareLockBrush(pdcattr->hbrush);
- if (pbrush == NULL)
- {
- EngSetLastError(ERROR_INVALID_HANDLE);
- DC_UnlockDc(dc);
- return FALSE;
- }
-
- ret = IntPatBlt(dc, XLeft, YLeft, Width, Height, ROP, pbrush);
-
- BRUSH_ShareUnlockBrush(pbrush);
- DC_UnlockDc(dc);
-
- return ret;
-}
-
-BOOL APIENTRY
-NtGdiPolyPatBlt(
- HDC hDC,
- DWORD dwRop,
- IN PPOLYPATBLT pRects,
- IN DWORD cRects,
- IN DWORD Mode)
-{
- PPATRECT rb = NULL;
- NTSTATUS Status = STATUS_SUCCESS;
- BOOL Ret;
-
- if (cRects > 0)
- {
- rb = ExAllocatePoolWithTag(PagedPool, sizeof(PATRECT) * cRects,
GDITAG_PLGBLT_DATA);
- if (!rb)
- {
- EngSetLastError(ERROR_NOT_ENOUGH_MEMORY);
- return FALSE;
- }
- _SEH2_TRY
- {
- ProbeForRead(pRects,
- cRects * sizeof(PATRECT),
- 1);
- RtlCopyMemory(rb,
- pRects,
- cRects * sizeof(PATRECT));
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- Status = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
-
- if (!NT_SUCCESS(Status))
- {
- ExFreePoolWithTag(rb, GDITAG_PLGBLT_DATA);
- SetLastNtError(Status);
- return FALSE;
- }
- }
-
- Ret = IntGdiPolyPatBlt(hDC, dwRop, rb, cRects, Mode);
-
- if (cRects > 0)
- ExFreePoolWithTag(rb, GDITAG_PLGBLT_DATA);
-
- return Ret;
-}