20 } |
20 } |
21 return XTextWidth(dc.font.xfont, text, len); |
21 return XTextWidth(dc.font.xfont, text, len); |
22 } |
22 } |
23 |
23 |
24 static void |
24 static void |
25 drawtext(const char *text, Bool invert, Bool highlight) |
25 drawtext(const char *text, unsigned int colidx, Bool highlight) |
26 { |
26 { |
27 int x, y, w, h; |
27 int x, y, w, h; |
28 static char buf[256]; |
28 static char buf[256]; |
29 unsigned int len, olen; |
29 unsigned int len, olen; |
30 XGCValues gcv; |
|
31 XPoint points[5]; |
30 XPoint points[5]; |
32 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; |
31 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; |
33 |
32 |
34 XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); |
33 XSetForeground(dpy, dc.gc, dc.bg[colidx]); |
35 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); |
34 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); |
36 points[0].x = dc.x; |
35 points[0].x = dc.x; |
37 points[0].y = dc.y; |
36 points[0].y = dc.y; |
38 points[1].x = dc.w - 1; |
37 points[1].x = dc.w - 1; |
39 points[1].y = 0; |
38 points[1].y = 0; |
41 points[2].y = dc.h - 1; |
40 points[2].y = dc.h - 1; |
42 points[3].x = -(dc.w - 1); |
41 points[3].x = -(dc.w - 1); |
43 points[3].y = 0; |
42 points[3].y = 0; |
44 points[4].x = 0; |
43 points[4].x = 0; |
45 points[4].y = -(dc.h - 1); |
44 points[4].y = -(dc.h - 1); |
46 XSetForeground(dpy, dc.gc, dc.border); |
45 XSetForeground(dpy, dc.gc, dc.fg[colidx]); |
47 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); |
46 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); |
48 |
47 |
49 if(!text) |
48 if(!text) |
50 return; |
49 return; |
51 |
50 |
72 buf[len - 3] = '.'; |
71 buf[len - 3] = '.'; |
73 } |
72 } |
74 |
73 |
75 if(w > dc.w) |
74 if(w > dc.w) |
76 return; /* too long */ |
75 return; /* too long */ |
77 gcv.foreground = invert ? dc.bg : dc.fg; |
76 if(dc.font.set) |
78 gcv.background = invert ? dc.fg : dc.bg; |
|
79 if(dc.font.set) { |
|
80 XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); |
|
81 XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); |
77 XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); |
82 } |
|
83 else { |
78 else { |
84 gcv.font = dc.font.xfont->fid; |
79 XSetFont(dpy, dc.gc, dc.font.xfont->fid); |
85 XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); |
|
86 XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); |
80 XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); |
87 } |
81 } |
88 if(highlight) { |
82 if(highlight) { |
89 points[0].x = dc.x + 1; |
83 points[0].x = dc.x + 1; |
90 points[0].y = dc.y + 1; |
84 points[0].y = dc.y + 1; |
155 Bool istile = arrange == dotile; |
149 Bool istile = arrange == dotile; |
156 |
150 |
157 if(c == sel && issel) { |
151 if(c == sel && issel) { |
158 drawstatus(); |
152 drawstatus(); |
159 XUnmapWindow(dpy, c->twin); |
153 XUnmapWindow(dpy, c->twin); |
160 XSetWindowBorder(dpy, c->win, dc.fg); |
154 XSetWindowBorder(dpy, c->win, dc.fg[1]); |
161 return; |
155 return; |
162 } |
156 } |
163 |
157 |
164 XSetWindowBorder(dpy, c->win, dc.bg); |
158 XSetWindowBorder(dpy, c->win, dc.bg[0]); |
165 XMapWindow(dpy, c->twin); |
159 XMapWindow(dpy, c->twin); |
166 dc.x = dc.y = 0; |
160 dc.x = dc.y = 0; |
167 dc.w = c->tw; |
161 dc.w = c->tw; |
168 drawtext(c->name, !istile, False); |
162 drawtext(c->name, !istile, False); |
169 XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0); |
163 XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0); |