diff options
-rw-r--r-- | src/display.c | 2 | ||||
-rw-r--r-- | src/screen.h | 1 | ||||
-rw-r--r-- | src/window-xlib.c | 14 |
3 files changed, 16 insertions, 1 deletions
diff --git a/src/display.c b/src/display.c index 185ca7c..8ecce16 100644 --- a/src/display.c +++ b/src/display.c @@ -179,7 +179,7 @@ static void runes_display_recalculate_font_metrics(RunesTerm *t) static int runes_display_draw_cell(RunesTerm *t, int row, int col) { - struct runes_cell *cell = &t->scr.rows[row + t->scr.row_top].cells[col]; + struct runes_cell *cell = &t->scr.rows[row + t->scr.row_top - t->scr.row_visible_offset].cells[col]; cairo_pattern_t *bg = NULL, *fg = NULL; int bg_is_custom = 0, fg_is_custom = 0; diff --git a/src/screen.h b/src/screen.h index 6491af1..b112de5 100644 --- a/src/screen.h +++ b/src/screen.h @@ -74,6 +74,7 @@ struct runes_screen { int row_count; int row_capacity; int row_top; + int row_visible_offset; struct runes_row *rows; struct runes_row *alternate; diff --git a/src/window-xlib.c b/src/window-xlib.c index 8065981..d792cfc 100644 --- a/src/window-xlib.c +++ b/src/window-xlib.c @@ -758,6 +758,20 @@ static int runes_window_backend_handle_builtin_button_press( runes_window_backend_paste(t, e->time); return 1; break; + case Button4: + if (t->scr.row_visible_offset < t->scr.row_count - t->scr.max.row) { + t->scr.row_visible_offset++; + t->scr.dirty = 1; + runes_window_backend_flush(t); + } + break; + case Button5: + if (t->scr.row_visible_offset > 0) { + t->scr.row_visible_offset--; + t->scr.dirty = 1; + runes_window_backend_flush(t); + } + break; default: break; } |