|
|
@ -76,6 +76,7 @@ char *argv0; |
|
|
|
#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 @@ xloadfonts(char *fontstr, int fontsize) { |
|
|
|
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 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
|
|
|
Colour *fg, *bg, *temp, revfg, revbg, truefg, truebg; |
|
|
|
XRenderColor colfg, colbg; |
|
|
|
Rectangle r; |
|
|
|
int oneatatime; |
|
|
|
|
|
|
|
frcflags = FRC_NORMAL; |
|
|
|
|
|
|
@ -3087,6 +3089,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
|
|
|
u8fs = s; |
|
|
|
u8fblen = 0; |
|
|
|
u8fl = 0; |
|
|
|
oneatatime = font->width != xw.cw; |
|
|
|
for(;;) { |
|
|
|
u8c = s; |
|
|
|
u8cblen = utf8decode(s, &u8char); |
|
|
@ -3094,8 +3097,8 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
|
|
|
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 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
|
|
|
winy + font->ascent, |
|
|
|
(FcChar8 *)u8fs, |
|
|
|
u8fblen); |
|
|
|
xp += font->width * u8fl; |
|
|
|
xp += CEIL(font->width * cwscale * u8fl); |
|
|
|
|
|
|
|
} |
|
|
|
break; |
|
|
@ -3117,8 +3120,11 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
|
|
|
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 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
|
|
|
xp, winy + frc[i].font->ascent, |
|
|
|
(FcChar8 *)u8c, u8cblen); |
|
|
|
|
|
|
|
xp += font->width; |
|
|
|
xp += CEIL(font->width * cwscale); |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|