Xinqi Bao's Git

man page updated
[dwm.git] / drw.c
diff --git a/drw.c b/drw.c
index 9c39086..fe3aadd 100644 (file)
--- a/drw.c
+++ b/drw.c
@@ -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
@@ -194,21 +197,22 @@ 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 & 0x00ffffffU) | (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;
@@ -218,7 +222,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;
 }
 
@@ -274,9 +278,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;
        }
@@ -310,11 +312,8 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lp
                if (utf8strlen) {
                        drw_font_getexts(usedfont, utf8str, utf8strlen, &ew, NULL);
                        /* shorten text if necessary */
-                       if (ew > w)
-                               for (ew = 0, len = 0; ew < w - lpad * 2 && len < MIN(utf8strlen, sizeof(buf) - 1); len++)
-                                       drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
-                       else
-                               len = MIN(utf8strlen, sizeof(buf) - 1);
+                       for (len = MIN(utf8strlen, sizeof(buf) - 1); len && ew > w; len--)
+                               drw_font_getexts(usedfont, utf8str, len, &ew, NULL);
 
                        if (len) {
                                memcpy(buf, utf8str, len);