From db6f796ecfafcee879613b60a772be3e5d9e355e Mon Sep 17 00:00:00 2001 From: Christoph Lohmann <20h@r-36.net> Date: Tue, 23 Apr 2013 19:17:50 +0200 Subject: Removing the overdrawing of some fonts. --- st.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'st.c') diff --git a/st.c b/st.c index f593302..f2ee12f 100644 --- a/st.c +++ b/st.c @@ -36,6 +36,7 @@ char *argv0; #define Draw XftDraw * #define Colour XftColor #define Colourmap Colormap +#define Rectangle XRectangle #if defined(__linux) #include @@ -2764,6 +2765,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { FcCharSet *fccharset; Colour *fg, *bg, *temp, revfg, revbg; XRenderColor colfg, colbg; + Rectangle r; frcflags = FRC_NORMAL; @@ -2851,6 +2853,11 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { /* Clean up the region we want to draw to. */ XftDrawRect(xw.draw, bg, winx, winy, width, xw.ch); + r.x = 0; + r.y = 0; + r.height = xw.ch; + r.width = width; + XftDrawSetClipRectangles(xw.draw, winx, winy, &r, 1); fcsets[0] = font->set; for(xp = winx; bytelen > 0;) { @@ -2885,6 +2892,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { (FcChar8 *)u8fs, u8fblen); xp += font->width * u8fl; + } break; } @@ -2969,6 +2977,9 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { XftDrawRect(xw.draw, fg, winx, winy + font->ascent + 1, width, 1); } + + /* Reset clip to none. */ + XftDrawSetClip(xw.draw, 0); } void -- cgit v1.2.3