Mercurial > aewl
comparison draw.c @ 350:b10852dbbffe
3->4 colors
author | Anselm R. Garbe <arg@10kloc.org> |
---|---|
date | Thu, 24 Aug 2006 12:04:56 +0200 |
parents | 977585eb2d35 |
children | d822b5fbe11e |
comparison
equal
deleted
inserted
replaced
349:2bc2746a52c3 | 350:b10852dbbffe |
---|---|
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); |