diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp index e9eb199..6a73690 100755 --- a/qxldod/QxlDod.cpp +++ b/qxldod/QxlDod.cpp @@ -3752,20 +3752,26 @@ QxlDevice::ExecutePresentDisplayOnly( BltBits(&DstBltInfo, &SrcBltInfo, 1, - pDestRect); + pDestRect, + pSourcePoint); } // Copy all the dirty rects from source image to video frame buffer. for (UINT i = 0; i < ctx->NumDirtyRects; i++) { RECT* pDirtyRect = &ctx->DirtyRect[i]; - DbgPrint(TRACE_LEVEL_INFORMATION, ("--- %d pDirtyRect->bottom = %ld, pDirtyRect->left = %ld, pDirtyRect->right = %ld, pDirtyRect->top = %ld\n", + POINT sourcePoint; + sourcePoint.x = pDirtyRect->left; + sourcePoint.y = pDirtyRect->top; + + DbgPrint(TRACE_LEVEL_INFORMATION, ("--- %d pDirtyRect->bottom = %ld, pDirtyRect->left = %ld, pDirtyRect->right = %ld, pDirtyRect->top = %ld\n", i, pDirtyRect->bottom, pDirtyRect->left, pDirtyRect->right, pDirtyRect->top)); BltBits(&DstBltInfo, &SrcBltInfo, 1, - pDirtyRect); + pDirtyRect, + &sourcePoint); } // Unmap unmap and unlock the pages. @@ -4170,7 +4176,8 @@ VOID QxlDevice::BltBits ( BLT_INFO* pDst, CONST BLT_INFO* pSrc, UINT NumRects, - _In_reads_(NumRects) CONST RECT *pRects) + _In_reads_(NumRects) CONST RECT *pRects, + POINT* pSourcePoint) { QXLDrawable *drawable; Resource *image_res; @@ -4233,8 +4240,8 @@ VOID QxlDevice::BltBits ( internal->image.bitmap.stride = line_size; UINT8* src = (UINT8*)pSrc->pBits+ - (pRect->top) * pSrc->Pitch + - (pRect->left * 4); + (pSourcePoint->y) * pSrc->Pitch + + (pSourcePoint->x * 4); UINT8* src_end = src - pSrc->Pitch; src += pSrc->Pitch * (height - 1); UINT8* dest = chunk->data; diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h index 8675e53..b9b793a 100755 --- a/qxldod/QxlDod.h +++ b/qxldod/QxlDod.h @@ -470,7 +470,8 @@ protected: VOID BltBits (BLT_INFO* pDst, CONST BLT_INFO* pSrc, UINT NumRects, - _In_reads_(NumRects) CONST RECT *pRects); + _In_reads_(NumRects) CONST RECT *pRects, + POINT* pSourcePoint); QXLDrawable *Drawable(UINT8 type, CONST RECT *area, CONST RECT *clip,