From: Michael D. Lowis Date: Tue, 30 May 2017 01:55:33 +0000 (-0400) Subject: page-up/dn testing X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=218d2033da394e271f6b50c19033a62ec351643b;p=projs%2Ftide.git page-up/dn testing --- diff --git a/lib/view.c b/lib/view.c index a47ea03..4efb699 100644 --- a/lib/view.c +++ b/lib/view.c @@ -229,13 +229,8 @@ void view_resize(View* view, size_t nrows, size_t ncols) { view->ncols = ncols; } -void view_update(View* view, size_t* csrx, size_t* csry) { +static void find_cursor(View* view, size_t* csrx, size_t* csry) { size_t csr = view->selection.end; - /* scroll the view and reflow the screen lines */ - reflow(view); - if (view->sync_needed) - view_scrollto(view, csr); - /* find the cursor on the new screen */ for (size_t y = 0; y < view->nrows; y++) { size_t start = view->rows[y]->off; size_t end = view->rows[y]->off + view->rows[y]->rlen - 1; @@ -253,6 +248,15 @@ void view_update(View* view, size_t* csrx, size_t* csry) { } } +void view_update(View* view, size_t* csrx, size_t* csry) { + size_t csr = view->selection.end; + /* scroll the view and reflow the screen lines */ + reflow(view); + if (view->sync_needed) + view_scrollto(view, csr); + find_cursor(view, csrx, csry); +} + Row* view_getrow(View* view, size_t row) { return (row < view->nrows ? view->rows[row] : NULL); } @@ -564,8 +568,18 @@ void view_scroll(View* view, int move) { } void view_scrollpage(View* view, int move) { + size_t col = SIZE_MAX, row = SIZE_MAX; + find_cursor(view, &col, &row); move = (move < 0 ? -1 : 1) * view->nrows; view_scroll(view, move); + size_t off = (move == UP ? view->rows[0]->off : view->rows[view->nrows-1]->off); + if (row != SIZE_MAX && col != SIZE_MAX) { + off = view->rows[row]->off + col; + if (col >= view->rows[row]->rlen) + off = view->rows[row]->off + view->rows[row]->rlen - 1; + } + view_jumpto(view, false, off); + view->sync_needed = false; } void view_indent(View* view, int dir) {