mirror of
https://github.com/LukeSmithxyz/st.git
synced 2024-11-22 07:15:59 +01:00
Use character size scaling factors
The bounding boxes for characters can be scaled using "cwscale" and "chscale" to scale the width and height respectively.
This commit is contained in:
parent
aaee0e8b28
commit
7e3cff33ff
3 changed files with 17 additions and 8 deletions
1
TODO
1
TODO
|
@ -13,7 +13,6 @@ code & interface
|
||||||
drawing
|
drawing
|
||||||
-------
|
-------
|
||||||
* add diacritics support to xdraws()
|
* add diacritics support to xdraws()
|
||||||
* add kerning configuration
|
|
||||||
* make the font cache simpler
|
* make the font cache simpler
|
||||||
* add hard width handling
|
* add hard width handling
|
||||||
* xft is reporting wrong width and height for characters
|
* xft is reporting wrong width and height for characters
|
||||||
|
|
|
@ -9,6 +9,10 @@ static char font[] = "Liberation Mono:pixelsize=12:antialias=false:autohint=fals
|
||||||
static int borderpx = 2;
|
static int borderpx = 2;
|
||||||
static char shell[] = "/bin/sh";
|
static char shell[] = "/bin/sh";
|
||||||
|
|
||||||
|
/* Kerning / character bounding-box mutlipliers */
|
||||||
|
float cwscale = 1.0;
|
||||||
|
float chscale = 1.0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* word delimiter string
|
* word delimiter string
|
||||||
*
|
*
|
||||||
|
|
20
st.c
20
st.c
|
@ -76,6 +76,7 @@ char *argv0;
|
||||||
#define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || (a).bg != (b).bg)
|
#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 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 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 TRUECOLOR(r,g,b) (1 << 24 | (r) << 16 | (g) << 8 | (b))
|
||||||
#define IS_TRUECOL(x) (1 << 24 & (x))
|
#define IS_TRUECOL(x) (1 << 24 & (x))
|
||||||
|
@ -2777,8 +2778,8 @@ xloadfonts(char *fontstr, int fontsize) {
|
||||||
die("st: can't open font %s\n", fontstr);
|
die("st: can't open font %s\n", fontstr);
|
||||||
|
|
||||||
/* Setting character width and height. */
|
/* Setting character width and height. */
|
||||||
xw.cw = dc.font.width;
|
xw.cw = CEIL(dc.font.width * cwscale);
|
||||||
xw.ch = dc.font.height;
|
xw.ch = CEIL(dc.font.height * chscale);
|
||||||
|
|
||||||
FcPatternDel(pattern, FC_SLANT);
|
FcPatternDel(pattern, FC_SLANT);
|
||||||
FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);
|
FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);
|
||||||
|
@ -2960,6 +2961,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
|
||||||
Colour *fg, *bg, *temp, revfg, revbg, truefg, truebg;
|
Colour *fg, *bg, *temp, revfg, revbg, truefg, truebg;
|
||||||
XRenderColor colfg, colbg;
|
XRenderColor colfg, colbg;
|
||||||
Rectangle r;
|
Rectangle r;
|
||||||
|
int oneatatime;
|
||||||
|
|
||||||
frcflags = FRC_NORMAL;
|
frcflags = FRC_NORMAL;
|
||||||
|
|
||||||
|
@ -3087,6 +3089,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
|
||||||
u8fs = s;
|
u8fs = s;
|
||||||
u8fblen = 0;
|
u8fblen = 0;
|
||||||
u8fl = 0;
|
u8fl = 0;
|
||||||
|
oneatatime = font->width != xw.cw;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
u8c = s;
|
u8c = s;
|
||||||
u8cblen = utf8decode(s, &u8char);
|
u8cblen = utf8decode(s, &u8char);
|
||||||
|
@ -3094,8 +3097,8 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
|
||||||
bytelen -= u8cblen;
|
bytelen -= u8cblen;
|
||||||
|
|
||||||
doesexist = XftCharExists(xw.dpy, font->match, u8char);
|
doesexist = XftCharExists(xw.dpy, font->match, u8char);
|
||||||
if(!doesexist || bytelen <= 0) {
|
if(oneatatime || !doesexist || bytelen <= 0) {
|
||||||
if(bytelen <= 0) {
|
if(oneatatime || bytelen <= 0) {
|
||||||
if(doesexist) {
|
if(doesexist) {
|
||||||
u8fl++;
|
u8fl++;
|
||||||
u8fblen += u8cblen;
|
u8fblen += u8cblen;
|
||||||
|
@ -3108,7 +3111,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
|
||||||
winy + font->ascent,
|
winy + font->ascent,
|
||||||
(FcChar8 *)u8fs,
|
(FcChar8 *)u8fs,
|
||||||
u8fblen);
|
u8fblen);
|
||||||
xp += font->width * u8fl;
|
xp += CEIL(font->width * cwscale * u8fl);
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3117,8 +3120,11 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
|
||||||
u8fl++;
|
u8fl++;
|
||||||
u8fblen += u8cblen;
|
u8fblen += u8cblen;
|
||||||
}
|
}
|
||||||
if(doesexist)
|
if(doesexist) {
|
||||||
|
if (oneatatime);
|
||||||
|
continue;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Search the font cache. */
|
/* Search the font cache. */
|
||||||
for(i = 0; i < frclen; i++) {
|
for(i = 0; i < frclen; i++) {
|
||||||
|
@ -3178,7 +3184,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
|
||||||
xp, winy + frc[i].font->ascent,
|
xp, winy + frc[i].font->ascent,
|
||||||
(FcChar8 *)u8c, u8cblen);
|
(FcChar8 *)u8c, u8cblen);
|
||||||
|
|
||||||
xp += font->width;
|
xp += CEIL(font->width * cwscale);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue