diff options
author | James Booth <boothj5@gmail.com> | 2012-03-06 01:49:29 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2012-03-06 01:49:29 +0000 |
commit | d407500e6f1d8cdba620c68da13847c3d95b246b (patch) | |
tree | 30d6d093b3344ae0ec33ad5069b9099bd0c46a0c /windows.c | |
parent | 54c43b613c74873e05f40deff102f8b03c6a9c6f (diff) | |
download | profani-tty-d407500e6f1d8cdba620c68da13847c3d95b246b.tar.gz |
Tidied paging
Diffstat (limited to 'windows.c')
-rw-r--r-- | windows.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/windows.c b/windows.c index 82d7035a..aa03244d 100644 --- a/windows.c +++ b/windows.c @@ -320,35 +320,39 @@ void win_page_off(void) void win_handle_page(int *ch) { - if (*ch == KEY_PPAGE) { - int rows, cols; - getmaxyx(stdscr, rows, cols); + int rows, cols, y, x; + getmaxyx(stdscr, rows, cols); + getyx(_wins[_curr_prof_win].win, y, x); - _wins[_curr_prof_win].y_pos = _wins[_curr_prof_win].y_pos - (rows - 4); - if (_wins[_curr_prof_win].y_pos < 0) - _wins[_curr_prof_win].y_pos = 0; + int page_space = rows - 4; + int *page_start = &_wins[_curr_prof_win].y_pos; + + // page up + if (*ch == KEY_PPAGE) { + *page_start -= page_space; + + // went past beginning, show first page + if (*page_start < 0) + *page_start = 0; _wins[_curr_prof_win].paged = 1; dirty = TRUE; - } else if (*ch == KEY_NPAGE) { - int rows, cols, y, x; - getmaxyx(stdscr, rows, cols); - getyx(_wins[_curr_prof_win].win, y, x); - _wins[_curr_prof_win].y_pos = _wins[_curr_prof_win].y_pos + (rows - 4); + // page down + } else if (*ch == KEY_NPAGE) { + *page_start += page_space; // only got half a screen, show full screen - if ((y - _wins[_curr_prof_win].y_pos) < (rows - 4)) - _wins[_curr_prof_win].y_pos = y - (rows - 4); + if ((y - (*page_start)) < page_space) + *page_start = y - page_space; // went past end, show full screen - else if (_wins[_curr_prof_win].y_pos >= y) - _wins[_curr_prof_win].y_pos = y - (rows - 4); + else if (*page_start >= y) + *page_start = y - page_space; _wins[_curr_prof_win].paged = 1; dirty = TRUE; } - } static void _create_windows(void) |