From: Michael D. Lowis Date: Fri, 20 Apr 2018 17:06:45 +0000 (-0400) Subject: finished implementing main scrolling logic X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=7f077446247502e8c52dae2f49133e462df32699;p=projs%2Ftide.git finished implementing main scrolling logic --- diff --git a/lib/config.c b/lib/config.c index 1681afa..ce4f634 100644 --- a/lib/config.c +++ b/lib/config.c @@ -22,7 +22,7 @@ int /* Integer config options */ LineSpacing = LNSPACE, Timeout = 50, TabWidth = 4, - ScrollBy = 1, + ScrollBy = 2, ClickTime = 500, MaxScanDist = 0, Syntax = ON, diff --git a/lib/view.c b/lib/view.c index 2d9756c..54e2c9e 100644 --- a/lib/view.c +++ b/lib/view.c @@ -105,28 +105,31 @@ size_t rune_width(int c, size_t xpos, size_t width) { } static void resize(View* view, size_t width, size_t nrows, size_t off) { + bool first_line_done = false; clear_rows(view); view->width = width; view->nvisible = nrows; view->index = 0; + size_t beg = off; off = buf_bol(&(view->buffer), off); if (off > buf_end(&(view->buffer))) off = buf_end(&(view->buffer)); - bool first_line_done = false; for (size_t i = 0; nrows > 0; i++) { + /* allocate a new row */ view->nrows++; view->rows = realloc(view->rows, sizeof(Row*) * view->nrows); view->rows[view->nrows-1] = calloc(1, sizeof(Row)); view->rows[view->nrows-1]->off = off; - - size_t xpos = 0; - while (xpos < width) { + /* populate the row with characters */ + for (size_t xpos = 0; xpos < width;) { int rune = buf_getrat(&(view->buffer), off); size_t rwidth = rune_width(rune, xpos, width); xpos += rwidth; if (!first_line_done) first_line_done = (rune == '\n'); if (xpos <= width) { + if (beg == off && beg < buf_end(&(view->buffer))) + view->index = i; size_t len = view->rows[view->nrows-1]->len + 1; view->rows[view->nrows-1] = realloc( view->rows[view->nrows-1], sizeof(Row) + (len * sizeof(UGlyph))); diff --git a/lib/x11.c b/lib/x11.c index 6de77f5..535dcdf 100644 --- a/lib/x11.c +++ b/lib/x11.c @@ -246,14 +246,8 @@ static void mouse_click(int btn, bool pressed, int x, int y) { case MouseLeft: mouse_left(Focused, pressed, row, col); break; case MouseMiddle: mouse_middle(Focused, pressed, row, col); break; case MouseRight: mouse_right(Focused, pressed, row, col); break; - case MouseWheelUp: - if (!pressed) return; - view_scroll(win_view(Focused), -ScrollBy); - break; - case MouseWheelDn: - if (!pressed) return; - view_scroll(win_view(Focused), +ScrollBy); - break; + case MouseWheelUp: view_scroll(win_view(Focused), -ScrollBy); break; + case MouseWheelDn: view_scroll(win_view(Focused), +ScrollBy); break; } }