From 8bd130b92310f3ba33143b2b345704b03f19ba72 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 11 Jul 2011 13:59:05 +0200 Subject: [PATCH] gdi32: Pass the source/dest visible rectangles to the StretchBlt driver entry point. --- dlls/gdi32/bitblt.c | 36 ++++++----------- dlls/gdi32/enhmfdrv/bitblt.c | 30 +++++++------- dlls/gdi32/enhmfdrv/enhmetafiledrv.h | 6 +-- dlls/gdi32/gdi_private.h | 6 +-- dlls/gdi32/mfdrv/bitblt.c | 21 +++++----- dlls/gdi32/mfdrv/metafiledrv.h | 5 +-- dlls/winex11.drv/bitblt.c | 76 ++++++++++++------------------------ dlls/winex11.drv/winex11.drv.spec | 2 +- 8 files changed, 70 insertions(+), 112 deletions(-) diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c index 733e2cff0d1..9ed191bb920 100644 --- a/dlls/gdi32/bitblt.c +++ b/dlls/gdi32/bitblt.c @@ -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 ); diff --git a/dlls/gdi32/enhmfdrv/bitblt.c b/dlls/gdi32/enhmfdrv/bitblt.c index bb773556218..698d30f7f37 100644 --- a/dlls/gdi32/enhmfdrv/bitblt.c +++ b/dlls/gdi32/enhmfdrv/bitblt.c @@ -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 */ diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h index 34f09b348a3..4cdaa6fea65 100644 --- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h +++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h @@ -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, diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 82d72e59ce3..ef591e3fdc3 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -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; diff --git a/dlls/gdi32/mfdrv/bitblt.c b/dlls/gdi32/mfdrv/bitblt.c index 0a8a9005c90..12529aa7911 100644 --- a/dlls/gdi32/mfdrv/bitblt.c +++ b/dlls/gdi32/mfdrv/bitblt.c @@ -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 diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h index a5e060560fb..199a3929327 100644 --- a/dlls/gdi32/mfdrv/metafiledrv.h +++ b/dlls/gdi32/mfdrv/metafiledrv.h @@ -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, diff --git a/dlls/winex11.drv/bitblt.c b/dlls/winex11.drv/bitblt.c index a73d55138dd..0a618bbade7 100644 --- a/dlls/winex11.drv/bitblt.c +++ b/dlls/winex11.drv/bitblt.c @@ -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] ); diff --git a/dlls/winex11.drv/winex11.drv.spec b/dlls/winex11.drv/winex11.drv.spec index f5c45d132fc..e4ca62b80c9 100644 --- a/dlls/winex11.drv/winex11.drv.spec +++ b/dlls/winex11.drv/winex11.drv.spec @@ -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 -- 2.11.4.GIT