-/*
- xcb_render_composite(w->sc->dpy->conn,
- XCB_RENDER_PICT_OP_OVER,
- wd->shadow_picture,
- wd->picture,
- d->overlay_buffer,
- 0, 0, 0, 0,
- x+d->xshadowoff, y+d->yshadowoff,
- width + bwidth*2, height + bwidth *2);
-*/
+ int xoff = d->xshadowoff;
+ int yoff = d->yshadowoff;
+ float alpha = d->shadowalpha;
+
+ alpha *= window_get_opacity(w);
+ alpha /= 0xffff;
+
+ if (alpha < 0.01) return;
+
+ glEnable(GL_BLEND);
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ /* black shadow */
+ glColor4f(0.0f, 0.0f, 0.0f, alpha);
+
+ if (window_is_argb(w)) {
+ /* shape the shadow to the window's alpha levels */
+ glBindTexture(GL_TEXTURE_2D, wd->texname);
+
+ glBegin(GL_QUADS);
+ glVertex2i(x + xoff, y + yoff);
+ glTexCoord2f(1, 0);
+ glVertex2i(x + width + bwidth + xoff, y + yoff);
+ glTexCoord2f(1, 1);
+ glVertex2i(x + width + bwidth + xoff,
+ y + height + bwidth + yoff);
+ glTexCoord2f(0, 1);
+ glVertex2i(x + xoff, y + height + bwidth + yoff);
+ glTexCoord2f(0, 0);
+ glEnd();
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+ }
+ else
+ /* draw a solid rectangle */
+ glRecti(x + xoff, y + yoff,
+ x + width + bwidth - 1 + xoff, y + height + bwidth - 1 + yoff);
+
+ glColor4f(0.0f, 0.0f, 0.0f, 0.0f);
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+ glDisable(GL_BLEND);