aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenno Fünfstück <benno.fuenfstueck@gmail.com>2017-12-26 16:38:27 +0100
committerHiltjo Posthuma <hiltjo@codemadness.org>2017-12-26 22:54:06 +0100
commite829e13bb1a830e0cdce749ea0865cd93af1846c (patch)
treed7094920b3bad3fda25e6bac42a110ed12d666ad
parentc1d23afa9c44cc29818c538126790ae90a64a3c5 (diff)
downloadst-patched-e829e13bb1a830e0cdce749ea0865cd93af1846c.tar.bz2
st-patched-e829e13bb1a830e0cdce749ea0865cd93af1846c.tar.xz
st-patched-e829e13bb1a830e0cdce749ea0865cd93af1846c.zip
Apply ATTR_REVERSE after ATTR_FAINT
An example where the new behaviour makes more sense: Suppose some text is formatted with ATTR_FAINT for red for the foreground, so it is rendered in a dark red. In that case, when selected with the mouse, the intended behaviour is that foreground and background color are swapped: so the selection should be rendered in dark red and the text in the default background color. Before this patch, what happened was that the selection would be in normal red and the text in the darkened background color, making it almost unreadable. For an example application that uses the FAINT attribute, try dmesg from util-linux with color support, it uses FAINT for segfault messages.
-rw-r--r--x.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/x.c b/x.c
index 191e5dc..474d73b 100644
--- a/x.c
+++ b/x.c
@@ -1189,12 +1189,6 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i
1189 } 1189 }
1190 } 1190 }
1191 1191
1192 if (base.mode & ATTR_REVERSE) {
1193 temp = fg;
1194 fg = bg;
1195 bg = temp;
1196 }
1197
1198 if ((base.mode & ATTR_BOLD_FAINT) == ATTR_FAINT) { 1192 if ((base.mode & ATTR_BOLD_FAINT) == ATTR_FAINT) {
1199 colfg.red = fg->color.red / 2; 1193 colfg.red = fg->color.red / 2;
1200 colfg.green = fg->color.green / 2; 1194 colfg.green = fg->color.green / 2;
@@ -1203,6 +1197,13 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i
1203 fg = &revfg; 1197 fg = &revfg;
1204 } 1198 }
1205 1199
1200
1201 if (base.mode & ATTR_REVERSE) {
1202 temp = fg;
1203 fg = bg;
1204 bg = temp;
1205 }
1206
1206 if (base.mode & ATTR_BLINK && term.mode & MODE_BLINK) 1207 if (base.mode & ATTR_BLINK && term.mode & MODE_BLINK)
1207 fg = bg; 1208 fg = bg;
1208 1209