From 22f9d4acbdabbc6a548f91039923ec0c06177756 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 23 Jan 2008 13:34:20 +0000 Subject: [PATCH] improve transparency without render a bit again --- src/rxvtfont.C | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/rxvtfont.C b/src/rxvtfont.C index 44411ba7..ee7c443e 100644 --- a/src/rxvtfont.C +++ b/src/rxvtfont.C @@ -1344,16 +1344,15 @@ rxvt_font_xft::draw (rxvt_drawable &d, int x, int y, { if (ep != enc) { - bool back_rendered = false; rxvt_drawable &d2 = d.screen->scratch_drawable (w, h); #ifdef HAVE_BG_PIXMAP + Picture dst = 0; if (term->bgPixmap.pixmap - && !(bg >= 0 && term->pix_colors[bg].is_opaque ())) + && (bg == Color_transparent || bg == Color_bg + || (bg >= 0 && !term->pix_colors[bg].is_opaque () && ((dst = XftDrawPicture (d2)))))) { - Picture dst = XftDrawPicture (d2); - int src_x = x, src_y = y; if (term->bgPixmap.is_parentOrigin ()) @@ -1362,8 +1361,8 @@ rxvt_font_xft::draw (rxvt_drawable &d, int x, int y, src_y += term->window_vt_y; } - if (term->bgPixmap.pmap_width >= src_x+w - && term->bgPixmap.pmap_height >= src_y+h) + if (term->bgPixmap.pmap_width >= src_x + w + && term->bgPixmap.pmap_height >= src_y + h) { XCopyArea (disp, term->bgPixmap.pixmap, d2, gc, src_x, src_y, w, h, 0, 0); @@ -1387,17 +1386,15 @@ rxvt_font_xft::draw (rxvt_drawable &d, int x, int y, XChangeGC (disp, gc, GCFillStyle, &gcv); } - if (bg >= 0 && dst) // colour must be (and is) non-opaque here + if (dst) { Picture solid_color_pict = XftDrawSrcPicture (d2, &term->pix_colors[bg].c); + XRenderComposite (disp, PictOpOver, solid_color_pict, None, dst, 0, 0, 0, 0, 0, 0, w, h); } - - back_rendered = true; } + else #endif - - if (!back_rendered) XftDrawRect (d2, &term->pix_colors[bg < 0 ? Color_bg : bg].c, 0, 0, w, h); XftDrawGlyphSpec (d2, &term->pix_colors[fg].c, f, enc, ep - enc); -- 2.34.1