diff options
author | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-08-26 21:37:12 +0200 |
---|---|---|
committer | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-08-26 21:37:12 +0200 |
commit | 8a3b1e0938a32b5f186355d81ec67135a0f5d4b2 (patch) | |
tree | 5c1eb097091bdde2b595ba72fe3430880e17850c /st.c | |
parent | 1494bb9f978069fc19d4900ed4d19b0e77fe8110 (diff) | |
download | st-8a3b1e0938a32b5f186355d81ec67135a0f5d4b2.tar.gz st-8a3b1e0938a32b5f186355d81ec67135a0f5d4b2.tar.bz2 |
faster resizing.
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 21 |
1 files changed, 9 insertions, 12 deletions
@@ -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); @@ -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; } |