aboutsummaryrefslogtreecommitdiffstats
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
parent9b6181449b5e56ae13ef7ef51e5678e5db1e1ea6 (diff)
downloadrunes-d78ae64f0682a4aef09e9ff77e8748af9b2380b9.tar.gz
runes-d78ae64f0682a4aef09e9ff77e8748af9b2380b9.zip
refactor
-rw-r--r--src/display.c8
-rw-r--r--src/pty-unix.c4
-rw-r--r--src/screen.h2
-rw-r--r--src/window-xlib.c37
-rw-r--r--src/window-xlib.h2
5 files changed, 33 insertions, 20 deletions
diff --git a/src/display.c b/src/display.c
index 95c13e8..7c8d063 100644
--- a/src/display.c
+++ b/src/display.c
@@ -120,7 +120,7 @@ void runes_display_draw_cursor(RunesTerm *t, cairo_t *cr)
cairo_rectangle(
cr,
col * t->fontx + 0.5,
- (row + t->scr.row_visible_offset) * t->fonty + 0.5,
+ (row + t->w.row_visible_offset) * t->fonty + 0.5,
t->fontx - 1, t->fonty - 1);
cairo_stroke(cr);
}
@@ -130,13 +130,13 @@ void runes_display_draw_cursor(RunesTerm *t, cairo_t *cr)
cairo_rectangle(
cr,
col * t->fontx,
- (row + t->scr.row_visible_offset) * t->fonty,
+ (row + t->w.row_visible_offset) * t->fonty,
t->fontx, t->fonty);
cairo_fill(cr);
runes_display_draw_glyph(
t, cr, t->config.bgdefault, cell->attrs,
cell->contents, cell->len,
- row + t->scr.row_visible_offset, col);
+ row + t->w.row_visible_offset, col);
}
cairo_restore(cr);
}
@@ -183,7 +183,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.grid->rows[row + t->scr.grid->row_top - t->scr.row_visible_offset].cells[col];
+ struct runes_cell *cell = &t->scr.grid->rows[row + t->scr.grid->row_top - t->w.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/pty-unix.c b/src/pty-unix.c
index 3faeb7f..59636e7 100644
--- a/src/pty-unix.c
+++ b/src/pty-unix.c
@@ -109,8 +109,8 @@ void runes_pty_backend_set_window_size(RunesTerm *t)
void runes_pty_backend_write(RunesTerm *t, char *buf, size_t len)
{
write(t->pty.master, buf, len);
- if (t->scr.row_visible_offset != 0) {
- t->scr.row_visible_offset = 0;
+ if (t->w.row_visible_offset != 0) {
+ t->w.row_visible_offset = 0;
t->scr.dirty = 1;
runes_window_backend_request_flush(t);
}
diff --git a/src/screen.h b/src/screen.h
index b18d2b5..3132e8a 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -81,8 +81,6 @@ struct runes_screen {
char *icon_name;
size_t icon_name_len;
- int row_visible_offset;
-
struct runes_cell_attrs attrs;
unsigned char hide_cursor: 1;
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;
diff --git a/src/window-xlib.h b/src/window-xlib.h
index 123c12a..1989cfd 100644
--- a/src/window-xlib.h
+++ b/src/window-xlib.h
@@ -25,6 +25,8 @@ struct runes_window {
cairo_t *backend_cr;
+ int row_visible_offset;
+
Atom atoms[RUNES_NUM_ATOMS];
};