aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-05-04 18:38:36 -0400
committerJesse Luehrs <doy@tozt.net>2014-05-04 18:38:36 -0400
commit3c4d1c9d43c80abf5a938d1f5416e7a9d4f339dd (patch)
tree90771e9240990c42df0b1c72faee74469c69641b
parent24fba6a5e6371d5e79c63c776fd4d7ee34e57f6f (diff)
downloadrunes-3c4d1c9d43c80abf5a938d1f5416e7a9d4f339dd.tar.gz
runes-3c4d1c9d43c80abf5a938d1f5416e7a9d4f339dd.zip
implement scrolling
-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;
}