Introduction
Introduction Statistics Contact Development Disclaimer Help
tDo not use color when font attributes are supported - st - [fork] customized b…
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit 8c99915608beee03eca3bae6ed92264a0da87e2f
parent 7854fde1ff95ba85239ccfe1b59b555bd245d0db
Author: Quentin Rameau <[email protected]>
Date: Sat, 22 Oct 2016 16:36:10 +0200
Do not use color when font attributes are supported
If fontconfig gives us a font without the attributes we asked for,
display an alternative color instead.
Diffstat:
M config.def.h | 8 +++-----
M st.c | 40 +++++++++++++++++++++++++----…
2 files changed, 35 insertions(+), 13 deletions(-)
---
diff --git a/config.def.h b/config.def.h
t@@ -138,12 +138,10 @@ static unsigned int mousefg = 7;
static unsigned int mousebg = 0;
/*
- * Colors used, when the specific fg == defaultfg. So in reverse mode this
- * will reverse too. Another logic would only make the simple feature too
- * complex.
+ * Color used to display font attributes when fontconfig selected a font which
+ * doesn't match the ones requested.
*/
-static unsigned int defaultitalic = 11;
-static unsigned int defaultunderline = 7;
+static unsigned int defaultattr = 11;
/*
* Internal mouse shortcuts.
diff --git a/st.c b/st.c
t@@ -354,6 +354,8 @@ typedef struct {
int width;
int ascent;
int descent;
+ int badslant;
+ int badweight;
short lbearing;
short rbearing;
XftFont *match;
t@@ -3373,6 +3375,7 @@ xloadfont(Font *f, FcPattern *pattern)
FcPattern *match;
FcResult result;
XGlyphInfo extents;
+ int wantattr, haveattr;
match = XftFontMatch(xw.dpy, xw.scr, pattern, &result);
if (!match)
t@@ -3383,6 +3386,28 @@ xloadfont(Font *f, FcPattern *pattern)
return 1;
}
+ if ((XftPatternGetInteger(pattern, "slant", 0, &wantattr) ==
+ XftResultMatch)) {
+ /*
+ * Check if xft was unable to find a font with the appropriate
+ * slant but gave us one anyway. Try to mitigate.
+ */
+ if ((XftPatternGetInteger(f->match->pattern, "slant", 0,
+ &haveattr) != XftResultMatch) || haveattr < wantattr) {
+ f->badslant = 1;
+ fputs("st: font slant does not match\n", stderr);
+ }
+ }
+
+ if ((XftPatternGetInteger(pattern, "weight", 0, &wantattr) ==
+ XftResultMatch)) {
+ if ((XftPatternGetInteger(f->match->pattern, "weight", 0,
+ &haveattr) != XftResultMatch) || haveattr != wantattr) {
+ f->badweight = 1;
+ fputs("st: font weight does not match\n", stderr);
+ }
+ }
+
XftTextExtentsUtf8(xw.dpy, f->match,
(const FcChar8 *) ascii_printable,
strlen(ascii_printable), &extents);
t@@ -3780,14 +3805,13 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Gly…
XRenderColor colfg, colbg;
XRectangle r;
- /* Determine foreground and background colors based on mode. */
- if (base.fg == defaultfg) {
- if (base.mode & ATTR_ITALIC)
- base.fg = defaultitalic;
- else if ((base.mode & ATTR_ITALIC) && (base.mode & ATTR_BOLD))
- base.fg = defaultitalic;
- else if (base.mode & ATTR_UNDERLINE)
- base.fg = defaultunderline;
+ /* Fallback on color display for attributes not supported by the font …
+ if (base.mode & ATTR_ITALIC && base.mode & ATTR_BOLD) {
+ if (dc.ibfont.badslant || dc.ibfont.badweight)
+ base.fg = defaultattr;
+ } else if ((base.mode & ATTR_ITALIC && dc.ifont.badslant) ||
+ (base.mode & ATTR_BOLD && dc.bfont.badweight)) {
+ base.fg = defaultattr;
}
if (IS_TRUECOL(base.fg)) {
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.