diff --git a/drw.c b/drw.c index 7e99a38..eeb6a13 100644 --- a/drw.c +++ b/drw.c @@ -80,6 +80,8 @@ Drw *drw_create(Display *dpy, int screen, Window root, unsigned int w, drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen)); drw->gc = XCreateGC(dpy, root, 0, NULL); XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter); + drw->xftdraw = XftDrawCreate(dpy, drw->drawable, DefaultVisual(dpy, screen), + DefaultColormap(dpy, screen)); return drw; } @@ -96,11 +98,20 @@ void drw_resize(Drw *drw, unsigned int w, unsigned int h) { } drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen)); + if (drw->xftdraw) { + XftDrawDestroy(drw->xftdraw); + } + drw->xftdraw = XftDrawCreate(drw->dpy, drw->drawable, + DefaultVisual(drw->dpy, drw->screen), + DefaultColormap(drw->dpy, drw->screen)); } void drw_free(Drw *drw) { XFreePixmap(drw->dpy, drw->drawable); XFreeGC(drw->dpy, drw->gc); + if (drw->xftdraw) { + XftDrawDestroy(drw->xftdraw); + } drw_fontset_free(drw->fonts); free(drw); } @@ -272,7 +283,6 @@ int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int ellipsis_w = 0; unsigned int ellipsis_len; - XftDraw *d = NULL; Fnt *usedfont; Fnt *curfont; Fnt *nextfont; @@ -316,9 +326,6 @@ int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, 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)); x += lpad; w -= lpad; } @@ -386,7 +393,8 @@ int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, if (utf8strlen) { if (render) { ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent; - XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg], + XftDrawStringUtf8(drw->xftdraw, + &drw->scheme[invert ? ColBg : ColFg], usedfont->xfont, x, ty, (XftChar8 *)utf8str, utf8strlen); } @@ -457,9 +465,6 @@ int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, } } } - if (d) { - XftDrawDestroy(d); - } return x + (render ? w : 0); } diff --git a/drw.h b/drw.h index 971765c..2bf738e 100644 --- a/drw.h +++ b/drw.h @@ -35,6 +35,7 @@ typedef struct { GC gc; Clr *scheme; Fnt *fonts; + XftDraw *xftdraw; } Drw; /* Drawable abstraction */