--- rxvt-unicode/src/rxvtimg.C 2012/06/07 21:28:10 1.59 +++ rxvt-unicode/src/rxvtimg.C 2012/06/08 21:41:45 1.65 @@ -211,7 +211,6 @@ if (ref->cnt == 1 && ref->ours) return; - //TODO: maybe should reify instead Pixmap pm2 = XCreatePixmap (s->display->dpy, s->display->root, ref->w, ref->h, format->depth); GC gc = XCreateGC (s->display->dpy, pm, 0, 0); XCopyArea (s->display->dpy, pm, pm2, gc, 0, 0, ref->w, ref->h, 0, 0); @@ -267,11 +266,10 @@ rxvt_img *img = new rxvt_img (s, format, x, y, w, h, repeat); img->alloc (); - Picture src = src_picture (); - XRenderPictureAttributes pa; pa.repeat = RepeatPad; - Picture dst = XRenderCreatePicture (dpy, img->pm, format, CPRepeat, &pa); + Picture src = XRenderCreatePicture (dpy, pm, format, CPRepeat, &pa); + Picture dst = XRenderCreatePicture (dpy, img->pm, format, 0, 0); Pixmap tmp_pm = XCreatePixmap (dpy, pm, w, h, format->depth); Picture tmp = XRenderCreatePicture (dpy, tmp_pm , format, CPRepeat, &pa); @@ -297,7 +295,7 @@ get_gaussian_kernel (rv, size, kernel, params); ::swap (params[0], params[1]); - XRenderSetPictureFilter (dpy, src, FilterConvolution, params, size+2); + XRenderSetPictureFilter (dpy, tmp, FilterConvolution, params, size+2); XRenderComposite (dpy, PictOpSrc, tmp, @@ -334,7 +332,7 @@ } void -rxvt_img::brightness (unsigned short r, unsigned short g, unsigned short b, unsigned short a) +rxvt_img::brightness (uint16_t r, uint16_t g, uint16_t b, uint16_t a) { Display *dpy = s->display->dpy; Picture src = create_xrender_mask (dpy, pm, True); @@ -354,10 +352,13 @@ } void -rxvt_img::contrast (unsigned short r, unsigned short g, unsigned short b, unsigned short a) +rxvt_img::contrast (uint16_t r, uint16_t g, uint16_t b, uint16_t a) { if (!(s->display->flags & DISPLAY_HAS_RENDER_MUL)) - return; + { + rxvt_warn ("rxvt_img::contrast operation not supported on this display, RENDER extension too old.\n"); + return; + } Display *dpy = s->display->dpy; Picture src = create_xrender_mask (dpy, pm, True); @@ -410,9 +411,10 @@ Display *dpy = s->display->dpy; - bool alpha = !format->direct.alphaMask - && (x || y) - && repeat == RepeatNone; + // add an alpha channel if... + bool alpha = !format->direct.alphaMask // pixmap has none yet + && (x || y) // we need one because of non-zero offset + && repeat == RepeatNone; // and we have no good pixels to fill with rxvt_img *img = new rxvt_img (s, alpha ? find_alpha_format_for (dpy, format) : format, 0, 0, w, h, repeat); img->alloc ();