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 drawborder() |
25 drawtext(const char *text, Bool invert, Bool underline) |
26 { |
26 { |
|
27 int x, y, w, h; |
|
28 static char buf[256]; |
|
29 unsigned int len, olen; |
|
30 XGCValues gcv; |
27 XPoint points[5]; |
31 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); |
28 points[0].x = dc.x; |
36 points[0].x = dc.x; |
29 points[0].y = dc.y; |
37 points[0].y = dc.y; |
30 points[1].x = dc.w - 1; |
38 points[1].x = dc.w - 1; |
31 points[1].y = 0; |
39 points[1].y = 0; |
32 points[2].x = 0; |
40 points[2].x = 0; |
33 points[2].y = dc.h - 1; |
41 points[2].y = dc.h - 1; |
34 points[3].x = -(dc.w - 1); |
42 points[3].x = -(dc.w - 1); |
35 points[3].y = 0; |
43 points[3].y = 0; |
36 points[4].x = 0; |
44 points[4].x = 0; |
37 points[4].y = -(dc.h - 1); |
45 points[4].y = -(dc.h - 1); |
|
46 XSetForeground(dpy, dc.gc, dc.border); |
38 XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); |
47 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(); |
|
56 |
48 |
57 if(!text) |
49 if(!text) |
58 return; |
50 return; |
59 |
51 |
60 w = 0; |
52 w = 0; |
91 else { |
83 else { |
92 gcv.font = dc.font.xfont->fid; |
84 gcv.font = dc.font.xfont->fid; |
93 XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); |
85 XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &gcv); |
94 XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); |
86 XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); |
95 } |
87 } |
96 if(highlight) { |
88 if(underline) { |
97 tmp = dc; |
89 points[0].x = dc.x + (h / 2) - 1; |
98 dc.x += 2; |
90 points[0].y = dc.y + dc.h - 3; |
99 dc.y += 2; |
91 points[1].x = dc.w - h + 2; |
100 dc.w -= 4; |
92 points[1].y = 0; |
101 dc.h -= 4; |
93 XDrawLines(dpy, dc.drawable, dc.gc, points, 2, CoordModePrevious); |
102 drawborder(); |
|
103 dc = tmp; |
|
104 } |
94 } |
105 } |
95 } |
106 |
96 |
107 /* extern */ |
97 /* extern */ |
108 |
98 |