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 }