diff options
-rw-r--r-- | display.c | 26 | ||||
-rw-r--r-- | display.h | 1 | ||||
-rw-r--r-- | window-xlib.c | 27 |
3 files changed, 26 insertions, 28 deletions
@@ -84,32 +84,6 @@ void runes_display_set_window_size(RunesTerm *t) runes_display_position_cursor(t, t->cr); } -/* note: this uses the backend cairo context because it should be redrawn every - * time, and shouldn't be left behind when it moves */ -void runes_display_draw_cursor(RunesTerm *t) -{ - if (!t->hide_cursor) { - if (t->unfocused) { - double x, y; - - cairo_save(t->backend_cr); - cairo_set_source(t->backend_cr, t->cursorcolor); - cairo_get_current_point(t->cr, &x, &y); - cairo_set_line_width(t->backend_cr, 1); - cairo_rectangle( - t->backend_cr, - x + 0.5, y - t->ascent + 0.5, t->fontx, t->fonty); - cairo_stroke(t->backend_cr); - cairo_restore(t->backend_cr); - runes_display_position_cursor(t, t->backend_cr); - } - else { - runes_display_paint_rectangle( - t, t->backend_cr, t->cursorcolor, t->col, t->row, 1, 1); - } - } -} - void runes_display_focus_in(RunesTerm *t) { t->unfocused = 0; @@ -3,7 +3,6 @@ void runes_display_init(RunesTerm *t); void runes_display_set_window_size(RunesTerm *t); -void runes_display_draw_cursor(RunesTerm *t); void runes_display_focus_in(RunesTerm *t); void runes_display_focus_out(RunesTerm *t); void runes_display_move_to(RunesTerm *t, int row, int col); diff --git a/window-xlib.c b/window-xlib.c index d529c79..c51ffe2 100644 --- a/window-xlib.c +++ b/window-xlib.c @@ -80,6 +80,7 @@ static void runes_window_backend_process_event(uv_work_t *req, int status); static void runes_window_backend_resize_window( RunesTerm *t, int width, int height); static void runes_window_backend_flush(RunesTerm *t); +static void runes_window_backend_draw_cursor(RunesTerm *t); void runes_window_backend_create_window(RunesTerm *t, int argc, char *argv[]) { @@ -437,6 +438,30 @@ static void runes_window_backend_flush(RunesTerm *t) { cairo_set_source_surface(t->backend_cr, cairo_get_target(t->cr), 0.0, 0.0); cairo_paint(t->backend_cr); - runes_display_draw_cursor(t); + runes_window_backend_draw_cursor(t); cairo_surface_flush(cairo_get_target(t->backend_cr)); } + +static void runes_window_backend_draw_cursor(RunesTerm *t) +{ + if (!t->hide_cursor) { + cairo_save(t->backend_cr); + cairo_set_source(t->backend_cr, t->cursorcolor); + if (t->unfocused) { + cairo_set_line_width(t->backend_cr, 1); + cairo_rectangle( + t->backend_cr, + t->col * t->fontx + 0.5, t->row * t->fonty + 0.5, + t->fontx, t->fonty); + cairo_stroke(t->backend_cr); + } + else { + cairo_rectangle( + t->backend_cr, + t->col * t->fontx, t->row * t->fonty, + t->fontx, t->fonty); + cairo_fill(t->backend_cr); + } + cairo_restore(t->backend_cr); + } +} |