annotate draw.c @ 541:08d3d329270a

using MASTER 600 again, it is definately better, and using urxvtc for the moment (it doesn't flickers on refreshes, but this is not because of Marc Lehmann, it is because of the original rxvt code)
author arg@mig29
date Thu, 26 Oct 2006 12:13:41 +0200
parents 651f2c868b31
children f05cfa7d5128
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
532
651f2c868b31 code polishing, removed unnecessary newlines
Anselm R. Garbe <arg@10kloc.org>
parents: 530
diff changeset
1 /* (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com>
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
2 * See LICENSE file for license details.
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
3 */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
4 #include "dwm.h"
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
5 #include <stdio.h>
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
6 #include <string.h>
32
082c75b937b5 removed unnecessary crap
Anselm R. Garbe <garbeam@wmii.de>
parents: 30
diff changeset
7 #include <X11/Xlocale.h>
082c75b937b5 removed unnecessary crap
Anselm R. Garbe <garbeam@wmii.de>
parents: 30
diff changeset
8
84
052fe7498930 ordered variables in structs and source files alphabetically
Anselm R. Garbe <garbeam@wmii.de>
parents: 79
diff changeset
9 /* static */
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
10
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
11 static unsigned int
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 377
diff changeset
12 textnw(const char *text, unsigned int len) {
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
13 XRectangle r;
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 93
diff changeset
14
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
15 if(dc.font.set) {
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
16 XmbTextExtents(dc.font.set, text, len, NULL, &r);
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
17 return r.width;
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
18 }
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
19 return XTextWidth(dc.font.xfont, text, len);
75
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 74
diff changeset
20 }
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 74
diff changeset
21
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
22 static void
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 377
diff changeset
23 drawtext(const char *text, unsigned long col[ColLast], Bool highlight) {
344
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
24 int x, y, w, h;
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
25 static char buf[256];
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
26 unsigned int len, olen;
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
27 XGCValues gcv;
344
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
28 XRectangle r = { dc.x, dc.y, dc.w, dc.h };
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
29
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
30 XSetForeground(dpy, dc.gc, col[ColBG]);
344
93192711a36a changing tag indicator through underline
Anselm R. Garbe <arg@10kloc.org>
parents: 342
diff changeset
31 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
32 if(!text)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
33 return;
218
c674a0baac63 changed signature of drawtext
arg@10ksloc.org
parents: 208
diff changeset
34 w = 0;
269
bf6792e3e700 fixed string cutting in draw.c
Anselm R.Garbe <arg@10ksloc.org>
parents: 262
diff changeset
35 olen = len = strlen(text);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
36 if(len >= sizeof(buf))
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
37 len = sizeof(buf) - 1;
3
e969f3575b7a several new changes, made gridmenu working
Anselm R. Garbe <garbeam@wmii.de>
parents: 2
diff changeset
38 memcpy(buf, text, len);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
39 buf[len] = 0;
34
cd30cce52b78 added logo+description
Anselm R. Garbe <garbeam@wmii.de>
parents: 33
diff changeset
40 h = dc.font.ascent + dc.font.descent;
cd30cce52b78 added logo+description
Anselm R. Garbe <garbeam@wmii.de>
parents: 33
diff changeset
41 y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
cd30cce52b78 added logo+description
Anselm R. Garbe <garbeam@wmii.de>
parents: 33
diff changeset
42 x = dc.x + (h / 2);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
43 /* shorten text if necessary */
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
44 while(len && (w = textnw(buf, len)) > dc.w - h)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
45 buf[--len] = 0;
269
bf6792e3e700 fixed string cutting in draw.c
Anselm R.Garbe <arg@10ksloc.org>
parents: 262
diff changeset
46 if(len < olen) {
273
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
47 if(len > 1)
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
48 buf[len - 1] = '.';
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
49 if(len > 2)
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
50 buf[len - 2] = '.';
269
bf6792e3e700 fixed string cutting in draw.c
Anselm R.Garbe <arg@10ksloc.org>
parents: 262
diff changeset
51 if(len > 3)
273
ffc73b32084a fixed string cutting
Anselm R.Garbe <arg@10ksloc.org>
parents: 269
diff changeset
52 buf[len - 3] = '.';
269
bf6792e3e700 fixed string cutting in draw.c
Anselm R.Garbe <arg@10ksloc.org>
parents: 262
diff changeset
53 }
34
cd30cce52b78 added logo+description
Anselm R. Garbe <garbeam@wmii.de>
parents: 33
diff changeset
54 if(w > dc.w)
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
55 return; /* too long */
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
56 gcv.foreground = col[ColFG];
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
57 if(dc.font.set) {
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
58 XChangeGC(dpy, dc.gc, GCForeground, &gcv);
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
59 XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
60 }
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
61 else {
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
62 gcv.font = dc.font.xfont->fid;
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
63 XChangeGC(dpy, dc.gc, GCForeground | GCFont, &gcv);
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
64 XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
65 }
345
977585eb2d35 found less intrusive way
Anselm R. Garbe <arg@10kloc.org>
parents: 344
diff changeset
66 if(highlight) {
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
67 r.x = dc.x + 2;
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
68 r.y = dc.y + 2;
519
6cad48068e4c applied dave's highlight patch for big fonts
Anselm R. Garbe <arg@10kloc.org>
parents: 516
diff changeset
69 r.width = r.height = (h + 2) / 4;
352
5a8bdc3b37cb back to 3 colors
Anselm R. Garbe <arg@10kloc.org>
parents: 351
diff changeset
70 XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
71 }
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
72 }
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
73
84
052fe7498930 ordered variables in structs and source files alphabetically
Anselm R. Garbe <garbeam@wmii.de>
parents: 79
diff changeset
74 /* extern */
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
75
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
76 void
487
be4f90c03582 applied Jukkas patch
arg@mmvi
parents: 486
diff changeset
77 drawall(void) {
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
78 Client *c;
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
79
142
9b9deafa0508 committed a patch which fixes the hints of Jukka
arg@10ksloc.org
parents: 124
diff changeset
80 for(c = clients; c; c = getnext(c->next))
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
81 drawtitle(c);
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
82 drawstatus();
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
83 }
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
84
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
85 void
487
be4f90c03582 applied Jukkas patch
arg@mmvi
parents: 486
diff changeset
86 drawstatus(void) {
124
75576e44c1d8 made status bar drawing more robust, implemented togglemax and togglemode, works quite well
arg@10ksloc.org
parents: 123
diff changeset
87 int i, x;
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
88
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
89 dc.x = dc.y = 0;
178
e848966a1ac6 removed TLast tag enum, now tags is simple defined as char *[] array, the rest is calculated correctly, rules take an int array for the tags
arg@10ksloc.org
parents: 173
diff changeset
90 for(i = 0; i < ntags; i++) {
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
91 dc.w = textw(tags[i]);
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
92 if(seltag[i])
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
93 drawtext(tags[i], dc.sel, sel && sel->tags[i]);
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
94 else
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
95 drawtext(tags[i], dc.norm, sel && sel->tags[i]);
362
ba6c55e1b9b2 trying a different configuration
Anselm R. Garbe <arg@10kloc.org>
parents: 361
diff changeset
96 dc.x += dc.w;
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
97 }
362
ba6c55e1b9b2 trying a different configuration
Anselm R. Garbe <arg@10kloc.org>
parents: 361
diff changeset
98 dc.w = bmw;
530
451f19d48845 removed the stack position stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 519
diff changeset
99 drawtext(arrange == dofloat ? FLOATSYMBOL : TILESYMBOL, dc.status, False);
361
728e74820e1d removed small 1px gap, somehow without it things feel better
Anselm R. Garbe <arg@10kloc.org>
parents: 360
diff changeset
100 x = dc.x + dc.w;
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
101 dc.w = textw(stext);
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
102 dc.x = bx + bw - dc.w;
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
103 if(dc.x < x) {
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
104 dc.x = x;
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
105 dc.w = bw - x;
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
106 }
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
107 drawtext(stext, dc.status, False);
371
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
108 if((dc.w = dc.x - x) > bh) {
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
109 dc.x = x;
371
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
110 if(sel)
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
111 drawtext(sel->name, dc.sel, False);
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
112 else
fc9d35252ab4 applied sanders somepatches.patch
Anselm R. Garbe <arg@10kloc.org>
parents: 362
diff changeset
113 drawtext(NULL, dc.norm, False);
124
75576e44c1d8 made status bar drawing more robust, implemented togglemax and togglemode, works quite well
arg@10ksloc.org
parents: 123
diff changeset
114 }
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
115 XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0);
79
aabebd6e61f3 fixed XSync handling and finished man page
Anselm R. Garbe <garbeam@wmii.de>
parents: 77
diff changeset
116 XSync(dpy, False);
77
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
117 }
38c8f7f7d401 sanitized other stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 76
diff changeset
118
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
119 void
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 377
diff changeset
120 drawtitle(Client *c) {
239
e5390f8e06b9 applied sumik's multihead patch
Anselm R.Garbe <arg@10ksloc.org>
parents: 237
diff changeset
121 if(c == sel && issel) {
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
122 drawstatus();
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
123 XUnmapWindow(dpy, c->twin);
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
124 XSetWindowBorder(dpy, c->win, dc.sel[ColBG]);
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
125 return;
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
126 }
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
127 XSetWindowBorder(dpy, c->win, dc.norm[ColBG]);
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
128 XMapWindow(dpy, c->twin);
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
129 dc.x = dc.y = 0;
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
130 dc.w = c->tw;
353
8a06efe5b563 new color stuff/new rendering stuff
Anselm R. Garbe <arg@10kloc.org>
parents: 352
diff changeset
131 drawtext(c->name, dc.norm, False);
342
a1901753deef updated man page
Anselm R. Garbe <arg@10kloc.org>
parents: 340
diff changeset
132 XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0);
79
aabebd6e61f3 fixed XSync handling and finished man page
Anselm R. Garbe <garbeam@wmii.de>
parents: 77
diff changeset
133 XSync(dpy, False);
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
134 }
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
135
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
136 unsigned long
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 377
diff changeset
137 getcolor(const char *colstr) {
123
61490330e90a cleaned up code
arg@10ksloc.org
parents: 93
diff changeset
138 Colormap cmap = DefaultColormap(dpy, screen);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
139 XColor color;
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
140
495
3a812750f983 added slight error check to getcolor
arg@mmvi
parents: 487
diff changeset
141 if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
3a812750f983 added slight error check to getcolor
arg@mmvi
parents: 487
diff changeset
142 eprint("error, cannot allocate color '%s'\n", colstr);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
143 return color.pixel;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
144 }
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
145
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
146 void
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 377
diff changeset
147 setfont(const char *fontstr) {
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
148 char **missing, *def;
33
e90449e03167 new stuff (some warning elimination)
Anselm R. Garbe <garbeam@wmii.de>
parents: 32
diff changeset
149 int i, n;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
150
7
49e2fc9fb94f new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 5
diff changeset
151 missing = NULL;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
152 setlocale(LC_ALL, "");
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
153 if(dc.font.set)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
154 XFreeFontSet(dpy, dc.font.set);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
155 dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def);
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
156 if(missing) {
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
157 while(n--)
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
158 fprintf(stderr, "missing fontset: %s\n", missing[n]);
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
159 XFreeStringList(missing);
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
160 if(dc.font.set) {
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
161 XFreeFontSet(dpy, dc.font.set);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
162 dc.font.set = NULL;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
163 }
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
164 }
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
165 if(dc.font.set) {
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
166 XFontSetExtents *font_extents;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
167 XFontStruct **xfonts;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
168 char **font_names;
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
169 dc.font.ascent = dc.font.descent = 0;
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
170 font_extents = XExtentsOfFontSet(dc.font.set);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
171 n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
172 for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) {
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
173 if(dc.font.ascent < (*xfonts)->ascent)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
174 dc.font.ascent = (*xfonts)->ascent;
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
175 if(dc.font.descent < (*xfonts)->descent)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
176 dc.font.descent = (*xfonts)->descent;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
177 xfonts++;
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
178 }
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
179 }
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
180 else {
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
181 if(dc.font.xfont)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
182 XFreeFont(dpy, dc.font.xfont);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
183 dc.font.xfont = NULL;
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
184 dc.font.xfont = XLoadQueryFont(dpy, fontstr);
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
185 if (!dc.font.xfont)
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
186 dc.font.xfont = XLoadQueryFont(dpy, "fixed");
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
187 if (!dc.font.xfont)
75
f08271b7cb20 rearranged several stuff
Anselm R. Garbe <garbeam@wmii.de>
parents: 74
diff changeset
188 eprint("error, cannot init 'fixed' font\n");
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
189 dc.font.ascent = dc.font.xfont->ascent;
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
190 dc.font.descent = dc.font.xfont->descent;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
191 }
43
989178822938 changed default colors
Anselm R. Garbe <garbeam@wmii.de>
parents: 34
diff changeset
192 dc.font.height = dc.font.ascent + dc.font.descent;
2
a79188fe4a40 added new stuff
Anselm R. Garbe <garbeam@wmii.de>
parents:
diff changeset
193 }
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
194
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
195 unsigned int
461
9d23330a5268 removed a bunch of lines through making function signatures more consistent with my style ( { does not belong to a new line, if function args are single-lined)
Anselm R. Garbe <arg@10kloc.org>
parents: 377
diff changeset
196 textw(const char *text) {
76
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
197 return textnw(text, strlen(text)) + dc.font.height;
4bd49f404f10 proceeded with cleaning up, sorting functions, etc
Anselm R. Garbe <garbeam@wmii.de>
parents: 75
diff changeset
198 }