From a950d1a4ccd94b937212d40707f346fe937a3a69 Mon Sep 17 00:00:00 2001 From: ketmar Date: Fri, 11 May 2012 05:12:34 +0300 Subject: [PATCH] copy the whole screen if it is dirty --- src/sterm.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/sterm.c b/src/sterm.c index f109772..742f26a 100644 --- a/src/sterm.c +++ b/src/sterm.c @@ -4258,7 +4258,7 @@ static void drawcmdline (int scry) { } -static void drawline (int x1, int x2, int scry, int lineno) { +static void drawline (int x1, int x2, int scry, int lineno, int dontcopy) { //fprintf(stderr, "%d: drawline: x1=%d; x2=%d; scry=%d; row:%d; lineno=%d\n", mclock_ticks(), x1, x2, scry, term->row, lineno); if (scry < 0 || scry >= term->row) return; if (scry == term->row-1 && term->cmdMode != CMDMODE_NONE) { drawcmdline(scry); return; } @@ -4317,12 +4317,14 @@ static void drawline (int x1, int x2, int scry, int lineno) { if (ib > 0) xdraws(term->drawbuf, &base, ox, scry, ic, ib); //xcopy(0, scry, term->col, 1); //if (term->c.y == lineno && term->c.x >= stx && term->c.x < ex) xdrawcursor(); - xcopy(stx, scry, ex-stx, 1); + if (!dontcopy) xcopy(stx, scry, ex-stx, 1); } } static void drawregion (int x1, int y1, int x2, int y2, int forced) { + int fulldirty = 0; + // if (!forced && (xw.state&WIN_VISIBLE) == 0) { //dlogf("invisible"); lastDrawTime = term->lastDrawTime = 1; @@ -4330,18 +4332,25 @@ static void drawregion (int x1, int y1, int x2, int y2, int forced) { return; } // + if (y1 == 0 && y2 == term->row) { + fulldirty = 1; + for (int y = 0; y < y2; ++y) if (!(term->dirty[y]&0x02)) { fulldirty = 0; break; } + } + // if (term->topline < term->row) { - for (int y = y1; y < y2; ++y) drawline(x1, x2, y+term->topline, y); + for (int y = y1; y < y2; ++y) drawline(x1, x2, y+term->topline, y, fulldirty); } if (term->topline > 0) { int scry = MIN(term->topline, term->row), y = term->row; // + fulldirty = 1; if (term->topline >= term->row) y += term->topline-term->row; while (--scry >= 0) { - drawline(0, term->col, scry, y); + drawline(0, term->col, scry, y, 0); ++y; } } + if (fulldirty) xcopy(0, 0, term->col, term->row); xdrawcursor(); xdrawTabBar(); //XFlush(xw.dpy); -- 2.11.4.GIT