Mercurial > emacs
changeset 30742:e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
box cursor because that's better visible for large images.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Thu, 10 Aug 2000 19:13:28 +0000 |
parents | f0d4b6a6438e |
children | 51d0f4273e89 |
files | src/xterm.c |
diffstat | 1 files changed, 29 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xterm.c Thu Aug 10 13:07:25 2000 +0000 +++ b/src/xterm.c Thu Aug 10 19:13:28 2000 +0000 @@ -10313,24 +10313,33 @@ struct glyph_row *row; int width; { - /* If cursor hpos is out of bounds, don't draw garbage. This can - happen in mini-buffer windows when switching between echo area - glyphs and mini-buffer. */ - if (w->phys_cursor.hpos < row->used[TEXT_AREA]) - { - struct frame *f = XFRAME (w->frame); - struct glyph *cursor_glyph; - GC gc; - int x; - unsigned long mask; - XGCValues xgcv; - Display *dpy; - Window window; + struct frame *f = XFRAME (w->frame); + struct glyph *cursor_glyph; + GC gc; + int x; + unsigned long mask; + XGCValues xgcv; + Display *dpy; + Window window; - cursor_glyph = get_phys_cursor_glyph (w); - if (cursor_glyph == NULL) - return; - + /* If cursor is out of bounds, don't draw garbage. This can happen + in mini-buffer windows when switching between echo area glyphs + and mini-buffer. */ + cursor_glyph = get_phys_cursor_glyph (w); + if (cursor_glyph == NULL) + return; + + /* If on an image, draw like a normal cursor. That's usually better + visible than drawing a bar, esp. if the image is large so that + the bar might not be in the window. */ + if (cursor_glyph->type == IMAGE_GLYPH) + { + struct glyph_row *row; + row = MATRIX_ROW (w->current_matrix, w->phys_cursor.vpos); + x_draw_phys_cursor_glyph (w, row, DRAW_CURSOR); + } + else + { xgcv.background = f->output_data.x->cursor_pixel; xgcv.foreground = f->output_data.x->cursor_pixel; xgcv.graphics_exposures = 0; @@ -10338,7 +10347,7 @@ dpy = FRAME_X_DISPLAY (f); window = FRAME_X_WINDOW (f); gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc; - + if (gc) XChangeGC (dpy, gc, mask, &xgcv); else @@ -10346,10 +10355,10 @@ gc = XCreateGC (dpy, window, mask, &xgcv); FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc = gc; } - + if (width < 0) width = f->output_data.x->cursor_width; - + x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); x_clip_to_row (w, row, gc, 0); XFillRectangle (dpy, window, gc,