diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-04-14 19:44:41 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-04-14 19:44:41 -0400 |
commit | 27d4720d7861be2fcc1c35ad4b6fd7a8741d31f6 (patch) | |
tree | 5b229785d23f929dd0ee21d54536e0559d8e312b /display.c | |
parent | 5250854f859b516712e6990d7a9a31bceefaad9e (diff) | |
download | runes-27d4720d7861be2fcc1c35ad4b6fd7a8741d31f6.tar.gz runes-27d4720d7861be2fcc1c35ad4b6fd7a8741d31f6.zip |
implement text scrolling off the bottom of the screen
Diffstat (limited to 'display.c')
-rw-r--r-- | display.c | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -3,6 +3,7 @@ #include "runes.h" static cairo_scaled_font_t *runes_display_make_font(RunesTerm *t); +static void runes_display_scroll_down(RunesTerm *t, int rows); void runes_display_init(RunesTerm *t) { @@ -144,13 +145,19 @@ void runes_display_focus_out(RunesTerm *t) void runes_display_move_to(RunesTerm *t, int row, int col) { double fontx, fonty, ascent; + int scroll = row - t->rows + 1; t->row = row; t->col = col; runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent); - cairo_move_to(t->cr, col * fontx, row * fonty + ascent); + if (scroll > 0) { + runes_display_scroll_down(t, scroll); + t->row = t->rows - 1; + } + + cairo_move_to(t->cr, t->col * fontx, t->row * fonty + ascent); } void runes_display_show_string(RunesTerm *t, char *buf, size_t len) @@ -378,3 +385,20 @@ static cairo_scaled_font_t *runes_display_make_font(RunesTerm *t) return cairo_scaled_font_create( font_face, &font_matrix, &ctm, cairo_font_options_create()); } + +static void runes_display_scroll_down(RunesTerm *t, int rows) +{ + double fontx, fonty, ascent; + + runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent); + + cairo_save(t->cr); + cairo_set_source_surface( + t->cr, cairo_get_target(t->cr), 0.0, -rows * fonty); + cairo_paint(t->cr); + cairo_set_source(t->cr, t->colors[0]); + cairo_rectangle( + t->cr, 0.0, t->ypixel - rows * fonty, t->xpixel, rows * fonty); + cairo_fill(t->cr); + cairo_restore(t->cr); +} |