From 26cb01744c08127b9e895c2f9fa9710cfe2faeac Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Wed, 16 Nov 2016 09:58:01 -0500 Subject: [PATCH] Fixed scrolling and view sizing issue --- config.mk | 2 +- libedit/view.c | 20 +++++++++++++------- xedit.c | 16 +++++++++++----- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/config.mk b/config.mk index b9996f6..4dac5a5 100644 --- a/config.mk +++ b/config.mk @@ -2,7 +2,7 @@ # Compiler Setup CC = c99 -CFLAGS = -O0 $(INCS) +CFLAGS = -g -O0 $(INCS) # Linker Setup LD = $(CC) diff --git a/libedit/view.c b/libedit/view.c index 856f7aa..3b5f8ff 100644 --- a/libedit/view.c +++ b/libedit/view.c @@ -98,12 +98,17 @@ static void scroll_up(View* view, unsigned csr, unsigned first) { static void scroll_dn(View* view, unsigned csr, unsigned last) { while (csr > last) { /* delete the first row and shift the others */ - free(view->rows[0]); - memmove(&view->rows[0], &view->rows[1], sizeof(Row*) * (view->nrows-1)); - view->rows[view->nrows-1] = calloc(1, sizeof(Row) + (view->ncols * sizeof(UGlyph))); - view->rows[view->nrows-1]->off = (view->rows[view->nrows-2]->off + view->rows[view->nrows-2]->rlen); - /* fill in row content */ - fill_row(view, view->nrows-1, view->rows[view->nrows-1]->off); + if (view->nrows > 1) { + free(view->rows[0]); + memmove(&view->rows[0], &view->rows[1], sizeof(Row*) * (view->nrows-1)); + view->rows[view->nrows-1] = calloc(1, sizeof(Row) + (view->ncols * sizeof(UGlyph))); + view->rows[view->nrows-1]->off = (view->rows[view->nrows-2]->off + view->rows[view->nrows-2]->rlen); + /* fill in row content */ + fill_row(view, view->nrows-1, view->rows[view->nrows-1]->off); + } else { + view->rows[0]->off += view->rows[0]->rlen; + fill_row(view, 0, view->rows[0]->off); + } last = view->rows[view->nrows-1]->off + view->rows[view->nrows-1]->rlen - 1; } } @@ -171,6 +176,7 @@ void view_resize(View* view, size_t nrows, size_t ncols) { 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 */ + sync_view(view, view->selection.end); reflow(view); /* find the cursor on the new screen */ for (size_t y = 0; y < view->nrows; y++) { @@ -236,7 +242,7 @@ void view_insert(View* view, Rune rune) { } view->selection.beg = view->selection.end; view->selection.col = buf_getcol(&(view->buffer), view->selection.end); - //sync_view(view, view->selection.end); + sync_view(view, view->selection.end); } void view_delete(View* view) { diff --git a/xedit.c b/xedit.c index ede08da..bac9c00 100644 --- a/xedit.c +++ b/xedit.c @@ -92,23 +92,29 @@ static void mouse_left(enum RegionId id, size_t count, size_t row, size_t col) { if (count == 1) { view_setcursor(getview(id), row, col); } else if (count == 2) { + puts("select"); //view_select(getview(id), row, col); } else if (count == 3) { + puts("select bigword"); //view_selword(getview(id), row, col); } } static void mouse_middle(enum RegionId id, size_t count, size_t row, size_t col) { - //if (MouseBtns[MOUSE_BTN_LEFT].pressed) + if (MouseBtns[MOUSE_BTN_LEFT].pressed) + puts("cut"); // cut(); - //else + else + puts("exec"); // view_exec(getview(id), row, col); } static void mouse_right(enum RegionId id, size_t count, size_t row, size_t col) { - //if (MouseBtns[MOUSE_BTN_LEFT].pressed) + if (MouseBtns[MOUSE_BTN_LEFT].pressed) + puts("paste"); // paste(); - //else + else + puts("find"); // view_find(getview(id), row, col); } @@ -300,7 +306,7 @@ static void layout(int width, int height) { view_resize(getview(TAGS), tagrows, Regions[TAGS].width / fwidth); /* Place the edit region relative to status */ Regions[EDIT].y = 5 + Regions[TAGS].y + Regions[TAGS].height; - Regions[EDIT].height = fheight * ((height - Regions[EDIT].y - 5) / 4); + Regions[EDIT].height = (height - Regions[EDIT].y - 5); view_resize(getview(EDIT), Regions[EDIT].height / fheight, Regions[EDIT].width / fwidth); } -- 2.52.0