it* My version of sent Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/sent-sdk.git URL:git://git.codevoid.de/sent-sdk.git codevoid.de 70 1Log /git/sent-sdk/log.gph codevoid.de 70 1Files /git/sent-sdk/files.gph codevoid.de 70 1Refs /git/sent-sdk/refs.gph codevoid.de 70 1README /git/sent-sdk/file/README.md.gph codevoid.de 70 1LICENSE /git/sent-sdk/file/LICENSE.gph codevoid.de 70 i--- Err codevoid.de 70 1commit 85d25716b07498fd9786045f77478abc253fd036 /git/sent-sdk/commit/85d25716b07498fd9786045f77478abc253fd036.gph codevoid.de 70 1parent 76d3b0bb95e3e52f9763f8f5c371c1fbeb9a2971 /git/sent-sdk/commit/76d3b0bb95e3e52f9763f8f5c371c1fbeb9a2971.gph codevoid.de 70 hAuthor: Markus Teich URL:mailto:markus.teich@stusta.mhn.de codevoid.de 70 iDate: Mon, 20 Apr 2015 22:20:16 +0200 Err codevoid.de 70 i Err codevoid.de 70 iuse new font system from drw Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M config.def.h | 8 ++++++-- Err codevoid.de 70 i M sent.c | 66 ++++++++++++++++--------------- Err codevoid.de 70 i Err codevoid.de 70 i2 files changed, 40 insertions(+), 34 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/config.def.h b/config.def.h /git/sent-sdk/file/config.def.h.gph codevoid.de 70 it@@ -2,8 +2,12 @@ Err codevoid.de 70 i Err codevoid.de 70 i /* The three fields set to 0 have to stay that way for a scalable font */ Err codevoid.de 70 i static char *font = "-*-dejavu sans condensed-bold-r-*-*-0-0-*-*-*-0-*-*"; Err codevoid.de 70 i-#define NUMFONTS 30 Err codevoid.de 70 i-#define FONTSZ(x) ((int)(100.0 * powf(1.1288, (x)))) /* x in [0, NUMFONTS-1] */ Err codevoid.de 70 i+static char *fontfallbacks[] = { Err codevoid.de 70 i+ "dejavu", Err codevoid.de 70 i+ "trollolo", Err codevoid.de 70 i+}; Err codevoid.de 70 i+#define NUMFONTSCALES 30 Err codevoid.de 70 i+#define FONTSZ(x) ((int)(10.0 * powf(1.1288, (x)))) /* x in [0, NUMFONTSCALES-1] */ Err codevoid.de 70 i Err codevoid.de 70 i /* how much screen estate is to be used at max for the content */ Err codevoid.de 70 i static float usablewidth = 0.75; Err codevoid.de 70 1diff --git a/sent.c b/sent.c /git/sent-sdk/file/sent.c.gph codevoid.de 70 it@@ -93,7 +93,7 @@ static void pngdraw(struct image *img); Err codevoid.de 70 i Err codevoid.de 70 i static Bool xfontisscalable(char *name); Err codevoid.de 70 i static XFontStruct *xloadqueryscalablefont(char *name, int size); Err codevoid.de 70 i-static struct DC *getfontsize(char *str, size_t len, int *width, int *height); Err codevoid.de 70 i+static void getfontsize(char *str, int *width, int *height); Err codevoid.de 70 i static void cleanup(struct DC *cur); Err codevoid.de 70 i static void eprintf(const char *, ...); Err codevoid.de 70 i static void die(const char *, ...); Err codevoid.de 70 it@@ -125,7 +125,7 @@ static XWindow xw; Err codevoid.de 70 i static struct DC dc; Err codevoid.de 70 i static Drw *d = NULL; Err codevoid.de 70 i static Scm *sc; Err codevoid.de 70 i-static Fnt *fonts[NUMFONTS]; Err codevoid.de 70 i+static Fnt *fonts[NUMFONTSCALES]; Err codevoid.de 70 i static int running = 1; Err codevoid.de 70 i Err codevoid.de 70 i static void (*handler[LASTEvent])(XEvent *) = { Err codevoid.de 70 it@@ -381,24 +381,17 @@ XFontStruct *xloadqueryscalablefont(char *name, int size) Err codevoid.de 70 i return (field != 14) ? NULL : XLoadQueryFont(xw.dpy, newname); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i-struct DC *getfontsize(char *str, size_t len, int *width, int *height) Err codevoid.de 70 i+void getfontsize(char *str, int *width, int *height) Err codevoid.de 70 i { Err codevoid.de 70 i- XCharStruct info; Err codevoid.de 70 i- int unused; Err codevoid.de 70 i- struct DC *pre = &dc; Err codevoid.de 70 i- struct DC *cur = &dc; Err codevoid.de 70 i+ size_t i; Err codevoid.de 70 i Err codevoid.de 70 i- do { Err codevoid.de 70 i- XTextExtents(cur->font, str, len, &unused, &unused, &unused, &info); Err codevoid.de 70 i- if (info.width > xw.uw || info.ascent + info.descent > xw.uh) Err codevoid.de 70 i+ for (i = 0; i < NUMFONTSCALES; i++) { Err codevoid.de 70 i+ drw_setfontset(d, fonts[i]); Err codevoid.de 70 i+ if ((*width = drw_fontset_getwidth(d, str)) > xw.uw || (*height = d->fonts->h) > xw.uh) Err codevoid.de 70 i break; Err codevoid.de 70 i- pre = cur; Err codevoid.de 70 i- } while ((cur = cur->next)); Err codevoid.de 70 i- Err codevoid.de 70 i- XTextExtents(pre->font, "o", 1, &unused, &unused, &unused, &info); Err codevoid.de 70 i- *height = info.ascent; Err codevoid.de 70 i- *width = XTextWidth(pre->font, str, len); Err codevoid.de 70 i- return pre; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ if (i > 0) Err codevoid.de 70 i+ drw_setfontset(d, fonts[i-1]); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void cleanup(struct DC *cur) Err codevoid.de 70 it@@ -545,18 +538,15 @@ void usage() Err codevoid.de 70 i Err codevoid.de 70 i void xdraw() Err codevoid.de 70 i { Err codevoid.de 70 i- int line_len = strlen(slides[idx].text); Err codevoid.de 70 i-// int height; Err codevoid.de 70 i-// int width; Err codevoid.de 70 i-// struct DC *dc = getfontsize(slides[idx].text, line_len, &width, &height); Err codevoid.de 70 i+ int height; Err codevoid.de 70 i+ int width; Err codevoid.de 70 i struct image *im = slides[idx].img; Err codevoid.de 70 i Err codevoid.de 70 i+ getfontsize(slides[idx].text, &width, &height); Err codevoid.de 70 i XClearWindow(xw.dpy, xw.win); Err codevoid.de 70 i Err codevoid.de 70 i if (!im) { Err codevoid.de 70 i-// XDrawString(xw.dpy, xw.win, dc->gc, (xw.w - width)/2, (xw.h + height)/2, Err codevoid.de 70 i-// slides[idx].text, line_len); Err codevoid.de 70 i- drw_text(d, xw.w/2, xw.h/2, 1000, 200, slides[idx].text, 0); Err codevoid.de 70 i+ drw_text(d, (xw.w - width) / 2, (xw.h - height) / 2, width, height, slides[idx].text, 0); Err codevoid.de 70 i drw_map(d, xw.win, 0, 0, xw.w, xw.h); Err codevoid.de 70 i } else if (!(im->state & LOADED) && !pngread(im)) Err codevoid.de 70 i eprintf("could not read image %s", slides[idx].text + 1); Err codevoid.de 70 it@@ -626,29 +616,41 @@ void xinit() Err codevoid.de 70 i void xloadfonts(char *fontstr) Err codevoid.de 70 i { Err codevoid.de 70 i int count = 0; Err codevoid.de 70 i- int i = 0; Err codevoid.de 70 i+ int i, j; Err codevoid.de 70 i XFontStruct *fnt; Err codevoid.de 70 i XGCValues gcvalues; Err codevoid.de 70 i struct DC *cur = &dc; Err codevoid.de 70 i-// char **fstr = XListFonts(xw.dpy, fontstr, 42, &count); Err codevoid.de 70 i- char *fstrs; Err codevoid.de 70 i- const char **fonts; Err codevoid.de 70 i+ char *fstrs[LEN(fontfallbacks)]; Err codevoid.de 70 i+ Err codevoid.de 70 i+ for (j = 0; j < LEN(fontfallbacks); j++) { Err codevoid.de 70 i+ if (!(fstrs[j] = malloc(MAXFONTSTRLEN))) Err codevoid.de 70 i+ die("could not malloc fstrs"); Err codevoid.de 70 i+ } Err codevoid.de 70 i Err codevoid.de 70 i- if (!(fstrs = malloc(NUMFONTS * MAXFONTSTRLEN))) Err codevoid.de 70 i+ for (i = 0; i < NUMFONTSCALES; i++) { Err codevoid.de 70 i+ for (j = 0; j < LEN(fontfallbacks); j++) { Err codevoid.de 70 i+ if (MAXFONTSTRLEN < snprintf(fstrs[j], MAXFONTSTRLEN, "%s:size=%d", fontfallbacks[j], FONTSZ(i))) Err codevoid.de 70 i+ die("font string too long"); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ fonts[i] = drw_fontset_create(d, (const char**)fstrs, LEN(fstrs)); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ drw_setfontset(d, fonts[19]); Err codevoid.de 70 i+ Err codevoid.de 70 i+/* if (!(fstrs = malloc(NUMFONTS * MAXFONTSTRLEN))) Err codevoid.de 70 i die("could not malloc fontstrings"); Err codevoid.de 70 i if (!(fonts = malloc(NUMFONTS * sizeof(char*)))) { Err codevoid.de 70 i free(fstrs); Err codevoid.de 70 i die("could not malloc fontarray"); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i-/* const char *fonts[] = { Err codevoid.de 70 i+ const char *fonts[] = { Err codevoid.de 70 i "Sans:size=80:size=10.5", Err codevoid.de 70 i "VL Gothic:size=10.5", Err codevoid.de 70 i "WenQuanYi Micro Hei:size=10.5", Err codevoid.de 70 i }; */ Err codevoid.de 70 i // drw_load_fonts(d, fonts, LEN(fonts)); Err codevoid.de 70 i Err codevoid.de 70 i- for (i = 0; i < NUMFONTS; i++) { Err codevoid.de 70 i+/* for (i = 0; i < NUMFONTS; i++) { Err codevoid.de 70 i snprintf(&fstrs[i*MAXFONTSTRLEN], MAXFONTSTRLEN, "%s:size=%d", fontstr, FONTSZ(i)); Err codevoid.de 70 i puts(&fstrs[i*MAXFONTSTRLEN]); Err codevoid.de 70 i fonts[i] = &fstrs[i*MAXFONTSTRLEN]; Err codevoid.de 70 it@@ -658,7 +660,7 @@ void xloadfonts(char *fontstr) Err codevoid.de 70 i Err codevoid.de 70 i free(fstrs); Err codevoid.de 70 i free(fonts); Err codevoid.de 70 i- Err codevoid.de 70 i+*/ Err codevoid.de 70 i // while (count-- && !xfontisscalable(fstr[count])) Err codevoid.de 70 i // ; /* nothing, just get first scalable font result */ Err codevoid.de 70 i // Err codevoid.de 70 .