aboutsummaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
Diffstat (limited to 'st.c')
-rw-r--r--st.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/st.c b/st.c
index cf329fd..655d5a3 100644
--- a/st.c
+++ b/st.c
@@ -76,6 +76,7 @@ enum glyph_attribute {
76 ATTR_UNDERLINE = 2, 76 ATTR_UNDERLINE = 2,
77 ATTR_BOLD = 4, 77 ATTR_BOLD = 4,
78 ATTR_GFX = 8, 78 ATTR_GFX = 8,
79 ATTR_ITALIC = 16,
79}; 80};
80 81
81enum cursor_movement { 82enum cursor_movement {
@@ -238,7 +239,7 @@ typedef struct {
238 short lbearing; 239 short lbearing;
239 short rbearing; 240 short rbearing;
240 XFontSet set; 241 XFontSet set;
241 } font, bfont; 242 } font, bfont, ifont;
242} DC; 243} DC;
243 244
244static void die(const char*, ...); 245static void die(const char*, ...);
@@ -1122,8 +1123,8 @@ tsetattr(int *attr, int l) {
1122 case 1: 1123 case 1:
1123 term.c.attr.mode |= ATTR_BOLD; 1124 term.c.attr.mode |= ATTR_BOLD;
1124 break; 1125 break;
1125 case 3: /* enter standout (highlight) mode TODO: make it italic */ 1126 case 3: /* enter standout (highlight) */
1126 term.c.attr.mode |= ATTR_REVERSE; 1127 term.c.attr.mode |= ATTR_ITALIC;
1127 break; 1128 break;
1128 case 4: 1129 case 4:
1129 term.c.attr.mode |= ATTR_UNDERLINE; 1130 term.c.attr.mode |= ATTR_UNDERLINE;
@@ -1134,8 +1135,8 @@ tsetattr(int *attr, int l) {
1134 case 22: 1135 case 22:
1135 term.c.attr.mode &= ~ATTR_BOLD; 1136 term.c.attr.mode &= ~ATTR_BOLD;
1136 break; 1137 break;
1137 case 23: /* leave standout (highlight) mode TODO: make it italic */ 1138 case 23: /* leave standout (highlight) mode */
1138 term.c.attr.mode &= ~ATTR_REVERSE; 1139 term.c.attr.mode &= ~ATTR_ITALIC;
1139 break; 1140 break;
1140 case 24: 1141 case 24:
1141 term.c.attr.mode &= ~ATTR_UNDERLINE; 1142 term.c.attr.mode &= ~ATTR_UNDERLINE;
@@ -1886,14 +1887,20 @@ xgetfontinfo(XFontSet set, int *ascent, int *descent, short *lbearing, short *rb
1886} 1887}
1887 1888
1888void 1889void
1889initfonts(char *fontstr, char *bfontstr) { 1890initfonts(char *fontstr, char *bfontstr, char *ifontstr) {
1890 if((dc.font.set = xinitfont(fontstr)) == NULL || 1891 if((dc.font.set = xinitfont(fontstr)) == NULL)
1891 (dc.bfont.set = xinitfont(bfontstr)) == NULL) 1892 die("Can't load font %s\n", fontstr);
1892 die("Can't load font %s\n", dc.font.set ? BOLDFONT : FONT); 1893 if((dc.bfont.set = xinitfont(bfontstr)) == NULL)
1894 die("Can't load bfont %s\n", bfontstr);
1895 if((dc.ifont.set = xinitfont(ifontstr)) == NULL)
1896 die("Can't load ifont %s\n", ifontstr);
1897
1893 xgetfontinfo(dc.font.set, &dc.font.ascent, &dc.font.descent, 1898 xgetfontinfo(dc.font.set, &dc.font.ascent, &dc.font.descent,
1894 &dc.font.lbearing, &dc.font.rbearing); 1899 &dc.font.lbearing, &dc.font.rbearing);
1895 xgetfontinfo(dc.bfont.set, &dc.bfont.ascent, &dc.bfont.descent, 1900 xgetfontinfo(dc.bfont.set, &dc.bfont.ascent, &dc.bfont.descent,
1896 &dc.bfont.lbearing, &dc.bfont.rbearing); 1901 &dc.bfont.lbearing, &dc.bfont.rbearing);
1902 xgetfontinfo(dc.ifont.set, &dc.ifont.ascent, &dc.ifont.descent,
1903 &dc.ifont.lbearing, &dc.ifont.rbearing);
1897} 1904}
1898 1905
1899void 1906void
@@ -1927,7 +1934,7 @@ xinit(void) {
1927 } 1934 }
1928 1935
1929 /* font */ 1936 /* font */
1930 initfonts(FONT, BOLDFONT); 1937 initfonts(FONT, BOLDFONT, ITALICFONT);
1931 1938
1932 /* XXX: Assuming same size for bold font */ 1939 /* XXX: Assuming same size for bold font */
1933 xw.cw = dc.font.rbearing - dc.font.lbearing; 1940 xw.cw = dc.font.rbearing - dc.font.lbearing;
@@ -2002,6 +2009,9 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
2002 fontset = dc.bfont.set; 2009 fontset = dc.bfont.set;
2003 } 2010 }
2004 2011
2012 if(base.mode & ATTR_ITALIC)
2013 fontset = dc.ifont.set;
2014
2005 XSetBackground(xw.dpy, dc.gc, dc.col[bg]); 2015 XSetBackground(xw.dpy, dc.gc, dc.col[bg]);
2006 XSetForeground(xw.dpy, dc.gc, dc.col[fg]); 2016 XSetForeground(xw.dpy, dc.gc, dc.col[fg]);
2007 2017