476 |
GC, int)); |
GC, int)); |
477 |
static int x_phys_cursor_in_rect_p P_ ((struct window *, XRectangle *)); |
static int x_phys_cursor_in_rect_p P_ ((struct window *, XRectangle *)); |
478 |
static void x_draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *)); |
static void x_draw_row_fringe_bitmaps P_ ((struct window *, struct glyph_row *)); |
479 |
static void notice_overwritten_cursor P_ ((struct window *, int, int)); |
static void notice_overwritten_cursor P_ ((struct window *, enum glyph_row_area, |
480 |
|
int, int, int, int)); |
481 |
static void x_flush P_ ((struct frame *f)); |
static void x_flush P_ ((struct frame *f)); |
482 |
static void x_update_begin P_ ((struct frame *)); |
static void x_update_begin P_ ((struct frame *)); |
483 |
static void x_update_window_begin P_ ((struct window *)); |
static void x_update_window_begin P_ ((struct window *)); |
5208 |
x1 -= left_area_width; |
x1 -= left_area_width; |
5209 |
} |
} |
5210 |
|
|
5211 |
notice_overwritten_cursor (w, x0, x1); |
notice_overwritten_cursor (w, area, x0, x1, |
5212 |
|
row->y, MATRIX_ROW_BOTTOM_Y (row)); |
5213 |
} |
} |
5214 |
|
|
5215 |
/* Value is the x-position up to which drawn, relative to AREA of W. |
/* Value is the x-position up to which drawn, relative to AREA of W. |
5431 |
|
|
5432 |
/* Notice if the cursor will be cleared by this operation. */ |
/* Notice if the cursor will be cleared by this operation. */ |
5433 |
if (!updated_row->full_width_p) |
if (!updated_row->full_width_p) |
5434 |
notice_overwritten_cursor (w, output_cursor.x, -1); |
notice_overwritten_cursor (w, updated_area, |
5435 |
|
output_cursor.x, -1, |
5436 |
|
updated_row->y, |
5437 |
|
MATRIX_ROW_BOTTOM_Y (updated_row)); |
5438 |
|
|
5439 |
from_x = output_cursor.x; |
from_x = output_cursor.x; |
5440 |
|
|
7785 |
x_draw_glyphs (w, start_x, row, TEXT_AREA, |
x_draw_glyphs (w, start_x, row, TEXT_AREA, |
7786 |
start_hpos, end_hpos, draw, 0); |
start_hpos, end_hpos, draw, 0); |
7787 |
|
|
7788 |
row->mouse_face_p = draw == DRAW_MOUSE_FACE || DRAW_IMAGE_RAISED; |
row->mouse_face_p |
7789 |
|
= draw == DRAW_MOUSE_FACE || draw == DRAW_IMAGE_RAISED; |
7790 |
} |
} |
7791 |
} |
} |
7792 |
|
|
11104 |
Text Cursor |
Text Cursor |
11105 |
***********************************************************************/ |
***********************************************************************/ |
11106 |
|
|
11107 |
/* Notice if the text cursor of window W has been overwritten by a |
/* Notice when the text cursor of window W has been completely |
11108 |
drawing operation that outputs N glyphs starting at START_X and |
overwritten by a drawing operation that outputs glyphs in AREA |
11109 |
ending at END_X in the line given by output_cursor.vpos. |
starting at X0 and ending at X1 in the line starting at Y0 and |
11110 |
Coordinates are area-relative. END_X < 0 means all the rest |
ending at Y1. X coordinates are area-relative. X1 < 0 means all |
11111 |
of the line after START_X has been written. */ |
the rest of the line after X0 has been written. Y coordinates |
11112 |
|
are window-relative. */ |
11113 |
|
|
11114 |
static void |
static void |
11115 |
notice_overwritten_cursor (w, start_x, end_x) |
notice_overwritten_cursor (w, area, x0, x1, y0, y1) |
11116 |
struct window *w; |
struct window *w; |
11117 |
int start_x, end_x; |
enum glyph_row_area area; |
11118 |
|
int x0, y0, x1, y1; |
11119 |
{ |
{ |
11120 |
if (updated_area == TEXT_AREA |
if (area == TEXT_AREA |
11121 |
&& w->phys_cursor_on_p |
&& w->phys_cursor_on_p |
11122 |
&& output_cursor.vpos == w->phys_cursor.vpos |
&& y0 <= w->phys_cursor.y |
11123 |
&& start_x <= w->phys_cursor.x |
&& y1 >= w->phys_cursor.y + w->phys_cursor_height |
11124 |
&& (end_x < 0 || end_x > w->phys_cursor.x)) |
&& x0 <= w->phys_cursor.x |
11125 |
|
&& (x1 < 0 || x1 > w->phys_cursor.x)) |
11126 |
w->phys_cursor_on_p = 0; |
w->phys_cursor_on_p = 0; |
11127 |
} |
} |
11128 |
|
|