From a7b5f5ac3c957a623335543459cef8d8671cc4a8 Mon Sep 17 00:00:00 2001 From: Frank Richter Date: Sat, 27 Aug 2005 09:20:53 +0000 Subject: [PATCH] Make AlphaBlend() respect the destination clipping region. --- dlls/x11drv/xrender.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dlls/x11drv/xrender.c b/dlls/x11drv/xrender.c index 2075d4ffb95..b240c9a9d78 100644 --- a/dlls/x11drv/xrender.c +++ b/dlls/x11drv/xrender.c @@ -1432,6 +1432,7 @@ BOOL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT widthDst, int y, y2; POINT pts[2]; BOOL top_down = FALSE; + RGNDATA *rgndata; if(!X11DRV_XRender_Installed) { FIXME("Unable to AlphaBlend without Xrender\n"); @@ -1531,6 +1532,15 @@ BOOL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT widthDst, CPSubwindowMode, &pa); TRACE("src_pict %08lx\n", src_pict); + if ((rgndata = X11DRV_GetRegionData( devDst->region, 0 ))) + { + pXRenderSetPictureClipRectangles( gdi_display, dst_pict, + devDst->org.x, devDst->org.y, + (XRectangle *)rgndata->Buffer, + rgndata->rdh.nCount ); + HeapFree( GetProcessHeap(), 0, rgndata ); + } + #ifdef HAVE_XRENDERSETPICTURETRANSFORM if(widthDst != widthSrc || heightDst != heightSrc) { double xscale = widthSrc/(double)widthDst;