use new font system from drw
This commit is contained in:
parent
76d3b0bb95
commit
85d25716b0
@ -2,8 +2,12 @@
|
|||||||
|
|
||||||
/* The three fields set to 0 have to stay that way for a scalable font */
|
/* 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-*-*";
|
static char *font = "-*-dejavu sans condensed-bold-r-*-*-0-0-*-*-*-0-*-*";
|
||||||
#define NUMFONTS 30
|
static char *fontfallbacks[] = {
|
||||||
#define FONTSZ(x) ((int)(100.0 * powf(1.1288, (x)))) /* x in [0, NUMFONTS-1] */
|
"dejavu",
|
||||||
|
"trollolo",
|
||||||
|
};
|
||||||
|
#define NUMFONTSCALES 30
|
||||||
|
#define FONTSZ(x) ((int)(10.0 * powf(1.1288, (x)))) /* x in [0, NUMFONTSCALES-1] */
|
||||||
|
|
||||||
/* how much screen estate is to be used at max for the content */
|
/* how much screen estate is to be used at max for the content */
|
||||||
static float usablewidth = 0.75;
|
static float usablewidth = 0.75;
|
||||||
|
66
sent.c
66
sent.c
@ -93,7 +93,7 @@ static void pngdraw(struct image *img);
|
|||||||
|
|
||||||
static Bool xfontisscalable(char *name);
|
static Bool xfontisscalable(char *name);
|
||||||
static XFontStruct *xloadqueryscalablefont(char *name, int size);
|
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 cleanup(struct DC *cur);
|
||||||
static void eprintf(const char *, ...);
|
static void eprintf(const char *, ...);
|
||||||
static void die(const char *, ...);
|
static void die(const char *, ...);
|
||||||
@ -125,7 +125,7 @@ static XWindow xw;
|
|||||||
static struct DC dc;
|
static struct DC dc;
|
||||||
static Drw *d = NULL;
|
static Drw *d = NULL;
|
||||||
static Scm *sc;
|
static Scm *sc;
|
||||||
static Fnt *fonts[NUMFONTS];
|
static Fnt *fonts[NUMFONTSCALES];
|
||||||
static int running = 1;
|
static int running = 1;
|
||||||
|
|
||||||
static void (*handler[LASTEvent])(XEvent *) = {
|
static void (*handler[LASTEvent])(XEvent *) = {
|
||||||
@ -381,24 +381,17 @@ XFontStruct *xloadqueryscalablefont(char *name, int size)
|
|||||||
return (field != 14) ? NULL : XLoadQueryFont(xw.dpy, newname);
|
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;
|
size_t i;
|
||||||
int unused;
|
|
||||||
struct DC *pre = &dc;
|
|
||||||
struct DC *cur = &dc;
|
|
||||||
|
|
||||||
do {
|
for (i = 0; i < NUMFONTSCALES; i++) {
|
||||||
XTextExtents(cur->font, str, len, &unused, &unused, &unused, &info);
|
drw_setfontset(d, fonts[i]);
|
||||||
if (info.width > xw.uw || info.ascent + info.descent > xw.uh)
|
if ((*width = drw_fontset_getwidth(d, str)) > xw.uw || (*height = d->fonts->h) > xw.uh)
|
||||||
break;
|
break;
|
||||||
pre = cur;
|
}
|
||||||
} while ((cur = cur->next));
|
if (i > 0)
|
||||||
|
drw_setfontset(d, fonts[i-1]);
|
||||||
XTextExtents(pre->font, "o", 1, &unused, &unused, &unused, &info);
|
|
||||||
*height = info.ascent;
|
|
||||||
*width = XTextWidth(pre->font, str, len);
|
|
||||||
return pre;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cleanup(struct DC *cur)
|
void cleanup(struct DC *cur)
|
||||||
@ -545,18 +538,15 @@ void usage()
|
|||||||
|
|
||||||
void xdraw()
|
void xdraw()
|
||||||
{
|
{
|
||||||
int line_len = strlen(slides[idx].text);
|
int height;
|
||||||
// int height;
|
int width;
|
||||||
// int width;
|
|
||||||
// struct DC *dc = getfontsize(slides[idx].text, line_len, &width, &height);
|
|
||||||
struct image *im = slides[idx].img;
|
struct image *im = slides[idx].img;
|
||||||
|
|
||||||
|
getfontsize(slides[idx].text, &width, &height);
|
||||||
XClearWindow(xw.dpy, xw.win);
|
XClearWindow(xw.dpy, xw.win);
|
||||||
|
|
||||||
if (!im) {
|
if (!im) {
|
||||||
// XDrawString(xw.dpy, xw.win, dc->gc, (xw.w - width)/2, (xw.h + height)/2,
|
drw_text(d, (xw.w - width) / 2, (xw.h - height) / 2, width, height, slides[idx].text, 0);
|
||||||
// slides[idx].text, line_len);
|
|
||||||
drw_text(d, xw.w/2, xw.h/2, 1000, 200, slides[idx].text, 0);
|
|
||||||
drw_map(d, xw.win, 0, 0, xw.w, xw.h);
|
drw_map(d, xw.win, 0, 0, xw.w, xw.h);
|
||||||
} else if (!(im->state & LOADED) && !pngread(im))
|
} else if (!(im->state & LOADED) && !pngread(im))
|
||||||
eprintf("could not read image %s", slides[idx].text + 1);
|
eprintf("could not read image %s", slides[idx].text + 1);
|
||||||
@ -626,29 +616,41 @@ void xinit()
|
|||||||
void xloadfonts(char *fontstr)
|
void xloadfonts(char *fontstr)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int i = 0;
|
int i, j;
|
||||||
XFontStruct *fnt;
|
XFontStruct *fnt;
|
||||||
XGCValues gcvalues;
|
XGCValues gcvalues;
|
||||||
struct DC *cur = &dc;
|
struct DC *cur = &dc;
|
||||||
// char **fstr = XListFonts(xw.dpy, fontstr, 42, &count);
|
char *fstrs[LEN(fontfallbacks)];
|
||||||
char *fstrs;
|
|
||||||
const char **fonts;
|
|
||||||
|
|
||||||
if (!(fstrs = malloc(NUMFONTS * MAXFONTSTRLEN)))
|
for (j = 0; j < LEN(fontfallbacks); j++) {
|
||||||
|
if (!(fstrs[j] = malloc(MAXFONTSTRLEN)))
|
||||||
|
die("could not malloc fstrs");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < NUMFONTSCALES; i++) {
|
||||||
|
for (j = 0; j < LEN(fontfallbacks); j++) {
|
||||||
|
if (MAXFONTSTRLEN < snprintf(fstrs[j], MAXFONTSTRLEN, "%s:size=%d", fontfallbacks[j], FONTSZ(i)))
|
||||||
|
die("font string too long");
|
||||||
|
}
|
||||||
|
fonts[i] = drw_fontset_create(d, (const char**)fstrs, LEN(fstrs));
|
||||||
|
}
|
||||||
|
drw_setfontset(d, fonts[19]);
|
||||||
|
|
||||||
|
/* if (!(fstrs = malloc(NUMFONTS * MAXFONTSTRLEN)))
|
||||||
die("could not malloc fontstrings");
|
die("could not malloc fontstrings");
|
||||||
if (!(fonts = malloc(NUMFONTS * sizeof(char*)))) {
|
if (!(fonts = malloc(NUMFONTS * sizeof(char*)))) {
|
||||||
free(fstrs);
|
free(fstrs);
|
||||||
die("could not malloc fontarray");
|
die("could not malloc fontarray");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* const char *fonts[] = {
|
const char *fonts[] = {
|
||||||
"Sans:size=80:size=10.5",
|
"Sans:size=80:size=10.5",
|
||||||
"VL Gothic:size=10.5",
|
"VL Gothic:size=10.5",
|
||||||
"WenQuanYi Micro Hei:size=10.5",
|
"WenQuanYi Micro Hei:size=10.5",
|
||||||
}; */
|
}; */
|
||||||
// drw_load_fonts(d, fonts, LEN(fonts));
|
// 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", fontstr, FONTSZ(i));
|
snprintf(&fstrs[i*MAXFONTSTRLEN], MAXFONTSTRLEN, "%s:size=%d", fontstr, FONTSZ(i));
|
||||||
puts(&fstrs[i*MAXFONTSTRLEN]);
|
puts(&fstrs[i*MAXFONTSTRLEN]);
|
||||||
fonts[i] = &fstrs[i*MAXFONTSTRLEN];
|
fonts[i] = &fstrs[i*MAXFONTSTRLEN];
|
||||||
@ -658,7 +660,7 @@ void xloadfonts(char *fontstr)
|
|||||||
|
|
||||||
free(fstrs);
|
free(fstrs);
|
||||||
free(fonts);
|
free(fonts);
|
||||||
|
*/
|
||||||
// while (count-- && !xfontisscalable(fstr[count]))
|
// while (count-- && !xfontisscalable(fstr[count]))
|
||||||
// ; /* nothing, just get first scalable font result */
|
// ; /* nothing, just get first scalable font result */
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user