migrated dmenu to use 4 instead of 3 colors e980c7ff
Anselm R. Garbe · 2006-08-24 11:47 6 file(s) · +28 −31
config.arg.h +4 −3
4 4
 */
5 5
6 6
#define FONT			"-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
7 -
#define BGCOLOR			"#666699"
8 -
#define FGCOLOR			"#eeeeee"
9 -
#define BORDERCOLOR		"#9999CC"
7 +
#define NORMBGCOLOR		"#666699"
8 +
#define NORMFGCOLOR		"#eeeeee"
9 +
#define SELBGCOLOR		"#eeeeee"
10 +
#define SELFGCOLOR		"#666699"
config.default.h +4 −3
4 4
 */
5 5
6 6
#define FONT			"fixed"
7 -
#define BGCOLOR			"#666699"
8 -
#define FGCOLOR			"#eeeeee"
9 -
#define BORDERCOLOR		"#9999CC"
7 +
#define NORMBGCOLOR		"#666699"
8 +
#define NORMFGCOLOR		"#eeeeee"
9 +
#define SELBGCOLOR		"#eeeeee"
10 +
#define SELBFCOLOR		"#666699"
config.mk +1 −1
1 1
# dmenu version
2 -
VERSION = 0.5
2 +
VERSION = 0.6
3 3
4 4
# Customize below to fit your system
5 5
dmenu.h +3 −4
22 22
23 23
struct DC { /* draw context */
24 24
	int x, y, w, h;
25 -
	unsigned long bg;
26 -
	unsigned long fg;
27 -
	unsigned long border;
25 +
	unsigned long bg[2];
26 +
	unsigned long fg[2];
28 27
	Drawable drawable;
29 28
	Fnt font;
30 29
	GC gc;
35 34
extern DC dc;
36 35
37 36
/* draw.c */
38 -
extern void drawtext(const char *text, Bool invert, Bool border);
37 +
extern void drawtext(const char *text, unsigned int colidx, Bool border);
39 38
extern unsigned long getcolor(const char *colstr);
40 39
extern void setfont(const char *fontstr);
41 40
extern unsigned int textw(const char *text);
draw.c +7 −12
24 24
/* extern */
25 25
26 26
void
27 -
drawtext(const char *text, Bool invert, Bool border)
27 +
drawtext(const char *text, unsigned int colidx, Bool border)
28 28
{
29 29
	int x, y, w, h;
30 30
	static char buf[256];
33 33
	XPoint points[5];
34 34
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
35 35
36 -
	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
36 +
	XSetForeground(dpy, dc.gc, dc.bg[colidx]);
37 37
	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
38 38
39 39
	w = 0;
40 +
	XSetForeground(dpy, dc.gc, dc.fg[colidx]);
40 41
	if(border) {
41 42
		points[0].x = dc.x;
42 43
		points[0].y = dc.y;
48 49
		points[3].y = 0;
49 50
		points[4].x = 0;
50 51
		points[4].y = -(dc.h - 1);
51 -
		XSetForeground(dpy, dc.gc, dc.border);
52 52
		XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
53 53
	}
54 54
80 80
	if(w > dc.w)
81 81
		return; /* too long */
82 82
83 -
	gcv.foreground = invert ? dc.bg : dc.fg;
84 -
	gcv.background = invert ? dc.fg : dc.bg;
85 -
	if(dc.font.set) {
86 -
		XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv);
87 -
		XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc,
88 -
				x, y, buf, len);
89 -
	}
83 +
	if(dc.font.set)
84 +
		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
90 85
	else {
91 86
		gcv.font = dc.font.xfont->fid;
92 -
		XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);
93 -
		XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len);
87 +
		XChangeGC(dpy, dc.gc, GCFont, &gcv);
88 +
		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
94 89
	}
95 90
}
96 91
main.c +9 −8
77 77
	dc.y = 0;
78 78
	dc.w = mw;
79 79
	dc.h = mh;
80 -
	drawtext(NULL, False, False);
80 +
	drawtext(NULL, 0, False);
81 81
82 82
	/* print command */
83 83
	if(cmdw && item)
84 84
		dc.w = cmdw;
85 -
	drawtext(text[0] ? text : NULL, False, False);
85 +
	drawtext(text[0] ? text : NULL, 0, False);
86 86
	dc.x += cmdw;
87 87
88 88
	if(curr) {
89 89
		dc.w = SPACE;
90 -
		drawtext((curr && curr->left) ? "<" : NULL, False, False);
90 +
		drawtext((curr && curr->left) ? "<" : NULL, 0, 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, sel == i);
98 +
			drawtext(i->text, sel == i ? 1 : 0, 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, False);
104 +
		drawtext(next ? ">" : NULL, 0, False);
105 105
	}
106 106
	XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0);
107 107
	XFlush(dpy);
315 315
		usleep(1000);
316 316
317 317
	/* style */
318 -
	dc.bg = getcolor(BGCOLOR);
319 -
	dc.fg = getcolor(FGCOLOR);
320 -
	dc.border = getcolor(BORDERCOLOR);
318 +
	dc.bg[0] = getcolor(NORMBGCOLOR);
319 +
	dc.fg[0] = getcolor(NORMFGCOLOR);
320 +
	dc.bg[1] = getcolor(SELBGCOLOR);
321 +
	dc.fg[1] = getcolor(SELFGCOLOR);
321 322
	setfont(FONT);
322 323
323 324
	wa.override_redirect = 1;