tfaster resizing. - st - [fork] customized build of st, the simple terminal | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 4db3df312ada9d92564d5580fb4e67f7704efff8 | |
parent e8c13ebe8001a7870a70b698d8b8fa80b7c90fd3 | |
Author: Aurélien Aptel <[email protected]> | |
Date: Thu, 26 Aug 2010 21:37:12 +0200 | |
faster resizing. | |
Diffstat: | |
M st.c | 21 +++++++++------------ | |
1 file changed, 9 insertions(+), 12 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -1001,23 +1001,21 @@ tputs(char *s, int len) { | |
void | |
tresize(int col, int row) { | |
int i; | |
- Line *line; | |
int minrow = MIN(row, term.row); | |
int mincol = MIN(col, term.col); | |
if(col < 1 || row < 1) | |
return; | |
- /* alloc */ | |
- line = calloc(row, sizeof(Line)); | |
- for(i = 0 ; i < row; i++) | |
- line[i] = calloc(col, sizeof(Glyph)); | |
- /* copy */ | |
- for(i = 0 ; i < minrow; i++) | |
- memcpy(line[i], term.line[i], mincol * sizeof(Glyph)); | |
- /* free */ | |
- for(i = 0; i < term.row; i++) | |
+ | |
+ for(i = row; i < term.row; i++) | |
free(term.line[i]); | |
- free(term.line); | |
+ term.line = realloc(term.line, row * sizeof(Line)); | |
+ for(i = 0; i < minrow; i++) { | |
+ term.line[i] = realloc(term.line[i], col * sizeof(Glyph)); | |
+ memset(term.line[i] + mincol, 0, (col - mincol) * sizeof(Glyph… | |
+ } | |
+ for(/* i == minrow */; i < row; i++) | |
+ term.line[i] = calloc(col, sizeof(Glyph)); | |
LIMIT(term.c.x, 0, col-1); | |
LIMIT(term.c.y, 0, row-1); | |
t@@ -1025,7 +1023,6 @@ tresize(int col, int row) { | |
LIMIT(term.bot, 0, row-1); | |
term.bot = row-1; | |
- term.line = line; | |
term.col = col, term.row = row; | |
} | |