|
@@ -61,7 +61,7 @@ utf8decode(const char *c, long *u, size_t clen)
|
|
|
}
|
|
|
|
|
|
Drw *
|
|
|
-drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
|
|
|
+drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h, Visual *visual, unsigned int depth, Colormap cmap)
|
|
|
{
|
|
|
Drw *drw = ecalloc(1, sizeof(Drw));
|
|
|
|
|
@@ -70,8 +70,11 @@ drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h
|
|
|
drw->root = root;
|
|
|
drw->w = w;
|
|
|
drw->h = h;
|
|
|
- drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
|
|
|
- drw->gc = XCreateGC(dpy, root, 0, NULL);
|
|
|
+ drw->visual = visual;
|
|
|
+ drw->depth = depth;
|
|
|
+ drw->cmap = cmap;
|
|
|
+ drw->drawable = XCreatePixmap(dpy, root, w, h, depth);
|
|
|
+ drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL);
|
|
|
XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
|
|
|
|
|
|
return drw;
|
|
@@ -87,7 +90,7 @@ drw_resize(Drw *drw, unsigned int w, unsigned int h)
|
|
|
drw->h = h;
|
|
|
if (drw->drawable)
|
|
|
XFreePixmap(drw->dpy, drw->drawable);
|
|
|
- drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen));
|
|
|
+ drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->depth);
|
|
|
}
|
|
|
|
|
|
void
|
|
@@ -193,21 +196,21 @@ drw_fontset_free(Fnt *font)
|
|
|
}
|
|
|
|
|
|
void
|
|
|
-drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
|
|
|
+drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha)
|
|
|
{
|
|
|
if (!drw || !dest || !clrname)
|
|
|
return;
|
|
|
|
|
|
- if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
|
|
|
- DefaultColormap(drw->dpy, drw->screen),
|
|
|
+ if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap,
|
|
|
clrname, dest))
|
|
|
die("error, cannot allocate color '%s'", clrname);
|
|
|
+ dest->pixel = (dest->pixel & 0x00FFFFFFFU) | alpha << 24;
|
|
|
}
|
|
|
|
|
|
/* Wrapper to create color schemes. The caller has to call free(3) on the
|
|
|
* returned color scheme when done using it. */
|
|
|
Clr *
|
|
|
-drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
|
|
|
+drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount)
|
|
|
{
|
|
|
size_t i;
|
|
|
Clr *ret;
|
|
@@ -217,7 +220,7 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
|
|
|
return NULL;
|
|
|
|
|
|
for (i = 0; i < clrcount; i++)
|
|
|
- drw_clr_create(drw, &ret[i], clrnames[i]);
|
|
|
+ drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -273,9 +276,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
|
|
|
} else {
|
|
|
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
|
|
|
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
|
|
|
- d = XftDrawCreate(drw->dpy, drw->drawable,
|
|
|
- DefaultVisual(drw->dpy, drw->screen),
|
|
|
- DefaultColormap(drw->dpy, drw->screen));
|
|
|
+ d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual, drw->cmap);
|
|
|
x += lpad;
|
|
|
w -= lpad;
|
|
|
}
|