diff options
author | Christoph Lohmann <20h@r-36.net> | 2012-09-30 20:10:58 +0200 |
---|---|---|
committer | Christoph Lohmann <20h@r-36.net> | 2012-09-30 20:10:58 +0200 |
commit | 4497d2125c74aef132d0a70128285d6726dce194 (patch) | |
tree | 101de87791d9b28f3ab37fcb0a756bf4305441c1 | |
parent | e49660213594faa5a79d71087bcf4ac80be22c47 (diff) | |
download | st-patched-4497d2125c74aef132d0a70128285d6726dce194.tar.bz2 st-patched-4497d2125c74aef132d0a70128285d6726dce194.tar.xz st-patched-4497d2125c74aef132d0a70128285d6726dce194.zip |
Remove the cruft of the user to have to define the different font styles.
-rw-r--r-- | st.c | 60 |
1 files changed, 55 insertions, 5 deletions
@@ -336,6 +336,7 @@ static int isfullutf8(char *, int); | |||
336 | static void *xmalloc(size_t); | 336 | static void *xmalloc(size_t); |
337 | static void *xrealloc(void *, size_t); | 337 | static void *xrealloc(void *, size_t); |
338 | static void *xcalloc(size_t nmemb, size_t size); | 338 | static void *xcalloc(size_t nmemb, size_t size); |
339 | static char *smstrcat(char *, ...); | ||
339 | 340 | ||
340 | static void (*handler[LASTEvent])(XEvent *) = { | 341 | static void (*handler[LASTEvent])(XEvent *) = { |
341 | [KeyPress] = kpress, | 342 | [KeyPress] = kpress, |
@@ -393,6 +394,44 @@ xcalloc(size_t nmemb, size_t size) { | |||
393 | return p; | 394 | return p; |
394 | } | 395 | } |
395 | 396 | ||
397 | char * | ||
398 | smstrcat(char *src, ...) | ||
399 | { | ||
400 | va_list fmtargs; | ||
401 | char *ret, *p, *v; | ||
402 | int len, slen, flen; | ||
403 | |||
404 | len = slen = strlen(src); | ||
405 | |||
406 | va_start(fmtargs, src); | ||
407 | for(;;) { | ||
408 | v = va_arg(fmtargs, char *); | ||
409 | if(v == NULL) | ||
410 | break; | ||
411 | len += strlen(v); | ||
412 | } | ||
413 | va_end(fmtargs); | ||
414 | |||
415 | p = ret = xmalloc(len+1); | ||
416 | memmove(p, src, slen); | ||
417 | p += slen; | ||
418 | |||
419 | va_start(fmtargs, src); | ||
420 | for(;;) { | ||
421 | v = va_arg(fmtargs, char *); | ||
422 | if(v == NULL) | ||
423 | break; | ||
424 | flen = strlen(v); | ||
425 | memmove(p, v, flen); | ||
426 | p += flen; | ||
427 | } | ||
428 | va_end(fmtargs); | ||
429 | |||
430 | ret[len] = '\0'; | ||
431 | |||
432 | return ret; | ||
433 | } | ||
434 | |||
396 | int | 435 | int |
397 | utf8decode(char *s, long *u) { | 436 | utf8decode(char *s, long *u) { |
398 | uchar c; | 437 | uchar c; |
@@ -2017,11 +2056,22 @@ xinitfont(Font *f, char *fontstr) { | |||
2017 | } | 2056 | } |
2018 | 2057 | ||
2019 | void | 2058 | void |
2020 | initfonts(char *fontstr, char *bfontstr, char *ifontstr, char *ibfontstr) { | 2059 | initfonts(char *fontstr) { |
2060 | char *fstr; | ||
2061 | |||
2021 | xinitfont(&dc.font, fontstr); | 2062 | xinitfont(&dc.font, fontstr); |
2022 | xinitfont(&dc.bfont, bfontstr); | 2063 | |
2023 | xinitfont(&dc.ifont, ifontstr); | 2064 | fstr = smstrcat(fontstr, ":weight=bold", NULL); |
2024 | xinitfont(&dc.ibfont, ibfontstr); | 2065 | xinitfont(&dc.bfont, fstr); |
2066 | free(fstr); | ||
2067 | |||
2068 | fstr = smstrcat(fontstr, ":slant=italic,oblique", NULL); | ||
2069 | xinitfont(&dc.ifont, fstr); | ||
2070 | free(fstr); | ||
2071 | |||
2072 | fstr = smstrcat(fontstr, ":weight=bold:slant=italic,oblique", NULL); | ||
2073 | xinitfont(&dc.ibfont, fstr); | ||
2074 | free(fstr); | ||
2025 | } | 2075 | } |
2026 | 2076 | ||
2027 | void | 2077 | void |
@@ -2037,7 +2087,7 @@ xinit(void) { | |||
2037 | xw.vis = XDefaultVisual(xw.dpy, xw.scr); | 2087 | xw.vis = XDefaultVisual(xw.dpy, xw.scr); |
2038 | 2088 | ||
2039 | /* font */ | 2089 | /* font */ |
2040 | initfonts(FONT, BOLDFONT, ITALICFONT, ITALICBOLDFONT); | 2090 | initfonts(FONT); |
2041 | 2091 | ||
2042 | /* XXX: Assuming same size for bold font */ | 2092 | /* XXX: Assuming same size for bold font */ |
2043 | xw.cw = dc.font.rbearing - dc.font.lbearing; | 2093 | xw.cw = dc.font.rbearing - dc.font.lbearing; |