readded border colors, this sucks least c6113a3b
Anselm R.Garbe · 2006-08-10 11:13 5 file(s) · +38 −26
config.arg.h +1 −0
6 6
#define FONT			"-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
7 7
#define BGCOLOR			"#eeeeee"
8 8
#define FGCOLOR			"#666699"
9 +
#define BORDERCOLOR		"#9999CC"
config.default.h +1 −0
6 6
#define FONT			"fixed"
7 7
#define BGCOLOR			"#666699"
8 8
#define FGCOLOR			"#eeeeee"
9 +
#define BORDERCOLOR		"#9999CC"
dmenu.h +2 −1
24 24
	int x, y, w, h;
25 25
	unsigned long bg;
26 26
	unsigned long fg;
27 +
	unsigned long border;
27 28
	Drawable drawable;
28 29
	Fnt font;
29 30
	GC gc;
34 35
extern DC dc;
35 36
36 37
/* draw.c */
37 -
extern void drawtext(const char *text, Bool sel);
38 +
extern void drawtext(const char *text, Bool invert, Bool border);
38 39
extern unsigned long getcolor(const char *colstr);
39 40
extern void setfont(const char *fontstr);
40 41
extern unsigned int textw(const char *text);
draw.c +28 −20
9 9
10 10
/* static */
11 11
12 +
static void
13 +
drawborder(void)
14 +
{
15 +
	XPoint points[5];
16 +
17 +
	XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
18 +
	XSetForeground(dpy, dc.gc, dc.border);
19 +
	points[0].x = dc.x;
20 +
	points[0].y = dc.y;
21 +
	points[1].x = dc.w - 1;
22 +
	points[1].y = 0;
23 +
	points[2].x = 0;
24 +
	points[2].y = dc.h - 1;
25 +
	points[3].x = -(dc.w - 1);
26 +
	points[3].y = 0;
27 +
	points[4].x = 0;
28 +
	points[4].y = -(dc.h - 1);
29 +
	XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
30 +
}
31 +
12 32
static unsigned int
13 33
textnw(const char *text, unsigned int len)
14 34
{
24 44
/* extern */
25 45
26 46
void
27 -
drawtext(const char *text, Bool sel)
47 +
drawtext(const char *text, Bool invert, Bool border)
28 48
{
29 49
	int x, y, w, h;
30 50
	static char buf[256];
31 51
	unsigned int len;
32 52
	XGCValues gcv;
33 -
	XPoint points[5];
34 53
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
35 54
36 -
	XSetForeground(dpy, dc.gc, sel ? dc.fg : dc.bg);
55 +
	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
37 56
	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
57 +
38 58
	w = 0;
59 +
	if(border)
60 +
		drawborder();
61 +
39 62
	if(!text)
40 63
		return;
41 64
56 79
	if(w > dc.w)
57 80
		return; /* too long */
58 81
59 -
	gcv.foreground = sel ? dc.bg : dc.fg;
60 -
	gcv.background = sel ? dc.fg : dc.bg;
82 +
	gcv.foreground = invert ? dc.bg : dc.fg;
83 +
	gcv.background = invert ? dc.fg : dc.bg;
61 84
	if(dc.font.set) {
62 85
		XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv);
63 86
		XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc,
68 91
		XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);
69 92
		XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len);
70 93
	}
71 -
	if(sel) {
72 -
		XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
73 -
		points[0].x = dc.x;
74 -
		points[0].y = dc.y;
75 -
		points[1].x = dc.w - 1;
76 -
		points[1].y = 0;
77 -
		points[2].x = 0;
78 -
		points[2].y = dc.h - 1;
79 -
		points[3].x = -(dc.w - 1);
80 -
		points[3].y = 0;
81 -
		points[4].x = 0;
82 -
		points[4].y = -(dc.h - 1);
83 -
		XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
84 -
	}
85 -
86 94
}
87 95
88 96
unsigned long
main.c +6 −5
77 77
	dc.y = 0;
78 78
	dc.w = mw;
79 79
	dc.h = mh;
80 -
	drawtext(NULL, False);
80 +
	drawtext(NULL, False, False);
81 81
82 82
	/* print command */
83 83
	if(cmdw && item)
84 84
		dc.w = cmdw;
85 -
	drawtext(text[0] ? text : NULL, False);
85 +
	drawtext(text[0] ? text : NULL, False, False);
86 86
	dc.x += cmdw;
87 87
88 88
	if(curr) {
89 89
		dc.w = SPACE;
90 -
		drawtext((curr && curr->left) ? "<" : NULL, False);
90 +
		drawtext((curr && curr->left) ? "<" : NULL, False, False);
91 91
		dc.x += dc.w;
92 92
93 93
		/* determine maximum items */
95 95
			dc.w = textw(i->text);
96 96
			if(dc.w > mw / 3)
97 97
				dc.w = mw / 3;
98 -
			drawtext(i->text, sel == i);
98 +
			drawtext(i->text, sel == i, sel == i);
99 99
			dc.x += dc.w;
100 100
		}
101 101
102 102
		dc.x = mw - SPACE;
103 103
		dc.w = SPACE;
104 -
		drawtext(next ? ">" : NULL, False);
104 +
		drawtext(next ? ">" : NULL, False, False);
105 105
	}
106 106
	XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
107 107
	XFlush(dpy);
316 316
	/* style */
317 317
	dc.bg = getcolor(BGCOLOR);
318 318
	dc.fg = getcolor(FGCOLOR);
319 +
	dc.border = getcolor(BORDERCOLOR);
319 320
	setfont(FONT);
320 321
321 322
	wa.override_redirect = 1;