diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-04-12 17:12:18 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-04-12 19:17:05 -0400 |
commit | 8ab504fff15de2e47bbc23338c19242c3767b7bd (patch) | |
tree | 046dcff4c3a2e834dd4f4cb341fe9640b2087a35 | |
parent | 1f657eccc059b27d74e6792fdd5f8b66f0bd0fee (diff) | |
download | runes-8ab504fff15de2e47bbc23338c19242c3767b7bd.tar.gz runes-8ab504fff15de2e47bbc23338c19242c3767b7bd.zip |
also store these on the term object
it'll make it easier to see when they actually change, because the
events we watch for often come after the change already happens
-rw-r--r-- | display.c | 27 | ||||
-rw-r--r-- | display.h | 2 | ||||
-rw-r--r-- | pty-unix.c | 10 | ||||
-rw-r--r-- | term.h | 5 |
4 files changed, 21 insertions, 23 deletions
@@ -9,9 +9,11 @@ static cairo_scaled_font_t *runes_display_make_font(RunesTerm *t); void runes_display_init(RunesTerm *t) { int x, y; + double fontx, fonty, ascent; t->backend_cr = cairo_create(runes_window_backend_surface_create(t)); runes_window_backend_get_size(t, &x, &y); + t->cr = cairo_create( cairo_surface_create_similar_image( cairo_get_target(t->backend_cr), CAIRO_FORMAT_RGB24, x, y)); @@ -45,17 +47,14 @@ void runes_display_init(RunesTerm *t) runes_display_move_to(t, 0, 0); - runes_pty_backend_set_window_size(t); -} + t->xpixel = x; + t->ypixel = y; -void runes_display_get_term_size( - RunesTerm *t, int *row, int *col, int *xpixel, int *ypixel) -{ - double fontx, fonty, ascent; - runes_window_backend_get_size(t, xpixel, ypixel); runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent); - *row = (int)(*ypixel / fonty); - *col = (int)(*xpixel / fontx); + t->rows = t->ypixel / fonty; + t->cols = t->xpixel / fontx; + + runes_pty_backend_set_window_size(t); } /* note: this uses the backend cairo context because it should be redrawn every @@ -154,7 +153,6 @@ void runes_display_clear_screen_forward(RunesTerm *t) { double x, y; double fontx, fonty, ascent; - int row, col, xpixel, ypixel; runes_display_kill_line_forward(t); @@ -162,9 +160,10 @@ void runes_display_clear_screen_forward(RunesTerm *t) cairo_set_source(t->cr, t->bgcolor); cairo_get_current_point(t->cr, &x, &y); runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent); - runes_display_get_term_size(t, &row, &col, &xpixel, &ypixel); cairo_rectangle( - t->cr, 0, y - ascent + fonty, xpixel, ypixel - y + ascent - fonty); + t->cr, + 0, y - ascent + fonty, + t->xpixel, t->ypixel - y + ascent - fonty); cairo_fill(t->cr); runes_window_backend_flush(t); cairo_restore(t->cr); @@ -176,14 +175,12 @@ void runes_display_kill_line_forward(RunesTerm *t) { double x, y; double fontx, fonty, ascent; - int row, col, xpixel, ypixel; cairo_save(t->cr); cairo_set_source(t->cr, t->bgcolor); cairo_get_current_point(t->cr, &x, &y); runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent); - runes_display_get_term_size(t, &row, &col, &xpixel, &ypixel); - cairo_rectangle(t->cr, x, y - ascent, xpixel - x, fonty); + cairo_rectangle(t->cr, x, y - ascent, t->xpixel - x, fonty); cairo_fill(t->cr); runes_window_backend_flush(t); cairo_restore(t->cr); @@ -2,8 +2,6 @@ #define _RUNES_DISPLAY_H void runes_display_init(RunesTerm *t); -void runes_display_get_term_size( - RunesTerm *t, int *row, int *col, int *xpixel, int *ypixel); void runes_display_draw_cursor(RunesTerm *t); void runes_display_move_to(RunesTerm *t, int row, int col); void runes_display_show_string(RunesTerm *t, char *buf, size_t len); @@ -54,13 +54,11 @@ void runes_pty_backend_init(RunesTerm *t) void runes_pty_backend_set_window_size(RunesTerm *t) { struct winsize size; - int row, col, xpixel, ypixel; - runes_display_get_term_size(t, &row, &col, &xpixel, &ypixel); - size.ws_row = row; - size.ws_col = col; - size.ws_xpixel = xpixel; - size.ws_ypixel = ypixel; + size.ws_row = t->rows; + size.ws_col = t->cols; + size.ws_xpixel = t->xpixel; + size.ws_ypixel = t->ypixel; ioctl(t->pty.master, TIOCSWINSZ, &size); } @@ -25,6 +25,11 @@ struct runes_term { int row; int col; + + int rows; + int cols; + int xpixel; + int ypixel; }; void runes_term_init(RunesTerm *t, int argc, char *argv[]); |