aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--display.c26
-rw-r--r--display.h1
-rw-r--r--window-xlib.c27
3 files changed, 26 insertions, 28 deletions
diff --git a/display.c b/display.c
index 66c074f..ee6b85b 100644
--- a/display.c
+++ b/display.c
@@ -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;
diff --git a/display.h b/display.h
index f51e54c..f35c1c2 100644
--- a/display.h
+++ b/display.h
@@ -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);
+ }
+}