You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.9 KiB
64 lines
1.9 KiB
From 30086e504c8a5389b96b72b81ac8dbefe19e0cf1 Mon Sep 17 00:00:00 2001
|
|
From: nicm <nicm>
|
|
Date: Wed, 5 Oct 2016 22:00:29 +0000
|
|
Subject: [PATCH] screen_write_copy tried to be clever and clear the line if it
|
|
reached the end of the source, but it was wrong and causes problems that are
|
|
only showing up now we are more aggressive about skipping redundant screen
|
|
updates. Remove the optimization entirely as more trouble than it is worth to
|
|
fix (and it'll have to go when BCE is done anyway).
|
|
|
|
---
|
|
screen-write.c | 34 +++++++---------------------------
|
|
1 file changed, 7 insertions(+), 27 deletions(-)
|
|
|
|
diff --git a/screen-write.c b/screen-write.c
|
|
index 3977517..3a1fc8c 100644
|
|
--- a/screen-write.c
|
|
+++ b/screen-write.c
|
|
@@ -394,38 +394,18 @@ screen_write_copy(struct screen_write_ctx *ctx, struct screen *src, u_int px,
|
|
{
|
|
struct screen *s = ctx->s;
|
|
struct grid *gd = src->grid;
|
|
- struct grid_line *gl;
|
|
struct grid_cell gc;
|
|
- u_int xx, yy, cx, cy, ax, bx;
|
|
+ u_int xx, yy, cx, cy;
|
|
|
|
cx = s->cx;
|
|
cy = s->cy;
|
|
+
|
|
for (yy = py; yy < py + ny; yy++) {
|
|
- gl = &gd->linedata[yy];
|
|
- if (yy < gd->hsize + gd->sy) {
|
|
- /*
|
|
- * Find start and end position and copy between
|
|
- * them. Limit to the real end of the line then use a
|
|
- * clear EOL only if copying to the end, otherwise
|
|
- * could overwrite whatever is there already.
|
|
- */
|
|
- if (px > gl->cellsize)
|
|
- ax = gl->cellsize;
|
|
- else
|
|
- ax = px;
|
|
- if (px + nx == gd->sx && px + nx > gl->cellsize)
|
|
- bx = gl->cellsize;
|
|
- else
|
|
- bx = px + nx;
|
|
-
|
|
- for (xx = ax; xx < bx; xx++) {
|
|
- grid_get_cell(gd, xx, yy, &gc);
|
|
- screen_write_cell(ctx, &gc);
|
|
- }
|
|
- if (px + nx == gd->sx && px + nx > gl->cellsize)
|
|
- screen_write_clearendofline(ctx);
|
|
- } else
|
|
- screen_write_clearline(ctx);
|
|
+ for (xx = px; xx < px + nx; xx++) {
|
|
+ grid_get_cell(gd, xx, yy, &gc);
|
|
+ screen_write_cell(ctx, &gc);
|
|
+ }
|
|
+
|
|
cy++;
|
|
screen_write_cursormove(ctx, cx, cy);
|
|
}
|