From 1eb7ad1b73de1d61587a892efb4b10da02ae1537 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Sun, 22 Sep 2002 02:05:47 +0000 Subject: 2002-09-22 Marcus Brinkmann * vcons-refresh.c (cons_vcons_refresh): Take VCONS->scrolling into account. --- libcons/ChangeLog | 5 +++++ libcons/vcons-refresh.c | 34 ++++++++++++++++++++-------------- 2 files changed, 25 insertions(+), 14 deletions(-) (limited to 'libcons') diff --git a/libcons/ChangeLog b/libcons/ChangeLog index 5a34bd41..27133687 100644 --- a/libcons/ChangeLog +++ b/libcons/ChangeLog @@ -1,3 +1,8 @@ +2002-09-22 Marcus Brinkmann + + * vcons-refresh.c (cons_vcons_refresh): Take VCONS->scrolling into + account. + 2002-09-17 Marcus Brinkmann * opts-std-startup.c (OPT_NO_JUMP_DOWN_ON_INPUT): New macro. diff --git a/libcons/vcons-refresh.c b/libcons/vcons-refresh.c index 7851618a..ec899a91 100644 --- a/libcons/vcons-refresh.c +++ b/libcons/vcons-refresh.c @@ -27,6 +27,7 @@ void cons_vcons_refresh (vcons_t vcons) { + uint32_t start; vcons->state.screen.cur_line = vcons->display->screen.cur_line; vcons->state.screen.scr_lines = vcons->display->screen.scr_lines; vcons->state.cursor.col = vcons->display->cursor.col; @@ -37,32 +38,37 @@ cons_vcons_refresh (vcons_t vcons) vcons->state.flags = vcons->display->flags; vcons->state.changes.written = vcons->display->changes.written; + if (vcons->state.screen.scr_lines < vcons->scrolling) + vcons->scrolling = vcons->scrolling; + cons_vcons_clear (vcons, vcons->state.screen.width * vcons->state.screen.height, 0, 0); + + if (vcons->state.screen.cur_line >= vcons->scrolling) + start = vcons->state.screen.cur_line - vcons->scrolling; + else + start = (UINT32_MAX + - (vcons->scrolling - vcons->state.screen.cur_line)) + 1; + start %= vcons->state.screen.lines; + cons_vcons_write (vcons, vcons->state.screen.matrix - + (vcons->state.screen.cur_line % vcons->state.screen.lines) - * vcons->state.screen.width, - ((vcons->state.screen.lines - - (vcons->state.screen.cur_line % vcons->state.screen.lines) + + start * vcons->state.screen.width, + ((vcons->state.screen.lines - start < vcons->state.screen.height) - ? vcons->state.screen.lines - - (vcons->state.screen.cur_line % vcons->state.screen.lines) + ? vcons->state.screen.lines - start : vcons->state.screen.height) * vcons->state.screen.width, 0, 0); - if (vcons->state.screen.lines - - (vcons->state.screen.cur_line % vcons->state.screen.lines) - < vcons->state.screen.height) + if (vcons->state.screen.lines - start < vcons->state.screen.height) cons_vcons_write (vcons, vcons->state.screen.matrix, vcons->state.screen.height * vcons->state.screen.width - - (vcons->state.screen.lines - - (vcons->state.screen.cur_line % vcons->state.screen.lines)) + - (vcons->state.screen.lines - start) * vcons->state.screen.width, 0, - vcons->state.screen.lines - - (vcons->state.screen.cur_line % vcons->state.screen.lines)); + vcons->state.screen.lines - start); cons_vcons_set_cursor_pos (vcons, vcons->state.cursor.col, vcons->state.cursor.row); cons_vcons_set_cursor_status (vcons, vcons->state.cursor.status); - cons_vcons_set_scroll_lock (vcons, vcons->state.flags & CONS_FLAGS_SCROLL_LOCK); + cons_vcons_set_scroll_lock (vcons, vcons->state.flags + & CONS_FLAGS_SCROLL_LOCK); cons_vcons_update (vcons); } -- cgit v1.2.3