@@ -4,6 +4,7 @@ | |||||
*/ | */ | ||||
#define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*" | #define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*" | ||||
#define BGCOLOR "#666699" | |||||
#define FGCOLOR "#eeeeee" | |||||
#define BORDERCOLOR "#9999CC" | |||||
#define NORMBGCOLOR "#666699" | |||||
#define NORMFGCOLOR "#eeeeee" | |||||
#define SELBGCOLOR "#eeeeee" | |||||
#define SELFGCOLOR "#666699" |
@@ -4,6 +4,7 @@ | |||||
*/ | */ | ||||
#define FONT "fixed" | #define FONT "fixed" | ||||
#define BGCOLOR "#666699" | |||||
#define FGCOLOR "#eeeeee" | |||||
#define BORDERCOLOR "#9999CC" | |||||
#define NORMBGCOLOR "#666699" | |||||
#define NORMFGCOLOR "#eeeeee" | |||||
#define SELBGCOLOR "#eeeeee" | |||||
#define SELBFCOLOR "#666699" |
@@ -1,5 +1,5 @@ | |||||
# dmenu version | # dmenu version | ||||
VERSION = 0.5 | |||||
VERSION = 0.6 | |||||
# Customize below to fit your system | # Customize below to fit your system | ||||
@@ -22,9 +22,8 @@ struct Fnt { | |||||
struct DC { /* draw context */ | struct DC { /* draw context */ | ||||
int x, y, w, h; | int x, y, w, h; | ||||
unsigned long bg; | |||||
unsigned long fg; | |||||
unsigned long border; | |||||
unsigned long bg[2]; | |||||
unsigned long fg[2]; | |||||
Drawable drawable; | Drawable drawable; | ||||
Fnt font; | Fnt font; | ||||
GC gc; | GC gc; | ||||
@@ -35,7 +34,7 @@ extern Display *dpy; | |||||
extern DC dc; | extern DC dc; | ||||
/* draw.c */ | /* draw.c */ | ||||
extern void drawtext(const char *text, Bool invert, Bool border); | |||||
extern void drawtext(const char *text, unsigned int colidx, Bool border); | |||||
extern unsigned long getcolor(const char *colstr); | extern unsigned long getcolor(const char *colstr); | ||||
extern void setfont(const char *fontstr); | extern void setfont(const char *fontstr); | ||||
extern unsigned int textw(const char *text); | extern unsigned int textw(const char *text); | ||||
@@ -24,7 +24,7 @@ textnw(const char *text, unsigned int len) | |||||
/* extern */ | /* extern */ | ||||
void | void | ||||
drawtext(const char *text, Bool invert, Bool border) | |||||
drawtext(const char *text, unsigned int colidx, Bool border) | |||||
{ | { | ||||
int x, y, w, h; | int x, y, w, h; | ||||
static char buf[256]; | static char buf[256]; | ||||
@@ -33,10 +33,11 @@ drawtext(const char *text, Bool invert, Bool border) | |||||
XPoint points[5]; | XPoint points[5]; | ||||
XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | ||||
XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); | |||||
XSetForeground(dpy, dc.gc, dc.bg[colidx]); | |||||
XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | ||||
w = 0; | w = 0; | ||||
XSetForeground(dpy, dc.gc, dc.fg[colidx]); | |||||
if(border) { | if(border) { | ||||
points[0].x = dc.x; | points[0].x = dc.x; | ||||
points[0].y = dc.y; | points[0].y = dc.y; | ||||
@@ -48,7 +49,6 @@ drawtext(const char *text, Bool invert, Bool border) | |||||
points[3].y = 0; | points[3].y = 0; | ||||
points[4].x = 0; | points[4].x = 0; | ||||
points[4].y = -(dc.h - 1); | points[4].y = -(dc.h - 1); | ||||
XSetForeground(dpy, dc.gc, dc.border); | |||||
XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); | XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); | ||||
} | } | ||||
@@ -80,17 +80,12 @@ drawtext(const char *text, Bool invert, Bool border) | |||||
if(w > dc.w) | if(w > dc.w) | ||||
return; /* too long */ | return; /* too long */ | ||||
gcv.foreground = invert ? dc.bg : dc.fg; | |||||
gcv.background = invert ? dc.fg : dc.bg; | |||||
if(dc.font.set) { | |||||
XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); | |||||
XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc, | |||||
x, y, buf, len); | |||||
} | |||||
if(dc.font.set) | |||||
XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); | |||||
else { | else { | ||||
gcv.font = dc.font.xfont->fid; | gcv.font = dc.font.xfont->fid; | ||||
XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); | |||||
XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len); | |||||
XChangeGC(dpy, dc.gc, GCFont, &gcv); | |||||
XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); | |||||
} | } | ||||
} | } | ||||
@@ -77,17 +77,17 @@ drawmenu() | |||||
dc.y = 0; | dc.y = 0; | ||||
dc.w = mw; | dc.w = mw; | ||||
dc.h = mh; | dc.h = mh; | ||||
drawtext(NULL, False, False); | |||||
drawtext(NULL, 0, False); | |||||
/* print command */ | /* print command */ | ||||
if(cmdw && item) | if(cmdw && item) | ||||
dc.w = cmdw; | dc.w = cmdw; | ||||
drawtext(text[0] ? text : NULL, False, False); | |||||
drawtext(text[0] ? text : NULL, 0, False); | |||||
dc.x += cmdw; | dc.x += cmdw; | ||||
if(curr) { | if(curr) { | ||||
dc.w = SPACE; | dc.w = SPACE; | ||||
drawtext((curr && curr->left) ? "<" : NULL, False, False); | |||||
drawtext((curr && curr->left) ? "<" : NULL, 0, False); | |||||
dc.x += dc.w; | dc.x += dc.w; | ||||
/* determine maximum items */ | /* determine maximum items */ | ||||
@@ -95,13 +95,13 @@ drawmenu() | |||||
dc.w = textw(i->text); | dc.w = textw(i->text); | ||||
if(dc.w > mw / 3) | if(dc.w > mw / 3) | ||||
dc.w = mw / 3; | dc.w = mw / 3; | ||||
drawtext(i->text, sel == i, sel == i); | |||||
drawtext(i->text, sel == i ? 1 : 0, sel == i); | |||||
dc.x += dc.w; | dc.x += dc.w; | ||||
} | } | ||||
dc.x = mw - SPACE; | dc.x = mw - SPACE; | ||||
dc.w = SPACE; | dc.w = SPACE; | ||||
drawtext(next ? ">" : NULL, False, False); | |||||
drawtext(next ? ">" : NULL, 0, False); | |||||
} | } | ||||
XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); | XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); | ||||
XFlush(dpy); | XFlush(dpy); | ||||
@@ -315,9 +315,10 @@ main(int argc, char *argv[]) | |||||
usleep(1000); | usleep(1000); | ||||
/* style */ | /* style */ | ||||
dc.bg = getcolor(BGCOLOR); | |||||
dc.fg = getcolor(FGCOLOR); | |||||
dc.border = getcolor(BORDERCOLOR); | |||||
dc.bg[0] = getcolor(NORMBGCOLOR); | |||||
dc.fg[0] = getcolor(NORMFGCOLOR); | |||||
dc.bg[1] = getcolor(SELBGCOLOR); | |||||
dc.fg[1] = getcolor(SELFGCOLOR); | |||||
setfont(FONT); | setfont(FONT); | ||||
wa.override_redirect = 1; | wa.override_redirect = 1; | ||||