summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Carbonneaux2014-08-28 17:32:41 -0400
committerQuentin Carbonneaux2014-08-28 17:34:08 -0400
commitd1e58cb2608044a0146299e0988fc3119ee58197 (patch)
treecce0f43834b6e1e9ce705c344159eeceaf6a06ec
parent5d0c015aa9c723045e03b32ef8268bae5f4e5860 (diff)
stop overloading rev and use a dirty bit
-rw-r--r--main.c2
-rw-r--r--win.c17
-rw-r--r--win.h3
3 files changed, 12 insertions, 10 deletions
diff --git a/main.c b/main.c
index 07ed5ba..61ffab6 100644
--- a/main.c
+++ b/main.c
@@ -99,7 +99,7 @@ gev(int fd, int flag, void *unused)
continue;
Setcursor:
curwin->cu = pos;
- curwin->rev = 0;
+ curwin->dirty = 1;
}
return 0;
}
diff --git a/win.c b/win.c
index 61a6870..780731b 100644
--- a/win.c
+++ b/win.c
@@ -170,7 +170,7 @@ win_move(W *w, int x, int y)
y = fheight - g->vmargin;
if (w == &tag.win) {
if (y > w->recty)
- tag.owner->rev = 0;
+ tag.owner->dirty = 1;
move(w, w->rectx, y, w->rectw, fheight - y);
return;
}
@@ -241,7 +241,7 @@ win_redraw_frame()
}
draw(w, GPaleYellow);
if (tag.owner == w)
- tag.win.rev = 0;
+ tag.win.dirty = 1;
}
}
if (tag.visible && dirty(&tag.win)) {
@@ -327,7 +327,7 @@ win_tag_toggle(W *w)
{
if (tag.visible) {
tag.visible = 0;
- tag.owner->rev = 0;
+ tag.owner->dirty = 1;
if (w == &tag.win)
return tag.owner;
}
@@ -335,7 +335,7 @@ win_tag_toggle(W *w)
tag.visible = 1;
tag.owner = w;
move(&tag.win, w->rectx, w->recth - w->recth/TagRatio, w->rectw, w->recth/TagRatio);
- w->rev = 0;
+ w->dirty = 1;
return &tag.win;
}
@@ -369,7 +369,8 @@ win_update(W *w)
for (; top<li.len; top++, l++)
w->l[l] = li.sl[(li.beg + top) % RingSize];
}
- w->rev = 0;
+ w->rev = eb_revision(w->eb);
+ w->dirty = 1;
}
/* static functions */
@@ -377,9 +378,9 @@ win_update(W *w)
static int
dirty(W *w)
{
- if (w->rev && w->rev != eb_revision(w->eb))
+ if (w->rev != eb_revision(w->eb))
win_update(w);
- return !w->rev;
+ return w->dirty;
}
/* runewidth - returns the width of a given
@@ -485,7 +486,7 @@ draw(W *w, GColor bg)
if (cw != 0)
g->drawrect(&w->rect, cx, cy, cw, font.height, GXBlack);
g->decorate(&w->rect, w->eb->path && w->eb->frev != eb_revision(w->eb), GGray);
- w->rev = eb_revision(w->eb);
+ w->dirty = 0;
}
/* move - Resize and recompute appearance
diff --git a/win.h b/win.h
index e9c7efc..b6ff637 100644
--- a/win.h
+++ b/win.h
@@ -30,10 +30,11 @@ enum {
struct w {
unsigned l[MaxHeight]; /* line start offsets */
int nl; /* current number of lines */
- unsigned rev; /* on-screen revision or 0 if dirty */
+ unsigned rev; /* buffer revision used for line offsets */
unsigned cu; /* cursor offset */
EBuf *eb; /* underlying buffer object */
GRect rect; /* rectangle on the screen */
+ int dirty; /* force redraw */
};
enum CursorLoc { CTop, CMid, CBot };