From bf64776864715f5fd707883625b40e61343e3df2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 9 Apr 2014 22:33:51 -0400 Subject: handle setting the terminal size properly --- display.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to 'display.c') diff --git a/display.c b/display.c index 9f3a756..c9fbad9 100644 --- a/display.c +++ b/display.c @@ -4,14 +4,43 @@ void runes_display_init(RunesTerm *t) { + cairo_font_extents_t extents; + cairo_select_font_face(t->cr, "monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size(t->cr, 14.0); cairo_set_source_rgb(t->cr, 0.0, 0.0, 1.0); - cairo_move_to(t->cr, 0.0, 14.0); + + cairo_font_extents(t->cr, &extents); + cairo_move_to(t->cr, 0.0, extents.ascent); + + runes_pty_backend_set_window_size(t); +} + +static void runes_display_get_font_dimensions(RunesTerm *t, double *fontx, double *fonty) +{ + cairo_font_extents_t extents; + + cairo_font_extents(t->cr, &extents); + + *fontx = extents.max_x_advance; + *fonty = extents.height; +} + +void runes_display_get_term_size(RunesTerm *t, int *row, int *col, int *xpixel, int *ypixel) +{ + double fontx, fonty; + runes_window_backend_get_size(t, xpixel, ypixel); + runes_display_get_font_dimensions(t, &fontx, &fonty); + *row = (int)(*ypixel / fonty); + *col = (int)(*xpixel / fontx); } void runes_display_glyph(RunesTerm *t, char *buf, size_t len) { + cairo_font_extents_t extents; + + cairo_font_extents(t->cr, &extents); + if (len) { char *nl; buf[len] = '\0'; @@ -21,7 +50,7 @@ void runes_display_glyph(RunesTerm *t, char *buf, size_t len) cairo_show_text(t->cr, buf); buf = nl + 1; cairo_get_current_point(t->cr, &x, &y); - cairo_move_to(t->cr, 0.0, y + 14.0); + cairo_move_to(t->cr, 0.0, y + extents.height); } cairo_show_text(t->cr, buf); /* we have to flush manually because XNextEvent (which normally handles -- cgit v1.2.3-54-g00ecf