From 5e44ef3d357f7e06d632f4d293c843ef38c4fabc Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 5 Mar 2008 22:57:44 -0500 Subject: [PATCH] blend argb windows, but just blit non-argb windows which is faster --- render.c | 9 ++++++--- window.c | 12 ++++++++++++ window.h | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/render.c b/render.c index c1d181a..b5369ed 100644 --- a/render.c +++ b/render.c @@ -338,7 +338,6 @@ static void paint_window(d_window_t *w, data_t *d) { window_data_t *wd; - int x, y, width, height, bwidth; wd = window_find_plugin_data(w, plugin_id); @@ -347,10 +346,14 @@ paint_window(d_window_t *w, data_t *d) //printf("-- paint window 0x%x picture 0x%x --\n", w->id, wd->picture); if (wd->picture) { + int x, y, width, height, bwidth; + int op; + window_get_area(w, &x, &y, &width, &height, &bwidth); + op = (window_is_argb(w) ? + XCB_RENDER_PICT_OP_OVER : XCB_RENDER_PICT_OP_SRC); xcb_render_composite(w->sc->dpy->conn, - //XCB_RENDER_PICT_OP_SRC, /* - for solid */ - XCB_RENDER_PICT_OP_OVER, /* - for argb */ + op, wd->picture, XCB_NONE, d->overlay_buffer, diff --git a/window.c b/window.c index 3aa9a95..794a1e4 100644 --- a/window.c +++ b/window.c @@ -23,6 +23,7 @@ typedef struct { int x, y, w, h, bw; gboolean attr_mapped; gboolean input_only; + gboolean argb; xcb_visualid_t visual; xcb_pixmap_t pixmap; @@ -253,12 +254,14 @@ window_get_geometry_reply(d_window_priv_t *w) w->w = rep->width; w->h = rep->height; w->bw = rep->border_width; + w->argb = rep->depth == 32; free(rep); } else { w->x = w->y = -1; w->w = w->h = 1; w->bw = 0; + w->argb = FALSE; } if (err) { printf("error getting geometry for window 0x%x\n", w->id); @@ -283,6 +286,15 @@ window_is_attr_mapped(d_window_t *pubw) return w->attr_mapped; } +gboolean +window_is_argb(d_window_t *pubw) +{ + d_window_priv_t *w = (d_window_priv_t*)pubw; + if (w->waiting_geom) + window_get_geometry_reply(w); + return w->argb; +} + xcb_visualid_t window_get_visual(d_window_t *pubw) { diff --git a/window.h b/window.h index 7e6784a..a3fc770 100644 --- a/window.h +++ b/window.h @@ -31,6 +31,7 @@ gboolean window_is_zombie(d_window_t *w); gboolean window_is_input_only(d_window_t *w); gboolean window_is_mapped(d_window_t *w); gboolean window_is_attr_mapped(d_window_t *w); +gboolean window_is_argb(d_window_t *w); void window_get_area(d_window_t *pubw, int *x, int *y, int *width, int *height, int *border_width); -- 1.9.1