[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/src/macterm.c
From: |
Andrew Choi |
Subject: |
[Emacs-diffs] Changes to emacs/src/macterm.c |
Date: |
Fri, 30 Aug 2002 20:53:12 -0400 |
Index: emacs/src/macterm.c
diff -c emacs/src/macterm.c:1.18 emacs/src/macterm.c:1.19
*** emacs/src/macterm.c:1.18 Fri Aug 30 08:02:10 2002
--- emacs/src/macterm.c Fri Aug 30 20:53:12 2002
***************
*** 443,448 ****
--- 443,450 ----
static int x_intersect_rectangles P_ ((Rect *, Rect *, Rect *));
static void expose_frame P_ ((struct frame *, int, int, int, int));
static int expose_window_tree P_ ((struct window *, Rect *));
+ static void expose_overlaps P_ ((struct window *, struct glyph_row *,
+ struct glyph_row *));
static int expose_window P_ ((struct window *, Rect *));
static void expose_area P_ ((struct window *, struct glyph_row *,
Rect *, enum glyph_row_area));
***************
*** 6240,6247 ****
}
! /* Redraw the part of window W intersection rectagle FR. Pixel
! coordinates in FR are frame relative. Call this function with
input blocked. Value is non-zero if the exposure overwrites
mouse-face. */
--- 6242,6282 ----
}
! /* Redraw those parts of glyphs rows during expose event handling that
! overlap other rows. Redrawing of an exposed line writes over parts
! of lines overlapping that exposed line; this function fixes that.
!
! W is the window being exposed. FIRST_OVERLAPPING_ROW is the first
! row in W's current matrix that is exposed and overlaps other rows.
! LAST_OVERLAPPING_ROW is the last such row. */
!
! static void
! expose_overlaps (w, first_overlapping_row, last_overlapping_row)
! struct window *w;
! struct glyph_row *first_overlapping_row;
! struct glyph_row *last_overlapping_row;
! {
! struct glyph_row *row;
!
! for (row = first_overlapping_row; row <= last_overlapping_row; ++row)
! if (row->overlapping_p)
! {
! xassert (row->enabled_p && !row->mode_line_p);
!
! if (row->used[LEFT_MARGIN_AREA])
! x_fix_overlapping_area (w, row, LEFT_MARGIN_AREA);
!
! if (row->used[TEXT_AREA])
! x_fix_overlapping_area (w, row, TEXT_AREA);
!
! if (row->used[RIGHT_MARGIN_AREA])
! x_fix_overlapping_area (w, row, RIGHT_MARGIN_AREA);
! }
! }
!
!
! /* Redraw the part of window W intersection rectangle FR. Pixel
! coordinates in FR are frame-relative. Call this function with
input blocked. Value is non-zero if the exposure overwrites
mouse-face. */
***************
*** 6281,6287 ****
int yb = window_text_bottom_y (w);
struct glyph_row *row;
int cursor_cleared_p;
!
TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n",
r.left, r.top, r.right, r.bottom));
--- 6316,6323 ----
int yb = window_text_bottom_y (w);
struct glyph_row *row;
int cursor_cleared_p;
! struct glyph_row *first_overlapping_row, *last_overlapping_row;
!
TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n",
r.left, r.top, r.right, r.bottom));
***************
*** 6301,6307 ****
else
cursor_cleared_p = 0;
! /* Find the first row intersecting the rectangle R. */
for (row = w->current_matrix->rows;
row->enabled_p;
++row)
--- 6337,6344 ----
else
cursor_cleared_p = 0;
! /* Update lines intersecting rectangle R. */
! first_overlapping_row = last_overlapping_row = NULL;
for (row = w->current_matrix->rows;
row->enabled_p;
++row)
***************
*** 6314,6323 ****
|| (r.top >= y0 && r.top < y1)
|| (r.bottom > y0 && r.bottom < y1))
{
if (expose_line (w, row, &r))
mouse_face_overwritten_p = 1;
}
!
if (y1 >= yb)
break;
}
--- 6351,6367 ----
|| (r.top >= y0 && r.top < y1)
|| (r.bottom > y0 && r.bottom < y1))
{
+ if (row->overlapping_p)
+ {
+ if (first_overlapping_row == NULL)
+ first_overlapping_row = row;
+ last_overlapping_row = row;
+ }
+
if (expose_line (w, row, &r))
mouse_face_overwritten_p = 1;
}
!
if (y1 >= yb)
break;
}
***************
*** 6334,6342 ****
if (!w->pseudo_window_p)
{
/* Draw border between windows. */
x_draw_vertical_border (w);
!
/* Turn the cursor on again. */
if (cursor_cleared_p)
x_update_window_cursor (w, 1);
--- 6378,6390 ----
if (!w->pseudo_window_p)
{
+ /* Fix the display of overlapping rows. */
+ if (first_overlapping_row)
+ expose_overlaps (w, first_overlapping_row, last_overlapping_row);
+
/* Draw border between windows. */
x_draw_vertical_border (w);
!
/* Turn the cursor on again. */
if (cursor_cleared_p)
x_update_window_cursor (w, 1);
- [Emacs-diffs] Changes to emacs/src/macterm.c, Andrew Choi, 2002/08/03
- [Emacs-diffs] Changes to emacs/src/macterm.c, Andrew Choi, 2002/08/04
- [Emacs-diffs] Changes to emacs/src/macterm.c, Andrew Choi, 2002/08/10
- [Emacs-diffs] Changes to emacs/src/macterm.c, Andrew Choi, 2002/08/12
- [Emacs-diffs] Changes to emacs/src/macterm.c, Andrew Choi, 2002/08/25
- [Emacs-diffs] Changes to emacs/src/macterm.c, Kim F. Storm, 2002/08/30
- [Emacs-diffs] Changes to emacs/src/macterm.c,
Andrew Choi <=