From a157202db2d7e28aab124eb4d6966bdbe668d75f Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Fri, 2 Oct 2015 17:34:22 -0700 Subject: Fix bad math in moving the cursor when the window size changes. --- app/src/main/java/de/mud/terminal/VDUBuffer.java | 13 +++++++++---- app/src/main/java/de/mud/terminal/vt320.java | 20 +++++--------------- 2 files changed, 14 insertions(+), 19 deletions(-) (limited to 'app/src') diff --git a/app/src/main/java/de/mud/terminal/VDUBuffer.java b/app/src/main/java/de/mud/terminal/VDUBuffer.java index 93e3ccf..f1d97ea 100644 --- a/app/src/main/java/de/mud/terminal/VDUBuffer.java +++ b/app/src/main/java/de/mud/terminal/VDUBuffer.java @@ -731,6 +731,7 @@ public class VDUBuffer { char cbuf[][]; int abuf[][]; int maxSize = bufSize; + int oldAbsR = screenBase + getCursorRow(); if (w < 1 || h < 1) return; @@ -778,14 +779,18 @@ public class VDUBuffer { int C = getCursorColumn(); if (C < 0) C = 0; - else if (C >= width) - C = width - 1; + else if (C >= w) + C = w - 1; int R = getCursorRow(); + // If the screen size has grown and now there are more rows on the screen, + // slide the cursor down to the end of the text. + if (R + screenBase <= oldAbsR) + R = oldAbsR - screenBase; if (R < 0) R = 0; - else if (R >= height) - R = height - 1; + else if (R >= h) + R = h - 1; setCursorPosition(C, R); diff --git a/app/src/main/java/de/mud/terminal/vt320.java b/app/src/main/java/de/mud/terminal/vt320.java index ab4a90d..dc95bea 100644 --- a/app/src/main/java/de/mud/terminal/vt320.java +++ b/app/src/main/java/de/mud/terminal/vt320.java @@ -162,23 +162,13 @@ public void setScreenSize(int c, int r, boolean broadcast) { super.setScreenSize(c,r,false); - boolean cursorChanged = false; - - // Don't let the cursor go off the screen. - if (C >= c) { - C = c - 1; - cursorChanged = true; - } - + // Don't let the cursor go off the screen. Scroll down if needed. if (R >= r) { - R = r - 1; - cursorChanged = true; - } - - if (cursorChanged) { - setCursorPosition(C, R); - redraw(); + screenBase += R - (r - 1); + setWindowBase(screenBase); } + R = getCursorRow(); + C = getCursorColumn(); if (broadcast) { setWindowSize(c, r); /* broadcast up */ -- cgit v1.2.3