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);
//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,
int x, y, w, h, bw;
gboolean attr_mapped;
gboolean input_only;
+ gboolean argb;
xcb_visualid_t visual;
xcb_pixmap_t pixmap;
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);
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)
{
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);