From aa936e8e0a8ffcb6cf59e5fa57ce04f5524d03f4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Thu, 16 Dec 2010 20:37:13 +0100 Subject: [PATCH] Handle invisible cursor (bg same as cursor color) for Nextstep. * nsterm.m (ns_draw_window_cursor): If the cursor color is the same as the background, use the face forground as cursor. --- src/ChangeLog | 5 +++++ src/nsterm.m | 18 +++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 2db05fd1722..c6e0d92f1f5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-12-16 Jan Djärv + + * nsterm.m (ns_draw_window_cursor): If the cursor color is the + same as the background, use the face forground as cursor. + 2010-12-13 Eli Zaretskii * fileio.c (Fexpand_file_name): Doc fix. (Bug#7617) diff --git a/src/nsterm.m b/src/nsterm.m index 87dc1195425..c33253049c1 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -2301,6 +2301,8 @@ ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, struct glyph *phys_cursor_glyph; int overspill; struct glyph *cursor_glyph; + struct face *face; + NSColor *hollow_color = FRAME_BACKGROUND_COLOR (f); /* If cursor is out of bounds, don't draw garbage. This can happen in mini-buffer windows when switching between echo area glyphs @@ -2310,7 +2312,7 @@ ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, //fprintf(stderr, "drawcursor (%d,%d) activep = %d\tonp = %d\tc_type = %d\twidth = %d\n",x,y, active_p,on_p,cursor_type,cursor_width); if (!on_p) - return; + return; w->phys_cursor_type = cursor_type; w->phys_cursor_on_p = on_p; @@ -2349,7 +2351,17 @@ ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, /* TODO: only needed in rare cases with last-resort font in HELLO.. should we do this more efficiently? */ ns_clip_to_row (w, glyph_row, -1, NO); /* do ns_focus(f, &r, 1); if remove */ - [FRAME_CURSOR_COLOR (f) set]; + + + face = FACE_FROM_ID (f, phys_cursor_glyph->face_id); + if (face && NS_FACE_BACKGROUND (face) + == ns_index_color (FRAME_CURSOR_COLOR (f), f)) + { + [ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), f) set]; + hollow_color = FRAME_CURSOR_COLOR (f); + } + else + [FRAME_CURSOR_COLOR (f) set]; #ifdef NS_IMPL_COCOA /* TODO: This makes drawing of cursor plus that of phys_cursor_glyph @@ -2369,7 +2381,7 @@ ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, break; case HOLLOW_BOX_CURSOR: NSRectFill (r); - [FRAME_BACKGROUND_COLOR (f) set]; + [hollow_color set]; NSRectFill (NSInsetRect (r, 1, 1)); [FRAME_CURSOR_COLOR (f) set]; break; -- 2.39.5