aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-04-12 17:12:18 -0400
committerJesse Luehrs <doy@tozt.net>2014-04-12 19:17:05 -0400
commit8ab504fff15de2e47bbc23338c19242c3767b7bd (patch)
tree046dcff4c3a2e834dd4f4cb341fe9640b2087a35
parent1f657eccc059b27d74e6792fdd5f8b66f0bd0fee (diff)
downloadrunes-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.c27
-rw-r--r--display.h2
-rw-r--r--pty-unix.c10
-rw-r--r--term.h5
4 files changed, 21 insertions, 23 deletions
diff --git a/display.c b/display.c
index 94a0cfc..5b65c98 100644
--- a/display.c
+++ b/display.c
@@ -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);
diff --git a/display.h b/display.h
index 9fc535a..44e2c8b 100644
--- a/display.h
+++ b/display.h
@@ -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);
diff --git a/pty-unix.c b/pty-unix.c
index aadd661..0c38e9c 100644
--- a/pty-unix.c
+++ b/pty-unix.c
@@ -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);
}
diff --git a/term.h b/term.h
index 18a2e65..03706c5 100644
--- a/term.h
+++ b/term.h
@@ -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[]);