aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-05-07 17:56:22 -0400
committerJesse Luehrs <doy@tozt.net>2016-05-07 17:56:22 -0400
commitc1af3c6dc560c60a82440d5119c9565dafaafe1e (patch)
tree7831709cf4c002597ba3ad31a83229e3aaa86523
parent5cfc4dd06e0fabedacff605667932ae7f0a2a278 (diff)
downloadrunes-c1af3c6dc560c60a82440d5119c9565dafaafe1e.tar.gz
runes-c1af3c6dc560c60a82440d5119c9565dafaafe1e.zip
split up some unnecessary cross-module dependencies
-rw-r--r--src/display.c9
-rw-r--r--src/display.h2
-rw-r--r--src/pty-unix.c11
-rw-r--r--src/pty-unix.h3
-rw-r--r--src/term.c15
-rw-r--r--src/term.h1
-rw-r--r--src/window-xlib.c8
7 files changed, 30 insertions, 19 deletions
diff --git a/src/display.c b/src/display.c
index eda9363..f8b6157 100644
--- a/src/display.c
+++ b/src/display.c
@@ -17,15 +17,12 @@ void runes_display_init(RunesTerm *t)
runes_display_recalculate_font_metrics(t);
}
-void runes_display_set_window_size(RunesTerm *t)
+void runes_display_set_window_size(RunesTerm *t, int width, int height)
{
RunesDisplay *display = &t->display;
- int width, height;
cairo_t *old_cr = NULL;
cairo_surface_t *surface;
- runes_window_backend_get_size(t, &width, &height);
-
if (width == display->xpixel && height == display->ypixel) {
return;
}
@@ -79,10 +76,6 @@ void runes_display_set_window_size(RunesTerm *t)
if (old_cr) {
cairo_destroy(old_cr);
}
-
- vt100_screen_set_window_size(&t->scr,
- height / t->display.fonty, width / t->display.fontx);
- runes_pty_backend_set_window_size(t);
}
void runes_display_draw_screen(RunesTerm *t)
diff --git a/src/display.h b/src/display.h
index c27cb0b..ed25e19 100644
--- a/src/display.h
+++ b/src/display.h
@@ -25,7 +25,7 @@ struct runes_display {
};
void runes_display_init(RunesTerm *t);
-void runes_display_set_window_size(RunesTerm *t);
+void runes_display_set_window_size(RunesTerm *t, int width, int height);
void runes_display_draw_screen(RunesTerm *t);
void runes_display_draw_cursor(RunesTerm *t, cairo_t *cr);
int runes_display_loc_is_selected(RunesTerm *t, struct vt100_loc loc);
diff --git a/src/pty-unix.c b/src/pty-unix.c
index e21b3bb..6cd7715 100644
--- a/src/pty-unix.c
+++ b/src/pty-unix.c
@@ -91,14 +91,15 @@ void runes_pty_backend_init_loop(RunesTerm *t, RunesLoop *loop)
runes_pty_backend_got_data);
}
-void runes_pty_backend_set_window_size(RunesTerm *t)
+void runes_pty_backend_set_window_size(RunesTerm *t, int row, int col,
+ int xpixel, int ypixel)
{
struct winsize size;
- size.ws_row = t->scr.grid->max.row;
- size.ws_col = t->scr.grid->max.col;
- size.ws_xpixel = t->display.xpixel;
- size.ws_ypixel = t->display.ypixel;
+ size.ws_row = row;
+ size.ws_col = col;
+ size.ws_xpixel = xpixel;
+ size.ws_ypixel = ypixel;
ioctl(t->pty.master, TIOCSWINSZ, &size);
}
diff --git a/src/pty-unix.h b/src/pty-unix.h
index 22abaae..1c96ec1 100644
--- a/src/pty-unix.h
+++ b/src/pty-unix.h
@@ -13,7 +13,8 @@ struct runes_pty {
void runes_pty_backend_spawn_subprocess(RunesTerm *t);
void runes_pty_backend_init_loop(RunesTerm *t, RunesLoop *loop);
-void runes_pty_backend_set_window_size(RunesTerm *t);
+void runes_pty_backend_set_window_size(RunesTerm *t, int row, int col,
+ int xpixel, int ypixel);
void runes_pty_backend_write(RunesTerm *t, char *buf, size_t len);
void runes_pty_backend_request_close(RunesTerm *t);
void runes_pty_backend_cleanup(RunesTerm *t);
diff --git a/src/term.c b/src/term.c
index 4b1cad2..b764ad0 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4,6 +4,8 @@
void runes_term_init(RunesTerm *t, RunesLoop *loop, int argc, char *argv[])
{
+ int width, height;
+
memset((void *)t, 0, sizeof(*t));
runes_config_init(t, argc, argv);
@@ -14,13 +16,24 @@ void runes_term_init(RunesTerm *t, RunesLoop *loop, int argc, char *argv[])
vt100_screen_init(&t->scr);
vt100_screen_set_scrollback_length(&t->scr, t->config.scrollback_length);
- runes_display_set_window_size(t);
+
+ runes_window_backend_get_size(t, &width, &height);
+ runes_term_set_window_size(t, width, height);
t->loop = loop;
runes_window_backend_init_loop(t, loop);
runes_pty_backend_init_loop(t, loop);
}
+void runes_term_set_window_size(RunesTerm *t, int xpixel, int ypixel)
+{
+ int row = ypixel / t->display.fonty, col = xpixel / t->display.fontx;
+
+ runes_display_set_window_size(t, xpixel, ypixel);
+ runes_pty_backend_set_window_size(t, row, col, xpixel, ypixel);
+ vt100_screen_set_window_size(&t->scr, row, col);
+}
+
void runes_term_cleanup(RunesTerm *t)
{
runes_config_cleanup(t);
diff --git a/src/term.h b/src/term.h
index e9e6b27..f7a2023 100644
--- a/src/term.h
+++ b/src/term.h
@@ -13,6 +13,7 @@ struct runes_term {
};
void runes_term_init(RunesTerm *t, RunesLoop *loop, int argc, char *argv[]);
+void runes_term_set_window_size(RunesTerm *t, int xpixel, int ypixel);
void runes_term_cleanup(RunesTerm *t);
#endif
diff --git a/src/window-xlib.c b/src/window-xlib.c
index 3182e31..a6c4f66 100644
--- a/src/window-xlib.c
+++ b/src/window-xlib.c
@@ -461,10 +461,12 @@ static void runes_window_backend_resize_window(
}
if (width != t->display.xpixel || height != t->display.ypixel) {
- XResizeWindow(w->dpy, w->w, width - 4, height - 4);
+ int dwidth = width - 4, dheight = height - 4;
+
+ XResizeWindow(w->dpy, w->w, dwidth, dheight);
cairo_xlib_surface_set_size(
- cairo_get_target(w->backend_cr), width - 4, height - 4);
- runes_display_set_window_size(t);
+ cairo_get_target(w->backend_cr), dwidth, dheight);
+ runes_term_set_window_size(t, dwidth, dheight);
runes_window_backend_clear_selection(t);
}
}