all repos — st @ 7e3cff33ffbd69a112fa4071a9f0ed2dc93bfc57

st (suckless terminal) config

Use character size scaling factors

The bounding boxes for characters can be scaled using "cwscale" and "chscale"
to scale the width and height respectively.
Eric Pruitt eric.pruitt@gmail.com
commit

7e3cff33ffbd69a112fa4071a9f0ed2dc93bfc57

parent

aaee0e8b28a353c215b6d1c8fc06d20038d7b426

3 files changed, 17 insertions(+), 8 deletions(-)

jump to
M TODOTODO

@@ -13,7 +13,6 @@

drawing ------- * add diacritics support to xdraws() -* add kerning configuration * make the font cache simpler * add hard width handling * xft is reporting wrong width and height for characters
M config.def.hconfig.def.h

@@ -9,6 +9,10 @@ static char font[] = "Liberation Mono:pixelsize=12:antialias=false:autohint=false";

static int borderpx = 2; static char shell[] = "/bin/sh"; +/* Kerning / character bounding-box mutlipliers */ +float cwscale = 1.0; +float chscale = 1.0; + /* * word delimiter string *
M st.cst.c

@@ -76,6 +76,7 @@ #define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x)

#define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || (a).bg != (b).bg) #define IS_SET(flag) ((term.mode & (flag)) != 0) #define TIMEDIFF(t1, t2) ((t1.tv_sec-t2.tv_sec)*1000 + (t1.tv_usec-t2.tv_usec)/1000) +#define CEIL(x) (((x) != (int) (x)) ? (x) + 1 : (x)) #define TRUECOLOR(r,g,b) (1 << 24 | (r) << 16 | (g) << 8 | (b)) #define IS_TRUECOL(x) (1 << 24 & (x))

@@ -2777,8 +2778,8 @@ if(xloadfont(&dc.font, pattern))

die("st: can't open font %s\n", fontstr); /* Setting character width and height. */ - xw.cw = dc.font.width; - xw.ch = dc.font.height; + xw.cw = CEIL(dc.font.width * cwscale); + xw.ch = CEIL(dc.font.height * chscale); FcPatternDel(pattern, FC_SLANT); FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);

@@ -2960,6 +2961,7 @@ FcCharSet *fccharset;

Colour *fg, *bg, *temp, revfg, revbg, truefg, truebg; XRenderColor colfg, colbg; Rectangle r; + int oneatatime; frcflags = FRC_NORMAL;

@@ -3087,6 +3089,7 @@ */

u8fs = s; u8fblen = 0; u8fl = 0; + oneatatime = font->width != xw.cw; for(;;) { u8c = s; u8cblen = utf8decode(s, &u8char);

@@ -3094,8 +3097,8 @@ s += u8cblen;

bytelen -= u8cblen; doesexist = XftCharExists(xw.dpy, font->match, u8char); - if(!doesexist || bytelen <= 0) { - if(bytelen <= 0) { + if(oneatatime || !doesexist || bytelen <= 0) { + if(oneatatime || bytelen <= 0) { if(doesexist) { u8fl++; u8fblen += u8cblen;

@@ -3108,7 +3111,7 @@ font->match, xp,

winy + font->ascent, (FcChar8 *)u8fs, u8fblen); - xp += font->width * u8fl; + xp += CEIL(font->width * cwscale * u8fl); } break;

@@ -3117,8 +3120,11 @@

u8fl++; u8fblen += u8cblen; } - if(doesexist) + if(doesexist) { + if (oneatatime); + continue; break; + } /* Search the font cache. */ for(i = 0; i < frclen; i++) {

@@ -3178,7 +3184,7 @@ XftDrawStringUtf8(xw.draw, fg, frc[i].font,

xp, winy + frc[i].font->ascent, (FcChar8 *)u8c, u8cblen); - xp += font->width; + xp += CEIL(font->width * cwscale); } /*