query pixel size from matched font

Sorry for another duplicated mail. I found the patch is malformed
significantly. I've been away from my laptop for a while, so I'm quite
unfamiliar with the settings on this system...
dev
Eon S. Jeon 2013-12-17 15:14:19 -05:00 committed by Roberto E. Vargas Caballero
parent 33da67dac0
commit e8dba89164
1 changed files with 17 additions and 7 deletions

24
st.c
View File

@ -398,7 +398,7 @@ static void xinit(void);
static void xloadcols(void); static void xloadcols(void);
static int xsetcolorname(int, const char *); static int xsetcolorname(int, const char *);
static int xloadfont(Font *, FcPattern *); static int xloadfont(Font *, FcPattern *);
static void xloadfonts(char *, int); static void xloadfonts(char *, double);
static int xloadfontset(Font *); static int xloadfontset(Font *);
static void xsettitle(char *); static void xsettitle(char *);
static void xresettitle(void); static void xresettitle(void);
@ -478,7 +478,7 @@ static char *opt_font = NULL;
static int oldbutton = 3; /* button event on startup: 3 = release */ static int oldbutton = 3; /* button event on startup: 3 = release */
static char *usedfont = NULL; static char *usedfont = NULL;
static int usedfontsize = 0; static double usedfontsize = 0;
/* Font Ring Cache */ /* Font Ring Cache */
enum { enum {
@ -2826,9 +2826,9 @@ xloadfont(Font *f, FcPattern *pattern) {
} }
void void
xloadfonts(char *fontstr, int fontsize) { xloadfonts(char *fontstr, double fontsize) {
FcPattern *pattern; FcPattern *pattern;
FcResult result; FcResult r_sz, r_psz;
double fontval; double fontval;
if(fontstr[0] == '-') { if(fontstr[0] == '-') {
@ -2842,12 +2842,16 @@ xloadfonts(char *fontstr, int fontsize) {
if(fontsize > 0) { if(fontsize > 0) {
FcPatternDel(pattern, FC_PIXEL_SIZE); FcPatternDel(pattern, FC_PIXEL_SIZE);
FcPatternDel(pattern, FC_SIZE);
FcPatternAddDouble(pattern, FC_PIXEL_SIZE, (double)fontsize); FcPatternAddDouble(pattern, FC_PIXEL_SIZE, (double)fontsize);
usedfontsize = fontsize; usedfontsize = fontsize;
} else { } else {
result = FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval); r_psz = FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval);
if(result == FcResultMatch) { r_sz = FcPatternGetDouble(pattern, FC_SIZE, 0, &fontval);
usedfontsize = (int)fontval; if(r_psz == FcResultMatch) {
usedfontsize = fontval;
} else if(r_sz == FcResultMatch) {
usedfontsize = -1;
} else { } else {
/* /*
* Default font size is 12, if none given. This is to * Default font size is 12, if none given. This is to
@ -2864,6 +2868,12 @@ xloadfonts(char *fontstr, int fontsize) {
if(xloadfont(&dc.font, pattern)) if(xloadfont(&dc.font, pattern))
die("st: can't open font %s\n", fontstr); die("st: can't open font %s\n", fontstr);
if(usedfontsize < 0) {
FcPatternGetDouble(dc.font.match->pattern,
FC_PIXEL_SIZE, 0, &fontval);
usedfontsize = fontval;
}
/* Setting character width and height. */ /* Setting character width and height. */
xw.cw = CEIL(dc.font.width * cwscale); xw.cw = CEIL(dc.font.width * cwscale);
xw.ch = CEIL(dc.font.height * chscale); xw.ch = CEIL(dc.font.height * chscale);