From c1af3c6dc560c60a82440d5119c9565dafaafe1e Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 7 May 2016 17:56:22 -0400 Subject: split up some unnecessary cross-module dependencies --- src/display.c | 9 +-------- src/display.h | 2 +- src/pty-unix.c | 11 ++++++----- src/pty-unix.h | 3 ++- src/term.c | 15 ++++++++++++++- src/term.h | 1 + src/window-xlib.c | 8 +++++--- 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); } } -- cgit v1.2.3