emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Excessive redraw of overlapping/overlapped rows?


From: YAMAMOTO Mitsuharu
Subject: Re: Excessive redraw of overlapping/overlapped rows?
Date: Thu, 23 Feb 2006 19:26:28 +0900
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.6 (Marutamachi) APEL/10.6 Emacs/22.0.50 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)

>>>>> On Mon, 26 Sep 2005 21:19:32 +0200, David Kastrup <address@hidden> said:

> address@hidden (Kim F. Storm) writes:
>> YAMAMOTO Mitsuharu <address@hidden> writes:
>> 
>>> Is it OK to not set `changed_p' for the case of mode/header line
>>> updates?
>> 
>> I don't know for sure , but it seems ok.

> If mode line updates change the height of the mode line (because of
> descenders, or images or stuff like that), it is conceivable that
> something happens with the display, though likely not on all lines
> at once.  Even for line number updates, if you use line numbers with
> a non-constant height (old-style numerals).

> So it seems like it would at least appear prudent to check whether
> the mode line dimensions changed or something like that, or check
> just what lines the mode line might overlap.

You mean the change like below?  But I'm still not certain whether
this kind of mode/header line changes may affect overlapping in other
part of the text area.

                                     YAMAMOTO Mitsuharu
                                address@hidden

*** dispnew.c.~1.360.~  Thu Feb 23 18:08:35 2006
--- dispnew.c   Thu Feb 23 19:17:01 2006
***************
*** 4128,4135 ****
    if (force_p || !input_pending || !NILP (do_mouse_tracking))
      {
        struct glyph_row *row, *end;
!       struct glyph_row *mode_line_row;
!       struct glyph_row *header_line_row;
        int yb, changed_p = 0, mouse_face_overwritten_p = 0, n_updated;
  
        rif->update_window_begin_hook (w);
--- 4128,4135 ----
    if (force_p || !input_pending || !NILP (do_mouse_tracking))
      {
        struct glyph_row *row, *end;
!       struct glyph_row *mode_line_row, *current_mode_line_row;
!       struct glyph_row *header_line_row, *current_header_line_row;
        int yb, changed_p = 0, mouse_face_overwritten_p = 0, n_updated;
  
        rif->update_window_begin_hook (w);
***************
*** 4156,4162 ****
          update_window_line (w, MATRIX_ROW_VPOS (mode_line_row,
                                                  desired_matrix),
                              &mouse_face_overwritten_p);
!         changed_p = 1;
        }
  
        /* Find first enabled row.  Optimizations in redisplay_internal
--- 4156,4166 ----
          update_window_line (w, MATRIX_ROW_VPOS (mode_line_row,
                                                  desired_matrix),
                              &mouse_face_overwritten_p);
!         current_mode_line_row = MATRIX_MODE_LINE_ROW (w->current_matrix);
!         if (!(current_mode_line_row->mode_line_p
!               && current_mode_line_row->enabled_p
!               && mode_line_row->height == current_mode_line_row->height))
!           changed_p = 1;
        }
  
        /* Find first enabled row.  Optimizations in redisplay_internal
***************
*** 4226,4232 ****
        {
          header_line_row->y = 0;
          update_window_line (w, 0, &mouse_face_overwritten_p);
!         changed_p = 1;
        }
  
        /* Fix the appearance of overlapping/overlapped rows.  */
--- 4230,4240 ----
        {
          header_line_row->y = 0;
          update_window_line (w, 0, &mouse_face_overwritten_p);
!         current_header_line_row = w->current_matrix->rows;
!         if (!(current_header_line_row->mode_line_p
!               && current_header_line_row->enabled_p
!               && header_line_row->height == current_header_line_row->height))
!           changed_p = 1;
        }
  
        /* Fix the appearance of overlapping/overlapped rows.  */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]