From d95e7c992b62d17a01637165cc5530fe435ab3a7 Mon Sep 17 00:00:00 2001 From: Zajcev Evgeny Date: Sat, 25 Apr 2020 16:51:04 +0300 Subject: [PATCH 2/2] New COMBINED_BOX_CURSOR cursor type introduced for internal use * src/dispextern.h (text_cursor_kinds): COMBINED_BOX_CURSOR added * src/w32term.c, src/xterm.c: Support for COMBINED_BOX_CURSOR cursor type * src/xdisp.c (get_window_cursor_type): Use COMBINED_BOX_CURSOR for box cursor under images with mask or any margin --- src/dispextern.h | 7 ++++++- src/w32term.c | 3 +++ src/xdisp.c | 10 +++++----- src/xterm.c | 3 +++ 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/dispextern.h b/src/dispextern.h index ae994d7f9b..a1a0922e92 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -156,7 +156,12 @@ #define NativeRectangle int FILLED_BOX_CURSOR, HOLLOW_BOX_CURSOR, BAR_CURSOR, - HBAR_CURSOR + HBAR_CURSOR, + + /* box cursor combining FILLED_BOX_CURSOR and HOLLOW_BOX_CURSOR + * For internal use only + */ + COMBINED_BOX_CURSOR }; /* Values returned from coordinates_in_window. */ diff --git a/src/w32term.c b/src/w32term.c index 5fa77d58e1..49cd3e4a8c 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -6069,6 +6069,9 @@ w32_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, switch (cursor_type) { + case COMBINED_BOX_CURSOR: + draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR); + /* FALLTHROUGH */ case HOLLOW_BOX_CURSOR: w32_draw_hollow_cursor (w, glyph_row); break; diff --git a/src/xdisp.c b/src/xdisp.c index d3294e1e99..7fc07f4691 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -30896,11 +30896,11 @@ get_window_cursor_type (struct window *w, struct glyph *glyph, int *width, font size. So, setting cursor-type to (box . 32) should cover most of the "tiny" icons people may use. */ - if (!img->hmargin && !img->vmargin - && (!img->mask - || (CONSP (BVAR (b, cursor_type)) - && img->width > max (*width, WINDOW_FRAME_COLUMN_WIDTH (w)) - && img->height > max (*width, WINDOW_FRAME_LINE_HEIGHT (w))))) + if (img->mask || img->hmargin || img->vmargin) + cursor_type = COMBINED_BOX_CURSOR; + else if (CONSP (BVAR (b, cursor_type)) + && img->width > max (*width, WINDOW_FRAME_COLUMN_WIDTH (w)) + && img->height > max (*width, WINDOW_FRAME_LINE_HEIGHT (w))) cursor_type = HOLLOW_BOX_CURSOR; } } diff --git a/src/xterm.c b/src/xterm.c index ae5dad9289..0f1ec4dec3 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -9670,6 +9670,9 @@ x_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x, { switch (cursor_type) { + case COMBINED_BOX_CURSOR: + draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR); + /* FALLTHROUGH */ case HOLLOW_BOX_CURSOR: x_draw_hollow_cursor (w, glyph_row); break; -- 2.17.1