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...
This commit is contained in:
parent
33da67dac0
commit
e8dba89164
1 changed files with 17 additions and 7 deletions
24
st.c
24
st.c
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue