Mercurial > dwm-meillo
comparison draw.c @ 352:5a8bdc3b37cb
back to 3 colors
author | Anselm R. Garbe <arg@10kloc.org> |
---|---|
date | Fri, 25 Aug 2006 07:54:49 +0200 |
parents | d822b5fbe11e |
children | 8a06efe5b563 |
comparison
equal
deleted
inserted
replaced
351:d822b5fbe11e | 352:5a8bdc3b37cb |
---|---|
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, unsigned int colidx, Bool highlight) | 25 drawtext(const char *text, Bool invert, 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; | |
30 XPoint points[5]; | 31 XPoint points[5]; |
31 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | 32 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; |
32 | 33 |
33 XSetForeground(dpy, dc.gc, dc.bg[colidx]); | 34 XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); |
34 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | 35 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); |
35 points[0].x = dc.x; | 36 points[0].x = dc.x; |
36 points[0].y = dc.y; | 37 points[0].y = dc.y; |
37 points[1].x = dc.w - 1; | 38 points[1].x = dc.w - 1; |
38 points[1].y = 0; | 39 points[1].y = 0; |
40 points[2].y = dc.h - 1; | 41 points[2].y = dc.h - 1; |
41 points[3].x = -(dc.w - 1); | 42 points[3].x = -(dc.w - 1); |
42 points[3].y = 0; | 43 points[3].y = 0; |
43 points[4].x = 0; | 44 points[4].x = 0; |
44 points[4].y = -(dc.h - 1); | 45 points[4].y = -(dc.h - 1); |
45 XSetForeground(dpy, dc.gc, dc.fg[colidx]); | 46 XSetForeground(dpy, dc.gc, dc.border); |
46 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); | 47 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); |
47 | 48 |
48 if(!text) | 49 if(!text) |
49 return; | 50 return; |
50 | 51 |
71 buf[len - 3] = '.'; | 72 buf[len - 3] = '.'; |
72 } | 73 } |
73 | 74 |
74 if(w > dc.w) | 75 if(w > dc.w) |
75 return; /* too long */ | 76 return; /* too long */ |
76 if(dc.font.set) | 77 gcv.foreground = invert ? dc.bg : dc.fg; |
78 gcv.background = invert ? dc.fg : dc.bg; | |
79 if(dc.font.set) { | |
80 XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); | |
77 XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); | 81 XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); |
82 } | |
78 else { | 83 else { |
79 XSetFont(dpy, dc.gc, dc.font.xfont->fid); | 84 gcv.font = dc.font.xfont->fid; |
85 XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); | |
80 XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); | 86 XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); |
81 } | 87 } |
82 if(highlight) { | 88 if(highlight) { |
83 points[0].x = dc.x + 1; | 89 r.x = dc.x + 2; |
84 points[0].y = dc.y + 1; | 90 r.y = dc.y + 2; |
85 points[1].x = dc.w - 3; | 91 r.width = r.height = 3; |
86 points[1].y = 0; | 92 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); |
87 points[2].x = 0; | |
88 points[2].y = dc.h - 3; | |
89 points[3].x = -(dc.w - 3); | |
90 points[3].y = 0; | |
91 points[4].x = 0; | |
92 points[4].y = -(dc.h - 3); | |
93 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); | |
94 } | 93 } |
95 } | 94 } |
96 | 95 |
97 /* extern */ | 96 /* extern */ |
98 | 97 |
112 int i, x; | 111 int i, x; |
113 Bool istile = arrange == dotile; | 112 Bool istile = arrange == dotile; |
114 | 113 |
115 dc.x = dc.y = 0; | 114 dc.x = dc.y = 0; |
116 dc.w = bw; | 115 dc.w = bw; |
117 drawtext(NULL, istile ? 1 : 0, False); | 116 drawtext(NULL, !istile, False); |
118 | 117 |
119 dc.w = 0; | 118 dc.w = 0; |
120 for(i = 0; i < ntags; i++) { | 119 for(i = 0; i < ntags; i++) { |
121 dc.x += dc.w; | 120 dc.x += dc.w; |
122 dc.w = textw(tags[i]); | 121 dc.w = textw(tags[i]); |
123 if(istile) | 122 if(istile) |
124 drawtext(tags[i], seltag[i] ? 0 : 1, sel && sel->tags[i]); | 123 drawtext(tags[i], seltag[i], sel && sel->tags[i]); |
125 else | 124 else |
126 drawtext(tags[i], seltag[i] ? 1 : 0, sel && sel->tags[i]); | 125 drawtext(tags[i], !seltag[i], sel && sel->tags[i]); |
127 } | 126 } |
128 x = dc.x + dc.w; | 127 x = dc.x + dc.w; |
129 dc.w = textw(stext); | 128 dc.w = textw(stext); |
130 dc.x = bx + bw - dc.w; | 129 dc.x = bx + bw - dc.w; |
131 if(dc.x < x) { | 130 if(dc.x < x) { |
132 dc.x = x; | 131 dc.x = x; |
133 dc.w = bw - x; | 132 dc.w = bw - x; |
134 } | 133 } |
135 drawtext(stext, istile ? 1 : 0, False); | 134 drawtext(stext, !istile, False); |
136 | 135 |
137 if(sel && ((dc.w = dc.x - x) > bh)) { | 136 if(sel && ((dc.w = dc.x - x) > bh)) { |
138 dc.x = x; | 137 dc.x = x; |
139 drawtext(sel->name, istile ? 0 : 1, False); | 138 drawtext(sel->name, istile, False); |
140 } | 139 } |
141 XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); | 140 XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); |
142 XSync(dpy, False); | 141 XSync(dpy, False); |
143 } | 142 } |
144 | 143 |
149 Bool istile = arrange == dotile; | 148 Bool istile = arrange == dotile; |
150 | 149 |
151 if(c == sel && issel) { | 150 if(c == sel && issel) { |
152 drawstatus(); | 151 drawstatus(); |
153 XUnmapWindow(dpy, c->twin); | 152 XUnmapWindow(dpy, c->twin); |
154 XSetWindowBorder(dpy, c->win, dc.fg[1]); | 153 XSetWindowBorder(dpy, c->win, dc.fg); |
155 return; | 154 return; |
156 } | 155 } |
157 | 156 |
158 XSetWindowBorder(dpy, c->win, dc.bg[0]); | 157 XSetWindowBorder(dpy, c->win, dc.bg); |
159 XMapWindow(dpy, c->twin); | 158 XMapWindow(dpy, c->twin); |
160 dc.x = dc.y = 0; | 159 dc.x = dc.y = 0; |
161 dc.w = c->tw; | 160 dc.w = c->tw; |
162 drawtext(c->name, istile ? 1 : 0, False); | 161 drawtext(c->name, !istile, False); |
163 XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0); | 162 XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0); |
164 XSync(dpy, False); | 163 XSync(dpy, False); |
165 } | 164 } |
166 | 165 |
167 unsigned long | 166 unsigned long |