Преглед на файлове

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...
Eon S. Jeon преди 11 години
родител
ревизия
e8dba89164
променени са 1 файла, в които са добавени 17 реда и са изтрити 7 реда
  1. 17 7
      st.c

+ 17 - 7
st.c

@@ -398,7 +398,7 @@ static void xinit(void);
 static void xloadcols(void);
 static int xsetcolorname(int, const char *);
 static int xloadfont(Font *, FcPattern *);
-static void xloadfonts(char *, int);
+static void xloadfonts(char *, double);
 static int xloadfontset(Font *);
 static void xsettitle(char *);
 static void xresettitle(void);
@@ -478,7 +478,7 @@ static char *opt_font = NULL;
 static int oldbutton = 3; /* button event on startup: 3 = release */
 
 static char *usedfont = NULL;
-static int usedfontsize = 0;
+static double usedfontsize = 0;
 
 /* Font Ring Cache */
 enum {
@@ -2826,9 +2826,9 @@ xloadfont(Font *f, FcPattern *pattern) {
 }
 
 void
-xloadfonts(char *fontstr, int fontsize) {
+xloadfonts(char *fontstr, double fontsize) {
 	FcPattern *pattern;
-	FcResult result;
+	FcResult r_sz, r_psz;
 	double fontval;
 
 	if(fontstr[0] == '-') {
@@ -2842,12 +2842,16 @@ xloadfonts(char *fontstr, int fontsize) {
 
 	if(fontsize > 0) {
 		FcPatternDel(pattern, FC_PIXEL_SIZE);
+		FcPatternDel(pattern, FC_SIZE);
 		FcPatternAddDouble(pattern, FC_PIXEL_SIZE, (double)fontsize);
 		usedfontsize = fontsize;
 	} else {
-		result = FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval);
-		if(result == FcResultMatch) {
-			usedfontsize = (int)fontval;
+		r_psz = FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval);
+		r_sz = FcPatternGetDouble(pattern, FC_SIZE, 0, &fontval);
+		if(r_psz == FcResultMatch) {
+			usedfontsize = fontval;
+		} else if(r_sz == FcResultMatch) {
+			usedfontsize = -1;
 		} else {
 			/*
 			 * 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))
 		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. */
 	xw.cw = CEIL(dc.font.width * cwscale);
 	xw.ch = CEIL(dc.font.height * chscale);