Mercurial > dwm-meillo
comparison draw.c @ 77:38c8f7f7d401
sanitized other stuff
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Sat, 15 Jul 2006 17:19:19 +0200 |
parents | 4bd49f404f10 |
children | aabebd6e61f3 |
comparison
equal
deleted
inserted
replaced
76:4bd49f404f10 | 77:38c8f7f7d401 |
---|---|
27 points[4].x = 0; | 27 points[4].x = 0; |
28 points[4].y = -(dc.h - 1); | 28 points[4].y = -(dc.h - 1); |
29 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); | 29 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); |
30 } | 30 } |
31 | 31 |
32 static unsigned int | |
33 textnw(char *text, unsigned int len) | |
34 { | |
35 XRectangle r; | |
36 if(dc.font.set) { | |
37 XmbTextExtents(dc.font.set, text, len, NULL, &r); | |
38 return r.width; | |
39 } | |
40 return XTextWidth(dc.font.xfont, text, len); | |
41 } | |
42 | |
43 static void | |
44 drawtext(const char *text, Bool invert, Bool border) | |
45 { | |
46 int x, y, w, h; | |
47 unsigned int len; | |
48 static char buf[256]; | |
49 XGCValues gcv; | |
50 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | |
51 | |
52 XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); | |
53 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | |
54 | |
55 w = 0; | |
56 if(border) | |
57 drawborder(); | |
58 | |
59 if(!text) | |
60 return; | |
61 | |
62 len = strlen(text); | |
63 if(len >= sizeof(buf)) | |
64 len = sizeof(buf) - 1; | |
65 memcpy(buf, text, len); | |
66 buf[len] = 0; | |
67 | |
68 h = dc.font.ascent + dc.font.descent; | |
69 y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent; | |
70 x = dc.x + (h / 2); | |
71 | |
72 /* shorten text if necessary */ | |
73 while(len && (w = textnw(buf, len)) > dc.w - h) | |
74 buf[--len] = 0; | |
75 | |
76 if(w > dc.w) | |
77 return; /* too long */ | |
78 | |
79 gcv.foreground = invert ? dc.bg : dc.fg; | |
80 gcv.background = invert ? dc.fg : dc.bg; | |
81 if(dc.font.set) { | |
82 XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); | |
83 XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc, | |
84 x, y, buf, len); | |
85 } | |
86 else { | |
87 gcv.font = dc.font.xfont->fid; | |
88 XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); | |
89 XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len); | |
90 } | |
91 } | |
92 | |
32 /* extern functions */ | 93 /* extern functions */ |
33 | 94 |
34 void | 95 void |
35 drawall() | 96 drawall() |
36 { | 97 { |
69 dc.x = bx + bw - dc.w; | 130 dc.x = bx + bw - dc.w; |
70 drawtext(stext, !istile, False); | 131 drawtext(stext, !istile, False); |
71 | 132 |
72 XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); | 133 XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); |
73 XFlush(dpy); | 134 XFlush(dpy); |
74 } | |
75 | |
76 void | |
77 drawtext(const char *text, Bool invert, Bool border) | |
78 { | |
79 int x, y, w, h; | |
80 unsigned int len; | |
81 static char buf[256]; | |
82 XGCValues gcv; | |
83 XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | |
84 | |
85 XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); | |
86 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | |
87 | |
88 w = 0; | |
89 if(border) | |
90 drawborder(); | |
91 | |
92 if(!text) | |
93 return; | |
94 | |
95 len = strlen(text); | |
96 if(len >= sizeof(buf)) | |
97 len = sizeof(buf) - 1; | |
98 memcpy(buf, text, len); | |
99 buf[len] = 0; | |
100 | |
101 h = dc.font.ascent + dc.font.descent; | |
102 y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent; | |
103 x = dc.x + (h / 2); | |
104 | |
105 /* shorten text if necessary */ | |
106 while(len && (w = textnw(buf, len)) > dc.w - h) | |
107 buf[--len] = 0; | |
108 | |
109 if(w > dc.w) | |
110 return; /* too long */ | |
111 | |
112 gcv.foreground = invert ? dc.bg : dc.fg; | |
113 gcv.background = invert ? dc.fg : dc.bg; | |
114 if(dc.font.set) { | |
115 XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); | |
116 XmbDrawImageString(dpy, dc.drawable, dc.font.set, dc.gc, | |
117 x, y, buf, len); | |
118 } | |
119 else { | |
120 gcv.font = dc.font.xfont->fid; | |
121 XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); | |
122 XDrawImageString(dpy, dc.drawable, dc.gc, x, y, buf, len); | |
123 } | |
124 } | 135 } |
125 | 136 |
126 void | 137 void |
127 drawtitle(Client *c) | 138 drawtitle(Client *c) |
128 { | 139 { |
217 } | 228 } |
218 dc.font.height = dc.font.ascent + dc.font.descent; | 229 dc.font.height = dc.font.ascent + dc.font.descent; |
219 } | 230 } |
220 | 231 |
221 unsigned int | 232 unsigned int |
222 textnw(char *text, unsigned int len) | |
223 { | |
224 XRectangle r; | |
225 if(dc.font.set) { | |
226 XmbTextExtents(dc.font.set, text, len, NULL, &r); | |
227 return r.width; | |
228 } | |
229 return XTextWidth(dc.font.xfont, text, len); | |
230 } | |
231 | |
232 unsigned int | |
233 textw(char *text) | 233 textw(char *text) |
234 { | 234 { |
235 return textnw(text, strlen(text)) + dc.font.height; | 235 return textnw(text, strlen(text)) + dc.font.height; |
236 } | 236 } |