Roderick Colenbrander : winex11: Use get_xrender_picture in X11DRV_AlphaBlend.

Alexandre Julliard julliard at winehq.org
Fri Oct 16 11:26:10 CDT 2009


Module: wine
Branch: master
Commit: a9cafb8f2e2eaa674a808e8b7d91c2d5dfe3373d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a9cafb8f2e2eaa674a808e8b7d91c2d5dfe3373d

Author: Roderick Colenbrander <thunderbird2k at gmail.com>
Date:   Thu Oct 15 20:38:52 2009 +0200

winex11: Use get_xrender_picture in X11DRV_AlphaBlend.

---

 dlls/winex11.drv/xrender.c |   25 +++----------------------
 1 files changed, 3 insertions(+), 22 deletions(-)

diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c
index aac0411..391c15a 100644
--- a/dlls/winex11.drv/xrender.c
+++ b/dlls/winex11.drv/xrender.c
@@ -1895,8 +1895,6 @@ BOOL CDECL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT wid
     int y, y2;
     POINT pts[2];
     BOOL top_down = FALSE;
-    RGNDATA *rgndata;
-    const WineXRenderFormat *dst_format = get_xrender_format_from_color_shifts(devDst->depth, devDst->color_shifts);
     const WineXRenderFormat *src_format;
     int repeat_src;
 
@@ -2008,7 +2006,7 @@ BOOL CDECL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT wid
 
     }
 
-    rgndata = X11DRV_GetRegionData( devDst->region, 0 );
+    dst_pict = get_xrender_picture(devDst);
 
     wine_tsx11_lock();
     image = XCreateImage(gdi_display, visual, 32, ZPixmap, 0,
@@ -2022,15 +2020,6 @@ BOOL CDECL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT wid
         return FALSE;
     }
 
-    pa.subwindow_mode = IncludeInferiors;
-    pa.repeat = repeat_src ? RepeatNormal : RepeatNone;
-
-    /* FIXME use devDst->xrender->pict ? */
-    dst_pict = pXRenderCreatePicture(gdi_display,
-                                     devDst->drawable,
-                                     dst_format->pict_format,
-                                     CPSubwindowMode, &pa);
-    TRACE("dst_pict %08lx\n", dst_pict);
     TRACE("src_drawable = %08lx\n", devSrc->drawable);
     xpm = XCreatePixmap(gdi_display,
                         root_window,
@@ -2040,20 +2029,13 @@ BOOL CDECL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT wid
     TRACE("xpm = %08lx\n", xpm);
     XPutImage(gdi_display, xpm, gc, image, 0, 0, 0, 0, widthSrc, heightSrc);
 
+    pa.subwindow_mode = IncludeInferiors;
+    pa.repeat = repeat_src ? RepeatNormal : RepeatNone;
     src_pict = pXRenderCreatePicture(gdi_display,
                                      xpm, src_format->pict_format,
                                      CPSubwindowMode|CPRepeat, &pa);
     TRACE("src_pict %08lx\n", src_pict);
 
-    if (rgndata)
-    {
-        pXRenderSetPictureClipRectangles( gdi_display, dst_pict,
-                                          devDst->dc_rect.left, devDst->dc_rect.top,
-                                          (XRectangle *)rgndata->Buffer, 
-                                          rgndata->rdh.nCount );
-        HeapFree( GetProcessHeap(), 0, rgndata );
-    }
-
     /* Make sure we ALWAYS set the transformation matrix even if we don't need to scale. The reason is
      * that later on we want to reuse pictures (it can bring a lot of extra performance) and each time
      * a different transformation matrix might have been used. */
@@ -2069,7 +2051,6 @@ BOOL CDECL X11DRV_AlphaBlend(X11DRV_PDEVICE *devDst, INT xDst, INT yDst, INT wid
     pXRenderFreePicture(gdi_display, src_pict);
     XFreePixmap(gdi_display, xpm);
     XFreeGC(gdi_display, gc);
-    pXRenderFreePicture(gdi_display, dst_pict);
     image->data = NULL;
     XDestroyImage(image);
 




More information about the wine-cvs mailing list