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