Mercurial > dwm-meillo
comparison draw.c @ 342:a1901753deef
updated man page
author | Anselm R. Garbe <arg@10kloc.org> |
---|---|
date | Wed, 23 Aug 2006 18:50:46 +0200 |
parents | ae0affabdc02 |
children | 93192711a36a |
comparison
equal
deleted
inserted
replaced
341:e4dad4635250 | 342:a1901753deef |
---|---|
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) | 25 drawborder() |
26 { | 26 { |
27 int x, y, w, h; | |
28 static char buf[256]; | |
29 unsigned int len, olen; | |
30 XGCValues gcv; | |
31 XPoint points[5]; | 27 XPoint points[5]; |
32 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | |
33 | |
34 XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); | |
35 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | |
36 XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); | |
37 XSetForeground(dpy, dc.gc, dc.border); | |
38 points[0].x = dc.x; | 28 points[0].x = dc.x; |
39 points[0].y = dc.y; | 29 points[0].y = dc.y; |
40 points[1].x = dc.w - 1; | 30 points[1].x = dc.w - 1; |
41 points[1].y = 0; | 31 points[1].y = 0; |
42 points[2].x = 0; | 32 points[2].x = 0; |
44 points[3].x = -(dc.w - 1); | 34 points[3].x = -(dc.w - 1); |
45 points[3].y = 0; | 35 points[3].y = 0; |
46 points[4].x = 0; | 36 points[4].x = 0; |
47 points[4].y = -(dc.h - 1); | 37 points[4].y = -(dc.h - 1); |
48 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); | 38 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); |
39 } | |
40 | |
41 static void | |
42 drawtext(const char *text, Bool invert, Bool highlight) | |
43 { | |
44 int x, y, w, h; | |
45 static char buf[256]; | |
46 unsigned int len, olen; | |
47 DC tmp; | |
48 XGCValues gcv; | |
49 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | |
50 | |
51 XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); | |
52 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | |
53 XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); | |
54 XSetForeground(dpy, dc.gc, dc.border); | |
55 drawborder(); | |
49 | 56 |
50 if(!text) | 57 if(!text) |
51 return; | 58 return; |
52 | 59 |
53 w = 0; | 60 w = 0; |
73 buf[len - 3] = '.'; | 80 buf[len - 3] = '.'; |
74 } | 81 } |
75 | 82 |
76 if(w > dc.w) | 83 if(w > dc.w) |
77 return; /* too long */ | 84 return; /* too long */ |
78 | |
79 gcv.foreground = invert ? dc.bg : dc.fg; | 85 gcv.foreground = invert ? dc.bg : dc.fg; |
80 gcv.background = invert ? dc.fg : dc.bg; | 86 gcv.background = invert ? dc.fg : dc.bg; |
81 if(dc.font.set) { | 87 if(dc.font.set) { |
82 XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); | 88 XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); |
83 XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc, | 89 XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); |
84 x, y, buf, len); | |
85 } | 90 } |
86 else { | 91 else { |
87 gcv.font = dc.font.xfont->fid; | 92 gcv.font = dc.font.xfont->fid; |
88 XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); | 93 XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); |
89 XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len); | 94 XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); |
95 } | |
96 if(highlight) { | |
97 tmp = dc; | |
98 dc.x += 2; | |
99 dc.y += 2; | |
100 dc.w -= 4; | |
101 dc.h -= 4; | |
102 drawborder(); | |
103 dc = tmp; | |
90 } | 104 } |
91 } | 105 } |
92 | 106 |
93 /* extern */ | 107 /* extern */ |
94 | 108 |
108 int i, x; | 122 int i, x; |
109 Bool istile = arrange == dotile; | 123 Bool istile = arrange == dotile; |
110 | 124 |
111 dc.x = dc.y = 0; | 125 dc.x = dc.y = 0; |
112 dc.w = bw; | 126 dc.w = bw; |
113 drawtext(NULL, !istile); | 127 drawtext(NULL, !istile, False); |
114 | 128 |
115 dc.w = 0; | 129 dc.w = 0; |
116 for(i = 0; i < ntags; i++) { | 130 for(i = 0; i < ntags; i++) { |
117 dc.x += dc.w; | 131 dc.x += dc.w; |
118 dc.w = textw(tags[i]); | 132 dc.w = textw(tags[i]); |
119 if(istile) | 133 if(istile) |
120 drawtext(tags[i], seltag[i]); | 134 drawtext(tags[i], seltag[i], sel && sel->tags[i]); |
121 else | 135 else |
122 drawtext(tags[i], !seltag[i]); | 136 drawtext(tags[i], !seltag[i], sel && sel->tags[i]); |
123 } | 137 } |
124 x = dc.x + dc.w; | 138 x = dc.x + dc.w; |
125 dc.w = textw(stext); | 139 dc.w = textw(stext); |
126 dc.x = bx + bw - dc.w; | 140 dc.x = bx + bw - dc.w; |
127 drawtext(stext, !istile); | 141 if(dc.x < x) { |
128 | 142 dc.x = x; |
129 if(sel) { | 143 dc.w = bw - x; |
130 for(i = 0; i < ntags; i++) | 144 } |
131 if(sel->tags[i]) { | 145 drawtext(stext, !istile, False); |
132 dc.w = textw(tags[i]); | 146 |
133 dc.x -= dc.w; | 147 if(sel && ((dc.w = dc.x - x) > bh)) { |
134 if(dc.x < x) | 148 dc.x = x; |
135 break; | 149 drawtext(sel->name, istile, False); |
136 drawtext(tags[i], istile); | |
137 } | |
138 if(dc.x > x && (dc.x - x) > bh) { | |
139 dc.w = dc.x - x; | |
140 dc.x = x; | |
141 drawtext(sel->name, istile); | |
142 } | |
143 } | 150 } |
144 XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); | 151 XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); |
145 XSync(dpy, False); | 152 XSync(dpy, False); |
146 } | 153 } |
147 | 154 |
151 int i; | 158 int i; |
152 Bool istile = arrange == dotile; | 159 Bool istile = arrange == dotile; |
153 | 160 |
154 if(c == sel && issel) { | 161 if(c == sel && issel) { |
155 drawstatus(); | 162 drawstatus(); |
156 XUnmapWindow(dpy, c->title); | 163 XUnmapWindow(dpy, c->twin); |
157 XSetWindowBorder(dpy, c->win, dc.fg); | 164 XSetWindowBorder(dpy, c->win, dc.fg); |
158 return; | 165 return; |
159 } | 166 } |
160 | 167 |
161 XSetWindowBorder(dpy, c->win, dc.bg); | 168 XSetWindowBorder(dpy, c->win, dc.bg); |
162 XMapWindow(dpy, c->title); | 169 XMapWindow(dpy, c->twin); |
163 | 170 dc.x = dc.y = 0; |
164 dc.y = dc.w = 0; | 171 dc.w = c->tw; |
165 dc.x = c->tw; | 172 drawtext(c->name, !istile, False); |
166 for(i = 0; i < ntags; i++) | 173 XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0); |
167 if(c->tags[i]) { | |
168 dc.w = textw(tags[i]); | |
169 dc.x -= dc.w; | |
170 drawtext(tags[i], !istile); | |
171 } | |
172 dc.w = dc.x; | |
173 dc.x = 0; | |
174 drawtext(c->name, !istile); | |
175 XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0); | |
176 XSync(dpy, False); | 174 XSync(dpy, False); |
177 } | 175 } |
178 | 176 |
179 unsigned long | 177 unsigned long |
180 getcolor(const char *colstr) | 178 getcolor(const char *colstr) |