aboutsummaryrefslogtreecommitdiffstats
path: root/src/window-xlib.c
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-05-04 21:35:42 -0400
committerJesse Luehrs <doy@tozt.net>2014-05-04 21:35:42 -0400
commitd78ae64f0682a4aef09e9ff77e8748af9b2380b9 (patch)
treeaaa9aca1f4f9e2f43c8067179ae1e859e9defd0b /src/window-xlib.c
parent9b6181449b5e56ae13ef7ef51e5678e5db1e1ea6 (diff)
downloadrunes-d78ae64f0682a4aef09e9ff77e8748af9b2380b9.tar.gz
runes-d78ae64f0682a4aef09e9ff77e8748af9b2380b9.zip
refactor
Diffstat (limited to 'src/window-xlib.c')
-rw-r--r--src/window-xlib.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/window-xlib.c b/src/window-xlib.c
index 485a3fd..ee4beaa 100644
--- a/src/window-xlib.c
+++ b/src/window-xlib.c
@@ -83,6 +83,7 @@ static Bool runes_window_backend_find_flush_events(
static void runes_window_backend_resize_window(
RunesTerm *t, int width, int height);
static void runes_window_backend_flush(RunesTerm *t);
+static void runes_window_backend_visible_scroll(RunesTerm *t, int count);
static void runes_window_backend_visual_bell(RunesTerm *t);
static void runes_window_backend_reset_visual_bell(uv_timer_t *handle);
static void runes_window_backend_visual_bell_free_handle(uv_handle_t *handle);
@@ -496,6 +497,28 @@ static void runes_window_backend_flush(RunesTerm *t)
cairo_surface_flush(cairo_get_target(w->backend_cr));
}
+static void runes_window_backend_visible_scroll(RunesTerm *t, int count)
+{
+ RunesWindowBackend *w = &t->w;
+ int min = 0, max = t->scr.grid->row_count - t->scr.grid->max.row;
+ int old_offset = w->row_visible_offset;
+
+ w->row_visible_offset += count;
+ if (w->row_visible_offset < min) {
+ w->row_visible_offset = min;
+ }
+ if (w->row_visible_offset > max) {
+ w->row_visible_offset = max;
+ }
+
+ if (w->row_visible_offset == old_offset) {
+ return;
+ }
+
+ t->scr.dirty = 1;
+ runes_window_backend_flush(t);
+}
+
static void runes_window_backend_visual_bell(RunesTerm *t)
{
if (t->config.bell_is_urgent) {
@@ -759,20 +782,10 @@ static int runes_window_backend_handle_builtin_button_press(
return 1;
break;
case Button4:
- t->scr.row_visible_offset += t->config.scroll_lines;
- if (t->scr.row_visible_offset > t->scr.grid->row_count - t->scr.grid->max.row) {
- t->scr.row_visible_offset = t->scr.grid->row_count - t->scr.grid->max.row;
- }
- t->scr.dirty = 1;
- runes_window_backend_flush(t);
+ runes_window_backend_visible_scroll(t, t->config.scroll_lines);
break;
case Button5:
- t->scr.row_visible_offset -= t->config.scroll_lines;
- if (t->scr.row_visible_offset < 0) {
- t->scr.row_visible_offset = 0;
- }
- t->scr.dirty = 1;
- runes_window_backend_flush(t);
+ runes_window_backend_visible_scroll(t, -t->config.scroll_lines);
break;
default:
break;