back to 3 colors 65be999a
Anselm R. Garbe · 2006-08-25 07:54 5 file(s) · +32 −27
config.arg.h +3 −4
4 4
 */
5 5
6 6
#define FONT			"-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*"
7 -
#define NORMBGCOLOR		"#666699"
8 -
#define NORMFGCOLOR		"#eeeeee"
9 -
#define SELBGCOLOR		"#eeeeee"
10 -
#define SELFGCOLOR		"#000088"
7 +
#define BGCOLOR			"#666699"
8 +
#define FGCOLOR			"#eeeeee"
9 +
#define BORDERCOLOR		"#9999CC"
config.default.h +3 −4
4 4
 */
5 5
6 6
#define FONT			"fixed"
7 -
#define NORMBGCOLOR		"#666699"
8 -
#define NORMFGCOLOR		"#eeeeee"
9 -
#define SELBGCOLOR		"#eeeeee"
10 -
#define SELFGCOLOR		"#666699"
7 +
#define BGCOLOR			"#666699"
8 +
#define FGCOLOR			"#eeeeee"
9 +
#define BORDERCOLOR		"#9999CC"
dmenu.h +4 −3
22 22
23 23
struct DC { /* draw context */
24 24
	int x, y, w, h;
25 -
	unsigned long bg[2];
26 -
	unsigned long fg[2];
25 +
	unsigned long bg;
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, unsigned int colidx, Bool border);
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 +14 −7
24 24
/* extern */
25 25
26 26
void
27 -
drawtext(const char *text, unsigned int colidx, Bool border)
27 +
drawtext(const char *text, Bool invert, Bool border)
28 28
{
29 29
	int x, y, w, h;
30 30
	static char buf[256];
31 31
	unsigned int len, olen;
32 +
	XGCValues gcv;
32 33
	XPoint points[5];
33 34
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
34 35
35 -
	XSetForeground(dpy, dc.gc, dc.bg[colidx]);
36 +
	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
36 37
	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
37 38
38 39
	w = 0;
39 -
	XSetForeground(dpy, dc.gc, dc.fg[colidx]);
40 40
	if(border) {
41 41
		points[0].x = dc.x;
42 42
		points[0].y = dc.y;
48 48
		points[3].y = 0;
49 49
		points[4].x = 0;
50 50
		points[4].y = -(dc.h - 1);
51 +
		XSetForeground(dpy, dc.gc, dc.border);
51 52
		XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious);
52 53
	}
53 54
79 80
	if(w > dc.w)
80 81
		return; /* too long */
81 82
82 -
	if(dc.font.set)
83 -
		XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
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 +
	}
84 90
	else {
85 -
		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
86 -
		XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
91 +
		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 94
	}
88 95
}
89 96
main.c +8 −9
77 77
	dc.y = 0;
78 78
	dc.w = mw;
79 79
	dc.h = mh;
80 -
	drawtext(NULL, 0, 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, 0, 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, 0, 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 ? 1 : 0, 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, 0, 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);
315 315
		usleep(1000);
316 316
317 317
	/* style */
318 -
	dc.bg[0] = getcolor(NORMBGCOLOR);
319 -
	dc.fg[0] = getcolor(NORMFGCOLOR);
320 -
	dc.bg[1] = getcolor(SELBGCOLOR);
321 -
	dc.fg[1] = getcolor(SELFGCOLOR);
318 +
	dc.bg = getcolor(BGCOLOR);
319 +
	dc.fg = getcolor(FGCOLOR);
320 +
	dc.border = getcolor(BORDERCOLOR);
322 321
	setfont(FONT);
323 322
324 323
	wa.override_redirect = 1;