diff options
author | okan <okan> | 2012-12-17 02:28:45 +0000 |
---|---|---|
committer | okan <okan> | 2012-12-17 02:28:45 +0000 |
commit | 6900cd36121062f81f29ec3651aa1ee8807edbe1 (patch) | |
tree | bbbf15f9401923e29d45105572ce8727e74c3267 /font.c | |
parent | a3aaad2c187278b7ac1cf75cb03882dd3d20f29b (diff) | |
download | cwm-6900cd36121062f81f29ec3651aa1ee8807edbe1.tar.gz cwm-6900cd36121062f81f29ec3651aa1ee8807edbe1.tar.xz cwm-6900cd36121062f81f29ec3651aa1ee8807edbe1.zip |
non-trivial menu drawing rewrite, moving to Xft and solving various
font/color drawing issues; from Alexander Polakov
Diffstat (limited to 'font.c')
-rw-r--r-- | font.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/font.c b/font.c index 0e1c144..cbd5b56 100644 --- a/font.c +++ b/font.c @@ -49,20 +49,37 @@ font_height(struct screen_ctx *sc) } void -font_init(struct screen_ctx *sc, const char *name, const char *color) +font_init(struct screen_ctx *sc, const char *name, const char **color) { + int i; + XRenderColor c; + sc->xftdraw = XftDrawCreate(X_Dpy, sc->rootwin, DefaultVisual(X_Dpy, sc->which), DefaultColormap(X_Dpy, sc->which)); if (sc->xftdraw == NULL) errx(1, "XftDrawCreate"); - if (!XftColorAllocName(X_Dpy, DefaultVisual(X_Dpy, sc->which), - DefaultColormap(X_Dpy, sc->which), color, &sc->xftcolor)) - errx(1, "XftColorAllocName"); - sc->font = XftFontOpenName(X_Dpy, sc->which, name); if (sc->font == NULL) errx(1, "XftFontOpenName"); + for(i = 0; i < CWM_COLOR_MENU_MAX; i++) { + if (*color[i] == '\0') + break; + if (!XftColorAllocName(X_Dpy, DefaultVisual(X_Dpy, sc->which), + DefaultColormap(X_Dpy, sc->which), color[i], + &sc->xftcolor[i])) + errx(1, "XftColorAllocName"); + } + if (i == CWM_COLOR_MENU_MAX) + return; + + xu_xorcolor(sc->xftcolor[CWM_COLOR_MENU_BG].color, + sc->xftcolor[CWM_COLOR_MENU_FG].color, &c); + xu_xorcolor(sc->xftcolor[CWM_COLOR_MENU_FONT].color, c, &c); + if (!XftColorAllocValue(X_Dpy, DefaultVisual(X_Dpy, sc->which), + DefaultColormap(X_Dpy, sc->which), &c, + &sc->xftcolor[CWM_COLOR_MENU_FONT_SEL])) + errx(1, "XftColorAllocValue"); } int @@ -78,9 +95,12 @@ font_width(struct screen_ctx *sc, const char *text, int len) void font_draw(struct screen_ctx *sc, const char *text, int len, - Drawable d, int x, int y) + Drawable d, int active, int x, int y) { + int color; + + color = active ? CWM_COLOR_MENU_FONT_SEL : CWM_COLOR_MENU_FONT; XftDrawChange(sc->xftdraw, d); - XftDrawStringUtf8(sc->xftdraw, &sc->xftcolor, sc->font, x, y, + XftDrawStringUtf8(sc->xftdraw, &sc->xftcolor[color], sc->font, x, y, (const FcChar8*)text, len); } |