winex11: Use set_xrender_transformation in AlphaBlend.

This commit is contained in:
Roderick Colenbrander 2009-07-13 23:33:15 +02:00 committed by Alexandre Julliard
parent c702da34da
commit eeeb349eee
1 changed files with 4 additions and 12 deletions

View File

@ -1910,18 +1910,10 @@ BOOL CDECL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT wid
HeapFree( GetProcessHeap(), 0, rgndata ); HeapFree( GetProcessHeap(), 0, rgndata );
} }
#ifdef HAVE_XRENDERSETPICTURETRANSFORM /* Make sure we ALWAYS set the transformation matrix even if we don't need to scale. The reason is
if(!repeat_src && (widthDst != widthSrc || heightDst != heightSrc)) { * that later on we want to reuse pictures (it can bring a lot of extra performance) and each time
double xscale = widthSrc/(double)widthDst; * a different transformation matrix might have been used. */
double yscale = heightSrc/(double)heightDst; set_xrender_transformation(src_pict, widthSrc/(double)widthDst, heightSrc/(double)heightDst, 0, 0);
XTransform xform = {{
{ XDoubleToFixed(xscale), XDoubleToFixed(0), XDoubleToFixed(0) },
{ XDoubleToFixed(0), XDoubleToFixed(yscale), XDoubleToFixed(0) },
{ XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1) }
}};
pXRenderSetPictureTransform(gdi_display, src_pict, &xform);
}
#endif
pXRenderComposite(gdi_display, PictOpOver, src_pict, 0, dst_pict, pXRenderComposite(gdi_display, PictOpOver, src_pict, 0, dst_pict,
0, 0, 0, 0, 0, 0, 0, 0,
xDst + devDst->dc_rect.left, yDst + devDst->dc_rect.top, widthDst, heightDst); xDst + devDst->dc_rect.left, yDst + devDst->dc_rect.top, widthDst, heightDst);