Introduction
Introduction Statistics Contact Development Disclaimer Help
use new font system from drw - sent - simple plaintext presentation tool
git clone git://git.suckless.org/sent
Log
Files
Refs
README
LICENSE
---
commit 85d25716b07498fd9786045f77478abc253fd036
parent 76d3b0bb95e3e52f9763f8f5c371c1fbeb9a2971
Author: Markus Teich <[email protected]>
Date: Mon, 20 Apr 2015 22:20:16 +0200
use new font system from drw
Diffstat:
M config.def.h | 8 ++++++--
M sent.c | 66 ++++++++++++++++-------------…
2 files changed, 40 insertions(+), 34 deletions(-)
---
diff --git a/config.def.h b/config.def.h
@@ -2,8 +2,12 @@
/* The three fields set to 0 have to stay that way for a scalable font */
static char *font = "-*-dejavu sans condensed-bold-r-*-*-0-0-*-*-*-0-*-*";
-#define NUMFONTS 30
-#define FONTSZ(x) ((int)(100.0 * powf(1.1288, (x)))) /* x in [0, NUMFONTS-1] */
+static char *fontfallbacks[] = {
+ "dejavu",
+ "trollolo",
+};
+#define NUMFONTSCALES 30
+#define FONTSZ(x) ((int)(10.0 * powf(1.1288, (x)))) /* x in [0, NUMFONTSCALES-…
/* how much screen estate is to be used at max for the content */
static float usablewidth = 0.75;
diff --git a/sent.c b/sent.c
@@ -93,7 +93,7 @@ static void pngdraw(struct image *img);
static Bool xfontisscalable(char *name);
static XFontStruct *xloadqueryscalablefont(char *name, int size);
-static struct DC *getfontsize(char *str, size_t len, int *width, int *height);
+static void getfontsize(char *str, int *width, int *height);
static void cleanup(struct DC *cur);
static void eprintf(const char *, ...);
static void die(const char *, ...);
@@ -125,7 +125,7 @@ static XWindow xw;
static struct DC dc;
static Drw *d = NULL;
static Scm *sc;
-static Fnt *fonts[NUMFONTS];
+static Fnt *fonts[NUMFONTSCALES];
static int running = 1;
static void (*handler[LASTEvent])(XEvent *) = {
@@ -381,24 +381,17 @@ XFontStruct *xloadqueryscalablefont(char *name, int size)
return (field != 14) ? NULL : XLoadQueryFont(xw.dpy, newname);
}
-struct DC *getfontsize(char *str, size_t len, int *width, int *height)
+void getfontsize(char *str, int *width, int *height)
{
- XCharStruct info;
- int unused;
- struct DC *pre = &dc;
- struct DC *cur = &dc;
+ size_t i;
- do {
- XTextExtents(cur->font, str, len, &unused, &unused, &unused, &…
- if (info.width > xw.uw || info.ascent + info.descent > xw.uh)
+ for (i = 0; i < NUMFONTSCALES; i++) {
+ drw_setfontset(d, fonts[i]);
+ if ((*width = drw_fontset_getwidth(d, str)) > xw.uw || (*heigh…
break;
- pre = cur;
- } while ((cur = cur->next));
-
- XTextExtents(pre->font, "o", 1, &unused, &unused, &unused, &info);
- *height = info.ascent;
- *width = XTextWidth(pre->font, str, len);
- return pre;
+ }
+ if (i > 0)
+ drw_setfontset(d, fonts[i-1]);
}
void cleanup(struct DC *cur)
@@ -545,18 +538,15 @@ void usage()
void xdraw()
{
- int line_len = strlen(slides[idx].text);
-// int height;
-// int width;
-// struct DC *dc = getfontsize(slides[idx].text, line_len, &width, &hei…
+ int height;
+ int width;
struct image *im = slides[idx].img;
+ getfontsize(slides[idx].text, &width, &height);
XClearWindow(xw.dpy, xw.win);
if (!im) {
-// XDrawString(xw.dpy, xw.win, dc->gc, (xw.w - width)/2, (xw.h …
-// slides[idx].text, line_len);
- drw_text(d, xw.w/2, xw.h/2, 1000, 200, slides[idx].text, 0);
+ drw_text(d, (xw.w - width) / 2, (xw.h - height) / 2, width, he…
drw_map(d, xw.win, 0, 0, xw.w, xw.h);
} else if (!(im->state & LOADED) && !pngread(im))
eprintf("could not read image %s", slides[idx].text + 1);
@@ -626,29 +616,41 @@ void xinit()
void xloadfonts(char *fontstr)
{
int count = 0;
- int i = 0;
+ int i, j;
XFontStruct *fnt;
XGCValues gcvalues;
struct DC *cur = &dc;
-// char **fstr = XListFonts(xw.dpy, fontstr, 42, &count);
- char *fstrs;
- const char **fonts;
+ char *fstrs[LEN(fontfallbacks)];
+
+ for (j = 0; j < LEN(fontfallbacks); j++) {
+ if (!(fstrs[j] = malloc(MAXFONTSTRLEN)))
+ die("could not malloc fstrs");
+ }
- if (!(fstrs = malloc(NUMFONTS * MAXFONTSTRLEN)))
+ for (i = 0; i < NUMFONTSCALES; i++) {
+ for (j = 0; j < LEN(fontfallbacks); j++) {
+ if (MAXFONTSTRLEN < snprintf(fstrs[j], MAXFONTSTRLEN, …
+ die("font string too long");
+ }
+ fonts[i] = drw_fontset_create(d, (const char**)fstrs, LEN(fstr…
+ }
+ drw_setfontset(d, fonts[19]);
+
+/* if (!(fstrs = malloc(NUMFONTS * MAXFONTSTRLEN)))
die("could not malloc fontstrings");
if (!(fonts = malloc(NUMFONTS * sizeof(char*)))) {
free(fstrs);
die("could not malloc fontarray");
}
-/* const char *fonts[] = {
+ const char *fonts[] = {
"Sans:size=80:size=10.5",
"VL Gothic:size=10.5",
"WenQuanYi Micro Hei:size=10.5",
}; */
// drw_load_fonts(d, fonts, LEN(fonts));
- for (i = 0; i < NUMFONTS; i++) {
+/* for (i = 0; i < NUMFONTS; i++) {
snprintf(&fstrs[i*MAXFONTSTRLEN], MAXFONTSTRLEN, "%s:size=%d",…
puts(&fstrs[i*MAXFONTSTRLEN]);
fonts[i] = &fstrs[i*MAXFONTSTRLEN];
@@ -658,7 +660,7 @@ void xloadfonts(char *fontstr)
free(fstrs);
free(fonts);
-
+*/
// while (count-- && !xfontisscalable(fstr[count]))
// ; /* nothing, just get first scalable font result */
//
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.