drawing border around sel item dd902868
Anselm R.Garbe · 2006-08-10 11:07 2 file(s) · +21 −6
dmenu.h +1 −1
34 34
extern DC dc;
35 35
36 36
/* draw.c */
37 -
extern void drawtext(const char *text, Bool invert);
37 +
extern void drawtext(const char *text, Bool sel);
38 38
extern unsigned long getcolor(const char *colstr);
39 39
extern void setfont(const char *fontstr);
40 40
extern unsigned int textw(const char *text);
draw.c +20 −5
24 24
/* extern */
25 25
26 26
void
27 -
drawtext(const char *text, Bool invert)
27 +
drawtext(const char *text, Bool sel)
28 28
{
29 29
	int x, y, w, h;
30 30
	static char buf[256];
31 31
	unsigned int len;
32 32
	XGCValues gcv;
33 +
	XPoint points[5];
33 34
	XRectangle r = { dc.x, dc.y, dc.w, dc.h };
34 35
35 -
	XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg);
36 +
	XSetForeground(dpy, dc.gc, sel ? dc.fg : dc.bg);
36 37
	XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
37 38
	w = 0;
38 -
39 39
	if(!text)
40 40
		return;
41 41
56 56
	if(w > dc.w)
57 57
		return; /* too long */
58 58
59 -
	gcv.foreground = invert ? dc.bg : dc.fg;
60 -
	gcv.background = invert ? dc.fg : dc.bg;
59 +
	gcv.foreground = sel ? dc.bg : dc.fg;
60 +
	gcv.background = sel ? dc.fg : dc.bg;
61 61
	if(dc.font.set) {
62 62
		XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv);
63 63
		XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc,
68 68
		XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv);
69 69
		XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len);
70 70
	}
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 +
71 86
}
72 87
73 88
unsigned long