1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-21 10:24:55 +00:00

(x_draw_hollow_cursor, x_draw_bar_cursor)

(x_draw_phys_cursor_glyph): Set phys_cursor_width here.
(x_display_and_set_cursor): Don't set phys_cursor_width here for
bar cursors only, to make phys_cursor_width contain what its name
suggests.
(notice_overwritten_cursor): Consider the cursor image erased if
the output area intersects the cursor image in y-direction.
This commit is contained in:
Gerd Moellmann 2002-04-23 10:34:23 +00:00
parent 8fba10fcc3
commit b3738089df
2 changed files with 45 additions and 10 deletions

View File

@ -1,3 +1,13 @@
2002-04-23 Gerd Moellmann <gerd@gnu.org>
* xterm.c (x_draw_hollow_cursor, x_draw_bar_cursor)
(x_draw_phys_cursor_glyph): Set phys_cursor_width here.
(x_display_and_set_cursor): Don't set phys_cursor_width here, for
bar cursors only, to make phys_cursor_width contain what its name
suggests.
(notice_overwritten_cursor): Consider the cursor image erased if
the output area intersects the cursor image in y-direction.
2002-04-23 Pavel Jan,Bm(Bk <Pavel@Janik.cz>
* xdisp.c: Remove unused global variable

View File

@ -11226,13 +11226,29 @@ notice_overwritten_cursor (w, area, x0, x1, y0, y1)
enum glyph_row_area area;
int x0, y0, x1, y1;
{
if (area == TEXT_AREA
&& w->phys_cursor_on_p
&& y0 <= w->phys_cursor.y
&& y1 >= w->phys_cursor.y + w->phys_cursor_height
&& x0 <= w->phys_cursor.x
&& (x1 < 0 || x1 > w->phys_cursor.x))
w->phys_cursor_on_p = 0;
if (area == TEXT_AREA && w->phys_cursor_on_p)
{
int cx0 = w->phys_cursor.x;
int cx1 = cx0 + w->phys_cursor_width;
int cy0 = w->phys_cursor.y;
int cy1 = cy0 + w->phys_cursor_height;
if (x0 <= cx0 && (x1 < 0 || x1 >= cx1))
{
/* The cursor image will be completely removed from the
screen if the output area intersects the cursor area in
y-direction. When we draw in [y0 y1[, and some part of
the cursor is at y < y0, that part must have been drawn
before. When scrolling, the cursor is erased before
actually scrolling, so we don't come here. When not
scrolling, the rows above the old cursor row must have
changed, and in this case these rows must have written
over the cursor image. Likewise if part of the cursor is
below y1. */
if ((y0 >= cy0 && y0 < cy1) || (y1 >= cy0 && y1 < cy1))
w->phys_cursor_on_p = 0;
}
}
}
@ -11312,6 +11328,7 @@ x_draw_hollow_cursor (w, row)
if (cursor_glyph->type == STRETCH_GLYPH
&& !x_stretch_cursor_p)
wd = min (CANON_X_UNIT (f), wd);
w->phys_cursor_width = wd;
/* The foreground of cursor_gc is typically the same as the normal
background color, which can cause the cursor box to be invisible. */
@ -11395,7 +11412,9 @@ x_draw_bar_cursor (w, row, width, kind)
width = f->output_data.x->cursor_width;
width = min (cursor_glyph->pixel_width, width);
w->phys_cursor_width = width;
x_clip_to_row (w, row, gc, 0);
if (kind == BAR_CURSOR)
XFillRectangle (dpy, window, gc,
WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x),
@ -11448,10 +11467,17 @@ x_draw_phys_cursor_glyph (w, row, hl)
hl, 0);
w->phys_cursor_on_p = on_p;
if (hl == DRAW_CURSOR)
{
struct glyph *cursor_glyph = get_phys_cursor_glyph (w);
if (cursor_glyph)
w->phys_cursor_width = cursor_glyph->pixel_width;
}
/* When we erase the cursor, and ROW is overlapped by other
rows, make sure that these overlapping parts of other rows
are redrawn. */
if (hl == DRAW_NORMAL_TEXT && row->overlapped_p)
else if (hl == DRAW_NORMAL_TEXT && row->overlapped_p)
{
if (row > w->current_matrix->rows
&& MATRIX_ROW_OVERLAPS_SUCC_P (row - 1))
@ -11715,7 +11741,6 @@ x_display_and_set_cursor (w, on, hpos, vpos, x, y)
w->phys_cursor.hpos = hpos;
w->phys_cursor.vpos = vpos;
w->phys_cursor_type = new_cursor_type;
w->phys_cursor_width = new_cursor_width;
w->phys_cursor_on_p = 1;
switch (new_cursor_type)
@ -11733,7 +11758,7 @@ x_display_and_set_cursor (w, on, hpos, vpos, x, y)
break;
case HBAR_CURSOR:
x_draw_bar_cursor (w, glyph_row, new_cursor_width, HBAR_CURSOR);
x_draw_bar_cursor (w, glyph_row, new_cursor_width, HBAR_CURSOR);
break;
case NO_CURSOR: