diff options
| -rw-r--r-- | config.arg.h | 1 | ||||
| -rw-r--r-- | config.default.h | 1 | ||||
| -rw-r--r-- | dmenu.h | 3 | ||||
| -rw-r--r-- | draw.c | 48 | ||||
| -rw-r--r-- | main.c | 11 | 
5 files changed, 38 insertions, 26 deletions
| diff --git a/config.arg.h b/config.arg.h index 30c422d..c5e1874 100644 --- a/config.arg.h +++ b/config.arg.h @@ -6,3 +6,4 @@  #define FONT			"-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"  #define BGCOLOR			"#eeeeee"  #define FGCOLOR			"#666699" +#define BORDERCOLOR		"#9999CC" diff --git a/config.default.h b/config.default.h index 0b1abb4..cf1baea 100644 --- a/config.default.h +++ b/config.default.h @@ -6,3 +6,4 @@  #define FONT			"fixed"  #define BGCOLOR			"#666699"  #define FGCOLOR			"#eeeeee" +#define BORDERCOLOR		"#9999CC" @@ -24,6 +24,7 @@ struct DC { /* draw context */  	int x, y, w, h;  	unsigned long bg;  	unsigned long fg; +	unsigned long border;  	Drawable drawable;  	Fnt font;  	GC gc; @@ -34,7 +35,7 @@ extern Display *dpy;  extern DC dc;  /* draw.c */ -extern void drawtext(const char *text, Bool sel); +extern void drawtext(const char *text, Bool invert, Bool border);  extern unsigned long getcolor(const char *colstr);  extern void setfont(const char *fontstr);  extern unsigned int textw(const char *text); @@ -9,6 +9,26 @@  /* static */ +static void +drawborder(void) +{ +	XPoint points[5]; + +	XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); +	XSetForeground(dpy, dc.gc, dc.border); +	points[0].x = dc.x; +	points[0].y = dc.y; +	points[1].x = dc.w - 1; +	points[1].y = 0; +	points[2].x = 0; +	points[2].y = dc.h - 1; +	points[3].x = -(dc.w - 1); +	points[3].y = 0; +	points[4].x = 0; +	points[4].y = -(dc.h - 1); +	XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); +} +  static unsigned int  textnw(const char *text, unsigned int len)  { @@ -24,18 +44,21 @@ textnw(const char *text, unsigned int len)  /* extern */  void -drawtext(const char *text, Bool sel) +drawtext(const char *text, Bool invert, Bool border)  {  	int x, y, w, h;  	static char buf[256];  	unsigned int len;  	XGCValues gcv; -	XPoint points[5];  	XRectangle r = { dc.x, dc.y, dc.w, dc.h }; -	XSetForeground(dpy, dc.gc, sel ? dc.fg : dc.bg); +	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);  	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); +  	w = 0; +	if(border) +		drawborder(); +  	if(!text)  		return; @@ -56,8 +79,8 @@ drawtext(const char *text, Bool sel)  	if(w > dc.w)  		return; /* too long */ -	gcv.foreground = sel ? dc.bg : dc.fg; -	gcv.background = sel ? dc.fg : dc.bg; +	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, @@ -68,21 +91,6 @@ drawtext(const char *text, Bool sel)  		XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);  		XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len);  	} -	if(sel) { -		XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); -		points[0].x = dc.x; -		points[0].y = dc.y; -		points[1].x = dc.w - 1; -		points[1].y = 0; -		points[2].x = 0; -		points[2].y = dc.h - 1; -		points[3].x = -(dc.w - 1); -		points[3].y = 0; -		points[4].x = 0; -		points[4].y = -(dc.h - 1); -		XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); -	} -  }  unsigned long @@ -77,17 +77,17 @@ drawmenu()  	dc.y = 0;  	dc.w = mw;  	dc.h = mh; -	drawtext(NULL, False); +	drawtext(NULL, False, False);  	/* print command */  	if(cmdw && item)  		dc.w = cmdw; -	drawtext(text[0] ? text : NULL, False); +	drawtext(text[0] ? text : NULL, False, False);  	dc.x += cmdw;  	if(curr) {  		dc.w = SPACE; -		drawtext((curr && curr->left) ? "<" : NULL, False); +		drawtext((curr && curr->left) ? "<" : NULL, False, False);  		dc.x += dc.w;  		/* determine maximum items */ @@ -95,13 +95,13 @@ drawmenu()  			dc.w = textw(i->text);  			if(dc.w > mw / 3)  				dc.w = mw / 3; -			drawtext(i->text, sel == i); +			drawtext(i->text, sel == i, sel == i);  			dc.x += dc.w;  		}  		dc.x = mw - SPACE;  		dc.w = SPACE; -		drawtext(next ? ">" : NULL, False); +		drawtext(next ? ">" : NULL, False, False);  	}  	XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);  	XFlush(dpy); @@ -316,6 +316,7 @@ main(int argc, char *argv[])  	/* style */  	dc.bg = getcolor(BGCOLOR);  	dc.fg = getcolor(FGCOLOR); +	dc.border = getcolor(BORDERCOLOR);  	setfont(FONT);  	wa.override_redirect = 1; | 
