tfixed optimized drawing routine and factored some code. - st - [fork] customiz… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 5258d6054599e456c260984b8619500d0b4b75b7 | |
parent b4f623f9109cc38a87469c6430d5e780e9a01989 | |
Author: Aurélien Aptel <[email protected]> | |
Date: Sun, 29 Aug 2010 20:12:44 +0200 | |
fixed optimized drawing routine and factored some code. | |
Diffstat: | |
M st.c | 33 +++++++++++++++++------------… | |
1 file changed, 18 insertions(+), 15 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -46,8 +46,8 @@ | |
/* Attribute, Cursor, Character state, Terminal mode, Screen draw mode */ | |
enum { ATTR_NULL=0 , ATTR_REVERSE=1 , ATTR_UNDERLINE=2, ATTR_BOLD=4, ATTR_GFX=… | |
-enum { CURSOR_UP, CURSOR_DOWN, CURSOR_LEFT, CURSOR_RIGHT, CURSOR_HIDE, CURSOR_… | |
- CURSOR_SAVE, CURSOR_LOAD }; | |
+enum { CURSOR_UP, CURSOR_DOWN, CURSOR_LEFT, CURSOR_RIGHT, CURSOR_HIDE = 1, | |
+ CURSOR_DRAW = 0, CURSOR_SAVE, CURSOR_LOAD }; | |
enum { GLYPH_SET=1, GLYPH_DIRTY=2 }; | |
enum { MODE_WRAP=1, MODE_INSERT=2, MODE_APPKEYPAD=4 }; | |
enum { ESC_START=1, ESC_CSI=2, ESC_OSC=4, ESC_TITLE=8, ESC_ALTCHARSET=16 }; | |
t@@ -711,7 +711,7 @@ csihandle(void) { | |
case 12: /* att610 -- Stop blinking cursor (IGNORED) */ | |
break; | |
case 25: | |
- term.c.hide = 1; | |
+ term.c.hide = CURSOR_HIDE; | |
break; | |
case 1048: /* XXX: no alt. screen to erase/save */ | |
case 1049: | |
t@@ -760,7 +760,7 @@ csihandle(void) { | |
case 12: /* att610 -- Start blinking cursor (IGNORED) … | |
break; | |
case 25: | |
- term.c.hide = 0; | |
+ term.c.hide = CURSOR_DRAW; | |
break; | |
case 1048: | |
case 1049: /* XXX: no alt. screen to erase/save */ | |
t@@ -1166,8 +1166,7 @@ draw(int dummy) { | |
if(term.line[y][x].state & GLYPH_SET) | |
xdrawc(x, y, term.line[y][x]); | |
- if(!term.c.hide) | |
- xcursor(CURSOR_DRAW); | |
+ xcursor(term.c.hide); | |
XCopyArea(xw.dis, xw.buf, xw.win, dc.gc, 0, 0, xw.bufw, xw.bufh, BORDE… | |
XFlush(xw.dis); | |
} | |
t@@ -1187,19 +1186,23 @@ draw(int redraw_all) { | |
i = ox = 0; | |
for(x = 0; x < term.col; x++) { | |
new = term.line[y][x]; | |
- if(!ATTRCMP(base, new) && i < DRAW_BUF_SIZ) | |
- buf[i++] = new.c; | |
- else { | |
+ if(i > 0 && (!(new.state & GLYPH_SET) || ATTRCMP(base,… | |
+ i >= DRAW_BUF_SIZ)) { | |
xdraws(buf, base, ox, y, i); | |
- buf[0] = new.c; | |
- i = 1; | |
- ox = x; | |
- base = new; | |
+ i = 0; | |
+ } | |
+ if(new.state & GLYPH_SET) { | |
+ if(i == 0) { | |
+ ox = x; | |
+ base = new; | |
+ } | |
+ buf[i++] = new.c; | |
} | |
} | |
- xdraws(buf, base, ox, y, i); | |
+ if(i > 0) | |
+ xdraws(buf, base, ox, y, i); | |
} | |
- xcursor(term.c.hide ? CURSOR_HIDE : CURSOR_DRAW); | |
+ xcursor(term.c.hide); | |
XCopyArea(xw.dis, xw.buf, xw.win, dc.gc, 0, 0, xw.bufw, xw.bufh, BORDE… | |
XFlush(xw.dis); | |
} |