JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Add the possibility to have default highlight colors.
[st.git] / st.c
diff --git a/st.c b/st.c
index fc9ed70..8b1fc56 100644 (file)
--- a/st.c
+++ b/st.c
@@ -649,23 +649,18 @@ selected(int x, int y) {
        if(sel.ey == y && sel.by == y) {
                bx = MIN(sel.bx, sel.ex);
                ex = MAX(sel.bx, sel.ex);
+
                return BETWEEN(x, bx, ex);
        }
 
-       return ((sel.b.y < y && y < sel.e.y)
-                       || (y == sel.e.y && x <= sel.e.x))
-                       || (y == sel.b.y && x >= sel.b.x
-                               && (x <= sel.e.x || sel.b.y != sel.e.y));
-       switch(sel.type) {
-       case SEL_REGULAR:
-               return ((sel.b.y < y && y < sel.e.y)
-                       || (y == sel.e.y && x <= sel.e.x))
-                       || (y == sel.b.y && x >= sel.b.x
-                               && (x <= sel.e.x || sel.b.y != sel.e.y));
-       case SEL_RECTANGULAR:
+       if(sel.type == SEL_RECTANGULAR) {
                return ((sel.b.y <= y && y <= sel.e.y)
                        && (sel.b.x <= x && x <= sel.e.x));
-       };
+       }
+       return ((sel.b.y < y && y < sel.e.y)
+               || (y == sel.e.y && x <= sel.e.x))
+               || (y == sel.b.y && x >= sel.b.x
+                       && (x <= sel.e.x || sel.b.y != sel.e.y));
 }
 
 void
@@ -1257,8 +1252,12 @@ selscroll(int orig, int n) {
                        sel.bx = -1;
                        return;
                }
-               switch(sel.type) {
-               case SEL_REGULAR:
+               if(sel.type == SEL_RECTANGULAR) {
+                       if(sel.by < term.top)
+                               sel.by = term.top;
+                       if(sel.ey > term.bot)
+                               sel.ey = term.bot;
+               } else {
                        if(sel.by < term.top) {
                                sel.by = term.top;
                                sel.bx = 0;
@@ -1267,14 +1266,7 @@ selscroll(int orig, int n) {
                                sel.ey = term.bot;
                                sel.ex = term.col;
                        }
-                       break;
-               case SEL_RECTANGULAR:
-                       if(sel.by < term.top)
-                               sel.by = term.top;
-                       if(sel.ey > term.bot)
-                               sel.ey = term.bot;
-                       break;
-               };
+               }
                sel.b.y = sel.by, sel.b.x = sel.bx;
                sel.e.y = sel.ey, sel.e.x = sel.ex;
        }
@@ -2493,7 +2485,7 @@ xloadfont(Font *f, FcPattern *pattern) {
        f->lbearing = 0;
        f->rbearing = f->match->max_advance_width;
 
-       f->height = f->match->height;
+       f->height = f->ascent + f->descent;
        f->width = f->lbearing + f->rbearing;
 
        return 0;
@@ -2719,12 +2711,28 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
        FcPattern *fcpattern, *fontpattern;
        FcFontSet *fcsets[] = { NULL };
        FcCharSet *fccharset;
-       Colour *fg = &dc.col[base.fg], *bg = &dc.col[base.bg],
-                *temp, revfg, revbg;
+       Colour *fg, *bg, *temp, revfg, revbg;
        XRenderColor colfg, colbg;
 
        frcflags = FRC_NORMAL;
 
+       if(base.mode & ATTR_ITALIC) {
+               if(base.fg == defaultfg)
+                       base.fg = defaultitalic;
+               font = &dc.ifont;
+               frcflags = FRC_ITALIC;
+       } else if((base.mode & ATTR_ITALIC) && (base.mode & ATTR_BOLD)) {
+               if(base.fg == defaultfg)
+                       base.fg = defaultitalic;
+               font = &dc.ibfont;
+               frcflags = FRC_ITALICBOLD;
+       } else if(base.mode & ATTR_UNDERLINE) {
+               if(base.fg == defaultfg)
+                       base.fg = defaultunderline;
+       }
+       fg = &dc.col[base.fg];
+       bg = &dc.col[base.bg];
+
        if(base.mode & ATTR_BOLD) {
                if(BETWEEN(base.fg, 0, 7)) {
                        /* basic system colors */
@@ -2746,15 +2754,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
                frcflags = FRC_BOLD;
        }
 
-       if(base.mode & ATTR_ITALIC) {
-               font = &dc.ifont;
-               frcflags = FRC_ITALIC;
-       }
-       if((base.mode & ATTR_ITALIC) && (base.mode & ATTR_BOLD)) {
-               font = &dc.ibfont;
-               frcflags = FRC_ITALICBOLD;
-       }
-
        if(IS_SET(MODE_REVERSE)) {
                if(fg == &dc.col[defaultfg]) {
                        fg = &dc.col[defaultbg];
@@ -2881,8 +2880,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
                                        FcTrue, fcpattern, &fcres);
 
                        /*
-                        * Overwrite or create the new cache entry
-                        * entry.
+                        * Overwrite or create the new cache entry.
                         */
                        frccur++;
                        frclen++;