Removing the overdrawing of some fonts. - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit db6f796ecfafcee879613b60a772be3e5d9e355e
 (DIR) parent 7ea68632081e5adc2f0d2681ac89ed5decfac7b9
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Tue, 23 Apr 2013 19:17:50 +0200
       
       Removing the overdrawing of some fonts.
       
       Diffstat:
         st.c                                |      11 +++++++++++
       
       1 file changed, 11 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git 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 <pty.h>
       @@ -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