summaryrefslogtreecommitdiffstats
path: root/tty.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2012-03-15 09:10:33 +0000
committerNicholas Marriott <nicm@openbsd.org>2012-03-15 09:10:33 +0000
commit698361ccde262b82ce91c81891b767f6752ebf67 (patch)
tree3ed538626e51d3a98615b9cf633d8c30dfe1819c /tty.c
parent71df37c247a3fcebfd24637410bd4ef41801147c (diff)
Add a helper function for enabling an optimization to make some code
clearer.
Diffstat (limited to 'tty.c')
-rw-r--r--tty.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/tty.c b/tty.c
index 502f2b98..7c54913d 100644
--- a/tty.c
+++ b/tty.c
@@ -502,6 +502,19 @@ tty_emulate_repeat(
}
/*
+ * Is the region large enough to be worth redrawing once later rather than
+ * probably several times now? Currently yes if it is more than 50% of the
+ * pane.
+ */
+int
+tty_large_region(unused struct tty *tty, const struct tty_ctx *ctx)
+{
+ struct window_pane *wp = ctx->wp;
+
+ return (ctx->orlower - ctx->orupper >= screen_size_y(wp->screen) / 2);
+}
+
+/*
* Redraw scroll region using data from screen (already updated). Used when
* CSR not supported, or window is a pane that doesn't take up the full
* width of the terminal.
@@ -514,12 +527,10 @@ tty_redraw_region(struct tty *tty, const struct tty_ctx *ctx)
u_int i;
/*
- * If region is >= 50% of the screen, just schedule a window redraw. In
- * most cases, this is likely to be followed by some more scrolling -
- * without this, the entire pane ends up being redrawn many times which
- * can be much more data.
+ * If region is large, schedule a window redraw. In most cases this is
+ * likely to be followed by some more scrolling.
*/
- if (ctx->orlower - ctx->orupper >= screen_size_y(s) / 2) {
+ if (tty_large_region(tty, ctx)) {
wp->flags |= PANE_REDRAW;
return;
}