]> git.mdlowis.com Git - projs/tide.git/commitdiff
finished implementing main scrolling logic
authorMichael D. Lowis <mike.lowis@gentex.com>
Fri, 20 Apr 2018 17:06:45 +0000 (13:06 -0400)
committerMichael D. Lowis <mike.lowis@gentex.com>
Fri, 20 Apr 2018 17:06:45 +0000 (13:06 -0400)
lib/config.c
lib/view.c
lib/x11.c

index 1681afa8730e06ab2f8474371651da44b978b679..ce4f634098f4bd5e5f3d1686ad6c7766fe650a0c 100644 (file)
@@ -22,7 +22,7 @@ int /* Integer config options */
     LineSpacing = LNSPACE,
     Timeout = 50,
     TabWidth = 4,
-    ScrollBy = 1,
+    ScrollBy = 2,
     ClickTime = 500,
     MaxScanDist = 0,
     Syntax = ON,
index 2d9756c37c2b76a0fe7a389c5da64a8d1faa2057..54e2c9ea37b03a771ff1cea1af398f89f013a7c0 100644 (file)
@@ -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)));
index 6de77f589caf321a5bd39a3bf77cf0012753971f..535dcdfca215401450df6c96a1782094999a886a 100644 (file)
--- 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;
     }
 }