aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/display.c2
-rw-r--r--src/screen.h1
-rw-r--r--src/window-xlib.c14
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;
}