gdi32: Pass the source/dest visible rectangles to the StretchBlt driver entry point.
This commit is contained in:
parent
1805f123b0
commit
8bd130b923
|
@ -165,9 +165,8 @@ static void get_vis_rectangles( DC *dc_dst, struct bitblt_coords *dst,
|
|||
}
|
||||
|
||||
/* nulldrv fallback implementation using StretchDIBits */
|
||||
BOOL CDECL nulldrv_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst, INT heightDst,
|
||||
PHYSDEV src_dev, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc,
|
||||
DWORD rop )
|
||||
BOOL CDECL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
|
||||
PHYSDEV src_dev, struct bitblt_coords *src, DWORD rop )
|
||||
{
|
||||
DC *dc = get_nulldrv_dc( dst_dev );
|
||||
BITMAP bm;
|
||||
|
@ -175,21 +174,10 @@ BOOL CDECL nulldrv_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst
|
|||
HBITMAP hbm;
|
||||
LPVOID bits;
|
||||
INT lines;
|
||||
POINT pts[2];
|
||||
|
||||
/* make sure we have a real implementation for StretchDIBits */
|
||||
if (GET_DC_PHYSDEV( dc, pStretchDIBits ) == dst_dev) return 0;
|
||||
|
||||
pts[0].x = xSrc;
|
||||
pts[0].y = ySrc;
|
||||
pts[1].x = xSrc + widthSrc;
|
||||
pts[1].y = ySrc + heightSrc;
|
||||
LPtoDP( src_dev->hdc, pts, 2 );
|
||||
xSrc = pts[0].x;
|
||||
ySrc = pts[0].y;
|
||||
widthSrc = pts[1].x - pts[0].x;
|
||||
heightSrc = pts[1].y - pts[0].y;
|
||||
|
||||
if (GetObjectType( src_dev->hdc ) != OBJ_MEMDC) return FALSE;
|
||||
if (!GetObjectW( GetCurrentObject( src_dev->hdc, OBJ_BITMAP ), sizeof(bm), &bm )) return FALSE;
|
||||
|
||||
|
@ -213,11 +201,11 @@ BOOL CDECL nulldrv_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst
|
|||
lines = GetDIBits( src_dev->hdc, hbm, 0, bm.bmHeight, bits, (BITMAPINFO*)&info_hdr, DIB_RGB_COLORS );
|
||||
SelectObject( src_dev->hdc, hbm );
|
||||
|
||||
if (lines) lines = StretchDIBits( dst_dev->hdc, xDst, yDst, widthDst, heightDst,
|
||||
xSrc, bm.bmHeight - heightSrc - ySrc, widthSrc, heightSrc,
|
||||
if (lines) lines = StretchDIBits( dst_dev->hdc, dst->log_x, dst->log_y, dst->log_width, dst->log_height,
|
||||
src->x, bm.bmHeight - src->height - src->y, src->width, src->height,
|
||||
bits, (BITMAPINFO*)&info_hdr, DIB_RGB_COLORS, rop );
|
||||
HeapFree( GetProcessHeap(), 0, bits );
|
||||
return (lines == heightSrc);
|
||||
return (lines == src->height);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -265,10 +253,6 @@ BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT height
|
|||
|
||||
if (!rop_uses_src( rop )) return PatBlt( hdcDst, xDst, yDst, widthDst, heightDst, rop );
|
||||
|
||||
TRACE("%p %d,%d %dx%d -> %p %d,%d %dx%d rop=%06x\n",
|
||||
hdcSrc, xSrc, ySrc, widthSrc, heightSrc,
|
||||
hdcDst, xDst, yDst, widthDst, heightDst, rop );
|
||||
|
||||
if (!(dcDst = get_dc_ptr( hdcDst ))) return FALSE;
|
||||
|
||||
if ((dcSrc = get_dc_ptr( hdcSrc )))
|
||||
|
@ -297,8 +281,14 @@ BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT height
|
|||
rop &= ~NOMIRRORBITMAP;
|
||||
}
|
||||
get_vis_rectangles( dcDst, &dst, dcSrc, &src );
|
||||
ret = dst_dev->funcs->pStretchBlt( dst_dev, xDst, yDst, widthDst, heightDst,
|
||||
src_dev, xSrc, ySrc, widthSrc, heightSrc, rop );
|
||||
|
||||
TRACE("src %p log=%d,%d %dx%d phys=%d,%d %dx%d vis=%s dst %p log=%d,%d %dx%d phys=%d,%d %dx%d vis=%s rop=%06x\n",
|
||||
hdcSrc, src.log_x, src.log_y, src.log_width, src.log_height,
|
||||
src.x, src.y, src.width, src.height, wine_dbgstr_rect(&src.visrect),
|
||||
hdcDst, dst.log_x, dst.log_y, dst.log_width, dst.log_height,
|
||||
dst.x, dst.y, dst.width, dst.height, wine_dbgstr_rect(&dst.visrect), rop );
|
||||
|
||||
ret = dst_dev->funcs->pStretchBlt( dst_dev, &dst, src_dev, &src, rop );
|
||||
release_dc_ptr( dcSrc );
|
||||
}
|
||||
release_dc_ptr( dcDst );
|
||||
|
|
|
@ -65,8 +65,8 @@ BOOL CDECL EMFDRV_PatBlt( PHYSDEV dev, INT left, INT top,
|
|||
return ret;
|
||||
}
|
||||
|
||||
BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst, INT heightDst,
|
||||
PHYSDEV devSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, DWORD rop )
|
||||
BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, struct bitblt_coords *dst,
|
||||
PHYSDEV devSrc, struct bitblt_coords *src, DWORD rop )
|
||||
{
|
||||
BOOL ret;
|
||||
PEMRBITBLT pEMR;
|
||||
|
@ -82,7 +82,7 @@ BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
|
|||
|
||||
if (devSrc->funcs == devDst->funcs) return FALSE; /* can't use a metafile DC as source */
|
||||
|
||||
if (widthSrc == widthDst && heightSrc == heightDst)
|
||||
if (src->log_width == dst->log_width && src->log_height == dst->log_height)
|
||||
{
|
||||
emrType = EMR_BITBLT;
|
||||
emrSize = sizeof(EMRBITBLT);
|
||||
|
@ -112,17 +112,17 @@ BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
|
|||
/* Initialize EMR */
|
||||
pEMR->emr.iType = emrType;
|
||||
pEMR->emr.nSize = size;
|
||||
pEMR->rclBounds.left = xDst;
|
||||
pEMR->rclBounds.top = yDst;
|
||||
pEMR->rclBounds.right = xDst + widthDst - 1;
|
||||
pEMR->rclBounds.bottom = yDst + heightDst - 1;
|
||||
pEMR->xDest = xDst;
|
||||
pEMR->yDest = yDst;
|
||||
pEMR->cxDest = widthDst;
|
||||
pEMR->cyDest = heightDst;
|
||||
pEMR->rclBounds.left = dst->log_x;
|
||||
pEMR->rclBounds.top = dst->log_y;
|
||||
pEMR->rclBounds.right = dst->log_x + dst->log_width - 1;
|
||||
pEMR->rclBounds.bottom = dst->log_y + dst->log_height - 1;
|
||||
pEMR->xDest = dst->log_x;
|
||||
pEMR->yDest = dst->log_y;
|
||||
pEMR->cxDest = dst->log_width;
|
||||
pEMR->cyDest = dst->log_height;
|
||||
pEMR->dwRop = rop;
|
||||
pEMR->xSrc = xSrc;
|
||||
pEMR->ySrc = ySrc;
|
||||
pEMR->xSrc = src->log_x;
|
||||
pEMR->ySrc = src->log_y;
|
||||
GetWorldTransform(devSrc->hdc, &pEMR->xformSrc);
|
||||
pEMR->crBkColorSrc = GetBkColor(devSrc->hdc);
|
||||
pEMR->iUsageSrc = DIB_RGB_COLORS;
|
||||
|
@ -133,8 +133,8 @@ BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
|
|||
if (emrType == EMR_STRETCHBLT)
|
||||
{
|
||||
PEMRSTRETCHBLT pEMRStretch = (PEMRSTRETCHBLT)pEMR;
|
||||
pEMRStretch->cxSrc = widthSrc;
|
||||
pEMRStretch->cySrc = heightSrc;
|
||||
pEMRStretch->cxSrc = src->log_width;
|
||||
pEMRStretch->cySrc = src->log_height;
|
||||
}
|
||||
|
||||
/* Initialize BITMAPINFO structure */
|
||||
|
|
|
@ -152,10 +152,8 @@ extern BOOL CDECL EMFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT
|
|||
extern BOOL CDECL EMFDRV_SetWindowExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL EMFDRV_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst,
|
||||
INT widthDst, INT heightDst,
|
||||
PHYSDEV devSrc, INT xSrc, INT ySrc,
|
||||
INT widthSrc, INT heightSrc, DWORD rop ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, struct bitblt_coords *dst,
|
||||
PHYSDEV devSrc, struct bitblt_coords *src, DWORD rop ) DECLSPEC_HIDDEN;
|
||||
extern INT CDECL EMFDRV_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst,
|
||||
INT heightDst, INT xSrc, INT ySrc,
|
||||
INT widthSrc, INT heightSrc,
|
||||
|
|
|
@ -263,7 +263,7 @@ typedef struct gdi_dc_funcs
|
|||
BOOL (CDECL *pSetWorldTransform)(PHYSDEV,const XFORM*);
|
||||
INT (CDECL *pStartDoc)(PHYSDEV,const DOCINFOW*);
|
||||
INT (CDECL *pStartPage)(PHYSDEV);
|
||||
BOOL (CDECL *pStretchBlt)(PHYSDEV,INT,INT,INT,INT,PHYSDEV,INT,INT,INT,INT,DWORD);
|
||||
BOOL (CDECL *pStretchBlt)(PHYSDEV,struct bitblt_coords*,PHYSDEV,struct bitblt_coords*,DWORD);
|
||||
INT (CDECL *pStretchDIBits)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT,const void *,
|
||||
const BITMAPINFO*,UINT,DWORD);
|
||||
BOOL (CDECL *pStrokeAndFillPath)(PHYSDEV);
|
||||
|
@ -640,8 +640,8 @@ extern BOOL CDECL nulldrv_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt
|
|||
extern BOOL CDECL nulldrv_SetWindowExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL nulldrv_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL nulldrv_SetWorldTransform( PHYSDEV dev, const XFORM *xform ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL nulldrv_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst, INT heightDst,
|
||||
PHYSDEV src_dev, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, DWORD rop ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL nulldrv_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
|
||||
PHYSDEV src_dev, struct bitblt_coords *src, DWORD rop ) DECLSPEC_HIDDEN;
|
||||
extern INT CDECL nulldrv_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT heightDst,
|
||||
INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, const void *bits,
|
||||
const BITMAPINFO *info, UINT coloruse, DWORD rop ) DECLSPEC_HIDDEN;
|
||||
|
|
|
@ -43,9 +43,8 @@ BOOL CDECL MFDRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height,
|
|||
*/
|
||||
#define STRETCH_VIA_DIB
|
||||
|
||||
BOOL CDECL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
|
||||
INT heightDst, PHYSDEV devSrc, INT xSrc, INT ySrc,
|
||||
INT widthSrc, INT heightSrc, DWORD rop )
|
||||
BOOL CDECL MFDRV_StretchBlt( PHYSDEV devDst, struct bitblt_coords *dst,
|
||||
PHYSDEV devSrc, struct bitblt_coords *src, DWORD rop )
|
||||
{
|
||||
BOOL ret;
|
||||
DWORD len;
|
||||
|
@ -110,14 +109,14 @@ BOOL CDECL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
|
|||
mr->rdSize = len / sizeof(INT16);
|
||||
*(mr->rdParm) = LOWORD(rop);
|
||||
*(mr->rdParm + 1) = HIWORD(rop);
|
||||
*(mr->rdParm + 2) = heightSrc;
|
||||
*(mr->rdParm + 3) = widthSrc;
|
||||
*(mr->rdParm + 4) = ySrc;
|
||||
*(mr->rdParm + 5) = xSrc;
|
||||
*(mr->rdParm + 6) = heightDst;
|
||||
*(mr->rdParm + 7) = widthDst;
|
||||
*(mr->rdParm + 8) = yDst;
|
||||
*(mr->rdParm + 9) = xDst;
|
||||
*(mr->rdParm + 2) = src->log_height;
|
||||
*(mr->rdParm + 3) = src->log_width;
|
||||
*(mr->rdParm + 4) = src->log_y;
|
||||
*(mr->rdParm + 5) = src->log_x;
|
||||
*(mr->rdParm + 6) = dst->log_height;
|
||||
*(mr->rdParm + 7) = dst->log_width;
|
||||
*(mr->rdParm + 8) = dst->log_y;
|
||||
*(mr->rdParm + 9) = dst->log_x;
|
||||
ret = MFDRV_WriteRecord( devDst, mr, mr->rdSize * 2);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -139,9 +139,8 @@ extern BOOL CDECL MFDRV_SetViewportExtEx( PHYSDEV dev, INT x, INT y, SIZE *size
|
|||
extern BOOL CDECL MFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL MFDRV_SetWindowExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL MFDRV_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
|
||||
INT heightDst, PHYSDEV devSrc, INT xSrc, INT ySrc,
|
||||
INT widthSrc, INT heightSrc, DWORD rop ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL MFDRV_StretchBlt( PHYSDEV devDst, struct bitblt_coords *dst,
|
||||
PHYSDEV devSrc, struct bitblt_coords *src, DWORD rop ) DECLSPEC_HIDDEN;
|
||||
extern BOOL CDECL MFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
|
||||
extern INT CDECL MFDRV_SetDIBitsToDevice( PHYSDEV dev, INT xDest, INT yDest, DWORD cx,
|
||||
DWORD cy, INT xSrc, INT ySrc,
|
||||
|
|
|
@ -1486,57 +1486,29 @@ BOOL CDECL X11DRV_PatBlt( PHYSDEV dev, INT x, INT y, INT width, INT height, DWOR
|
|||
/***********************************************************************
|
||||
* X11DRV_StretchBlt
|
||||
*/
|
||||
BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst, INT heightDst,
|
||||
PHYSDEV src_dev, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc,
|
||||
DWORD rop )
|
||||
BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
|
||||
PHYSDEV src_dev, struct bitblt_coords *src, DWORD rop )
|
||||
{
|
||||
X11DRV_PDEVICE *physDevDst = get_x11drv_dev( dst_dev );
|
||||
X11DRV_PDEVICE *physDevSrc = get_x11drv_dev( src_dev ); /* FIXME: check that it's really an x11 dev */
|
||||
BOOL usePat, useDst, destUsed, fStretch, fNullBrush;
|
||||
struct bitblt_coords src, dst;
|
||||
INT width, height;
|
||||
INT sDst, sSrc = DIB_Status_None;
|
||||
const BYTE *opcode;
|
||||
Pixmap pixmaps[3] = { 0, 0, 0 }; /* pixmaps for DST, SRC, TMP */
|
||||
GC tmpGC = 0;
|
||||
|
||||
if (IsRectEmpty( &dst->visrect )) return TRUE;
|
||||
|
||||
usePat = (((rop >> 4) & 0x0f0000) != (rop & 0x0f0000));
|
||||
useDst = (((rop >> 1) & 0x550000) != (rop & 0x550000));
|
||||
|
||||
src.x = xSrc;
|
||||
src.y = ySrc;
|
||||
src.width = widthSrc;
|
||||
src.height = heightSrc;
|
||||
src.layout = GetLayout( src_dev->hdc );
|
||||
dst.x = xDst;
|
||||
dst.y = yDst;
|
||||
dst.width = widthDst;
|
||||
dst.height = heightDst;
|
||||
dst.layout = GetLayout( dst_dev->hdc );
|
||||
|
||||
if (rop & NOMIRRORBITMAP)
|
||||
{
|
||||
src.layout |= LAYOUT_BITMAPORIENTATIONPRESERVED;
|
||||
dst.layout |= LAYOUT_BITMAPORIENTATIONPRESERVED;
|
||||
rop &= ~NOMIRRORBITMAP;
|
||||
}
|
||||
|
||||
if (!BITBLT_GetVisRectangles( physDevDst, physDevSrc, &dst, &src ))
|
||||
return TRUE;
|
||||
fStretch = (src.width != dst.width) || (src.height != dst.height);
|
||||
fStretch = (src->width != dst->width) || (src->height != dst->height);
|
||||
|
||||
if (physDevDst != physDevSrc)
|
||||
sSrc = X11DRV_LockDIBSection( physDevSrc, DIB_Status_None );
|
||||
|
||||
TRACE(" rectdst=%d,%d %dx%d orgdst=%d,%d visdst=%s\n",
|
||||
dst.x, dst.y, dst.width, dst.height,
|
||||
physDevDst->dc_rect.left, physDevDst->dc_rect.top, wine_dbgstr_rect( &dst.visrect ) );
|
||||
TRACE(" rectsrc=%d,%d %dx%d orgsrc=%d,%d vissrc=%s\n",
|
||||
src.x, src.y, src.width, src.height,
|
||||
physDevSrc->dc_rect.left, physDevSrc->dc_rect.top, wine_dbgstr_rect( &src.visrect ) );
|
||||
|
||||
width = dst.visrect.right - dst.visrect.left;
|
||||
height = dst.visrect.bottom - dst.visrect.top;
|
||||
width = dst->visrect.right - dst->visrect.left;
|
||||
height = dst->visrect.bottom - dst->visrect.top;
|
||||
|
||||
sDst = X11DRV_LockDIBSection( physDevDst, DIB_Status_None );
|
||||
if (physDevDst == physDevSrc) sSrc = sDst;
|
||||
|
@ -1546,8 +1518,8 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
|
|||
sSrc == DIB_Status_AppMod && sDst == DIB_Status_AppMod &&
|
||||
same_format(physDevSrc, physDevDst))
|
||||
{
|
||||
if (client_side_dib_copy( physDevSrc, src.visrect.left, src.visrect.top,
|
||||
physDevDst, dst.visrect.left, dst.visrect.top, width, height ))
|
||||
if (client_side_dib_copy( physDevSrc, src->visrect.left, src->visrect.top,
|
||||
physDevDst, dst->visrect.left, dst->visrect.top, width, height ))
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -1568,8 +1540,8 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
|
|||
{
|
||||
if (sSrc == DIB_Status_AppMod)
|
||||
{
|
||||
X11DRV_DIB_CopyDIBSection( physDevSrc, physDevDst, src.visrect.left, src.visrect.top,
|
||||
dst.visrect.left, dst.visrect.top, width, height );
|
||||
X11DRV_DIB_CopyDIBSection( physDevSrc, physDevDst, src->visrect.left, src->visrect.top,
|
||||
dst->visrect.left, dst->visrect.top, width, height );
|
||||
goto done;
|
||||
}
|
||||
X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod );
|
||||
|
@ -1577,11 +1549,11 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
|
|||
wine_tsx11_lock();
|
||||
XCopyArea( gdi_display, physDevSrc->drawable,
|
||||
physDevDst->drawable, physDevDst->gc,
|
||||
physDevSrc->dc_rect.left + src.visrect.left,
|
||||
physDevSrc->dc_rect.top + src.visrect.top,
|
||||
physDevSrc->dc_rect.left + src->visrect.left,
|
||||
physDevSrc->dc_rect.top + src->visrect.top,
|
||||
width, height,
|
||||
physDevDst->dc_rect.left + dst.visrect.left,
|
||||
physDevDst->dc_rect.top + dst.visrect.top );
|
||||
physDevDst->dc_rect.left + dst->visrect.left,
|
||||
physDevDst->dc_rect.top + dst->visrect.top );
|
||||
physDevDst->exposures++;
|
||||
wine_tsx11_unlock();
|
||||
goto done;
|
||||
|
@ -1598,11 +1570,11 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
|
|||
XSetFunction( gdi_display, physDevDst->gc, OP_ROP(*opcode) );
|
||||
XCopyPlane( gdi_display, physDevSrc->drawable,
|
||||
physDevDst->drawable, physDevDst->gc,
|
||||
physDevSrc->dc_rect.left + src.visrect.left,
|
||||
physDevSrc->dc_rect.top + src.visrect.top,
|
||||
physDevSrc->dc_rect.left + src->visrect.left,
|
||||
physDevSrc->dc_rect.top + src->visrect.top,
|
||||
width, height,
|
||||
physDevDst->dc_rect.left + dst.visrect.left,
|
||||
physDevDst->dc_rect.top + dst.visrect.top, 1 );
|
||||
physDevDst->dc_rect.left + dst->visrect.left,
|
||||
physDevDst->dc_rect.top + dst->visrect.top, 1 );
|
||||
physDevDst->exposures++;
|
||||
wine_tsx11_unlock();
|
||||
goto done;
|
||||
|
@ -1621,15 +1593,15 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
|
|||
|
||||
if (physDevDst != physDevSrc) X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod );
|
||||
|
||||
if(!X11DRV_XRender_GetSrcAreaStretch( physDevSrc, physDevDst, pixmaps[SRC], tmpGC, &src, &dst ))
|
||||
if(!X11DRV_XRender_GetSrcAreaStretch( physDevSrc, physDevDst, pixmaps[SRC], tmpGC, src, dst ))
|
||||
{
|
||||
if (fStretch)
|
||||
BITBLT_GetSrcAreaStretch( physDevSrc, physDevDst, pixmaps[SRC], tmpGC, &src, &dst );
|
||||
BITBLT_GetSrcAreaStretch( physDevSrc, physDevDst, pixmaps[SRC], tmpGC, src, dst );
|
||||
else
|
||||
BITBLT_GetSrcArea( physDevSrc, physDevDst, pixmaps[SRC], tmpGC, &src.visrect );
|
||||
BITBLT_GetSrcArea( physDevSrc, physDevDst, pixmaps[SRC], tmpGC, &src->visrect );
|
||||
}
|
||||
|
||||
if (useDst) BITBLT_GetDstArea( physDevDst, pixmaps[DST], tmpGC, &dst.visrect );
|
||||
if (useDst) BITBLT_GetDstArea( physDevDst, pixmaps[DST], tmpGC, &dst->visrect );
|
||||
if (usePat) fNullBrush = !X11DRV_SetupGCForPatBlt( physDevDst, tmpGC, TRUE );
|
||||
else fNullBrush = FALSE;
|
||||
destUsed = FALSE;
|
||||
|
@ -1670,7 +1642,7 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
|
|||
}
|
||||
}
|
||||
XSetFunction( gdi_display, physDevDst->gc, GXcopy );
|
||||
physDevDst->exposures += BITBLT_PutDstArea( physDevDst, pixmaps[destUsed ? DST : SRC], &dst.visrect );
|
||||
physDevDst->exposures += BITBLT_PutDstArea( physDevDst, pixmaps[destUsed ? DST : SRC], &dst->visrect );
|
||||
XFreePixmap( gdi_display, pixmaps[DST] );
|
||||
if (pixmaps[SRC]) XFreePixmap( gdi_display, pixmaps[SRC] );
|
||||
if (pixmaps[TMP]) XFreePixmap( gdi_display, pixmaps[TMP] );
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
@ cdecl SetPixel(ptr long long long) X11DRV_SetPixel
|
||||
@ cdecl SetPixelFormat(ptr long ptr) X11DRV_SetPixelFormat
|
||||
@ cdecl SetTextColor(ptr long) X11DRV_SetTextColor
|
||||
@ cdecl StretchBlt(ptr long long long long ptr long long long long long) X11DRV_StretchBlt
|
||||
@ cdecl StretchBlt(ptr ptr ptr ptr long) X11DRV_StretchBlt
|
||||
@ cdecl SwapBuffers(ptr) X11DRV_SwapBuffers
|
||||
@ cdecl UnrealizePalette(long) X11DRV_UnrealizePalette
|
||||
|
||||
|
|
Loading…
Reference in New Issue