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 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 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) { DWORD dwTRop; if (ROP & CAPTUREBLT) return NtGdiStretchBlt(hDCDest, XDest, YDest, Width, Height, hDCSrc, XSrc, YSrc, Width, Height, ROP, crBackColor); dwTRop = ROP & ~(NOMIRRORBITMAP|CAPTUREBLT); /* Forward to NtGdiMaskBlt */ // TODO: What's fl for? LOL not to send this to MaskBit! return NtGdiMaskBlt(hDCDest, XDest, YDest, Width, Height, hDCSrc, XSrc, YSrc, NULL, 0, 0, dwTRop, crBackColor); }