Module: wine Branch: master Commit: 498e3cf2a1653a5519ab77b8022f3ac23d11ce10 URL: http://source.winehq.org/git/wine.git/?a=commit;h=498e3cf2a1653a5519ab77b802...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Sep 15 13:22:31 2011 +0200
winex11: Remove the XRender support in the X11 driver StretchBlt implementation.
---
dlls/winex11.drv/bitblt.c | 11 ++--- dlls/winex11.drv/x11drv.h | 3 - dlls/winex11.drv/xrender.c | 106 -------------------------------------------- 3 files changed, 4 insertions(+), 116 deletions(-)
diff --git a/dlls/winex11.drv/bitblt.c b/dlls/winex11.drv/bitblt.c index ebd3f38..baf5f89 100644 --- a/dlls/winex11.drv/bitblt.c +++ b/dlls/winex11.drv/bitblt.c @@ -1404,13 +1404,10 @@ BOOL X11DRV_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
if (physDevDst != physDevSrc) X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod );
- if(!X11DRV_XRender_GetSrcAreaStretch( physDevSrc, physDevDst, src_pixmap, tmpGC, src, dst )) - { - if (fStretch) - BITBLT_GetSrcAreaStretch( physDevSrc, physDevDst, src_pixmap, tmpGC, src, dst ); - else - BITBLT_GetSrcArea( physDevSrc, physDevDst, src_pixmap, tmpGC, &src->visrect ); - } + if (fStretch) + BITBLT_GetSrcAreaStretch( physDevSrc, physDevDst, src_pixmap, tmpGC, src, dst ); + else + BITBLT_GetSrcArea( physDevSrc, physDevDst, src_pixmap, tmpGC, &src->visrect );
execute_rop( physDevDst, src_pixmap, tmpGC, &dst->visrect, rop );
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index c38ed78..b7b99e8 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -305,9 +305,6 @@ extern const struct gdi_dc_funcs *X11DRV_XRender_Init(void) DECLSPEC_HIDDEN; extern void X11DRV_XRender_Finalize(void) DECLSPEC_HIDDEN; extern void X11DRV_XRender_CopyBrush(X11DRV_PDEVICE *physDev, X_PHYSBITMAP *physBitmap, int width, int height) DECLSPEC_HIDDEN; extern BOOL X11DRV_XRender_SetPhysBitmapDepth(X_PHYSBITMAP *physBitmap, int bits_pixel, const DIBSECTION *dib) DECLSPEC_HIDDEN; -BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst, - Pixmap pixmap, GC gc, - const struct bitblt_coords *src, const struct bitblt_coords *dst ) DECLSPEC_HIDDEN;
extern Drawable get_glxdrawable(X11DRV_PDEVICE *physDev) DECLSPEC_HIDDEN; extern BOOL destroy_glxpixmap(Display *display, XID glxpixmap) DECLSPEC_HIDDEN; diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c index 036ab39..ae3940d 100644 --- a/dlls/winex11.drv/xrender.c +++ b/dlls/winex11.drv/xrender.c @@ -2662,106 +2662,6 @@ void X11DRV_XRender_CopyBrush(X11DRV_PDEVICE *physDev, X_PHYSBITMAP *physBitmap, wine_tsx11_unlock(); }
-BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst, - Pixmap pixmap, GC gc, - const struct bitblt_coords *src, const struct bitblt_coords *dst ) -{ - BOOL stretch = (src->width != dst->width) || (src->height != dst->height); - int width = dst->visrect.right - dst->visrect.left; - int height = dst->visrect.bottom - dst->visrect.top; - int x_src = physDevSrc->dc_rect.left + src->visrect.left; - int y_src = physDevSrc->dc_rect.top + src->visrect.top; - struct xrender_info *src_info = get_xrender_info(physDevSrc); - const WineXRenderFormat *dst_format = get_xrender_format_from_color_shifts(physDevDst->depth, physDevDst->color_shifts); - Picture src_pict=0, dst_pict=0, mask_pict=0; - BOOL use_repeat; - double xscale, yscale; - - XRenderPictureAttributes pa; - pa.subwindow_mode = IncludeInferiors; - pa.repeat = RepeatNone; - - TRACE("src depth=%d widthSrc=%d heightSrc=%d xSrc=%d ySrc=%d\n", - physDevSrc->depth, src->width, src->height, x_src, y_src); - TRACE("dst depth=%d widthDst=%d heightDst=%d\n", physDevDst->depth, dst->width, dst->height); - - if(!X11DRV_XRender_Installed) - { - TRACE("Not using XRender since it is not available or disabled\n"); - return FALSE; - } - - /* XRender can't handle palettes, so abort */ - if(X11DRV_PALETTE_XPixelToPalette) - return FALSE; - - /* XRender is of no use in this case */ - if((physDevDst->depth == 1) && (physDevSrc->depth > 1)) - return FALSE; - - /* Just use traditional X copy when the formats match and we don't need stretching */ - if((src_info->format->format == dst_format->format) && !stretch) - { - TRACE("Source and destination depth match and no stretching needed falling back to XCopyArea\n"); - wine_tsx11_lock(); - XCopyArea( gdi_display, physDevSrc->drawable, pixmap, gc, x_src, y_src, width, height, 0, 0); - wine_tsx11_unlock(); - return TRUE; - } - - use_repeat = use_source_repeat( physDevSrc ); - if (!use_repeat) - { - xscale = src->width / (double)dst->width; - yscale = src->height / (double)dst->height; - } - else xscale = yscale = 1; /* no scaling needed with a repeating source */ - - /* mono -> color */ - if(physDevSrc->depth == 1 && physDevDst->depth > 1) - { - XRenderColor fg, bg; - get_xrender_color(dst_format, physDevDst->textPixel, &fg); - get_xrender_color(dst_format, physDevDst->backgroundPixel, &bg); - - /* We use the source drawable as a mask */ - mask_pict = get_xrender_picture_source( physDevSrc, use_repeat ); - - /* Use backgroundPixel as the foreground color */ - EnterCriticalSection( &xrender_cs ); - src_pict = get_tile_pict(dst_format, &bg); - - /* Create a destination picture and fill it with textPixel color as the background color */ - wine_tsx11_lock(); - dst_pict = pXRenderCreatePicture(gdi_display, pixmap, dst_format->pict_format, CPSubwindowMode|CPRepeat, &pa); - pXRenderFillRectangle(gdi_display, PictOpSrc, dst_pict, &fg, 0, 0, width, height); - - xrender_mono_blit(src_pict, mask_pict, dst_pict, x_src, y_src, 0, 0, - xscale, yscale, width, height); - - if(dst_pict) pXRenderFreePicture(gdi_display, dst_pict); - wine_tsx11_unlock(); - LeaveCriticalSection( &xrender_cs ); - } - else /* color -> color (can be at different depths) or mono -> mono */ - { - if (physDevDst->depth == 32 && physDevSrc->depth < 32) mask_pict = get_no_alpha_mask(); - src_pict = get_xrender_picture_source( physDevSrc, use_repeat ); - - wine_tsx11_lock(); - dst_pict = pXRenderCreatePicture(gdi_display, - pixmap, dst_format->pict_format, - CPSubwindowMode|CPRepeat, &pa); - - xrender_blit(PictOpSrc, src_pict, mask_pict, dst_pict, - x_src, y_src, 0, 0, xscale, yscale, width, height); - - if(dst_pict) pXRenderFreePicture(gdi_display, dst_pict); - wine_tsx11_unlock(); - } - return TRUE; -} - static const struct gdi_dc_funcs xrender_funcs = { NULL, /* pAbortDoc */ @@ -2913,10 +2813,4 @@ BOOL X11DRV_XRender_SetPhysBitmapDepth(X_PHYSBITMAP *physBitmap, int bits_pixel, return FALSE; }
-BOOL X11DRV_XRender_GetSrcAreaStretch(X11DRV_PDEVICE *physDevSrc, X11DRV_PDEVICE *physDevDst, - Pixmap pixmap, GC gc, - const struct bitblt_coords *src, const struct bitblt_coords *dst ) -{ - return FALSE; -} #endif /* SONAME_LIBXRENDER */