(update_frame_line): Rename parameter FRAME to F.
Avoid some unnecessary cursor positioning.
This commit is contained in:
parent
36710aa696
commit
c363a1d6fd
2 changed files with 39 additions and 20 deletions
|
@ -1,3 +1,8 @@
|
|||
2001-02-06 Gerd Moellmann <gerd@gnu.org>
|
||||
|
||||
* dispnew.c (update_frame_line): Rename parameter FRAME to F.
|
||||
Avoid some unnecessary cursor positioning.
|
||||
|
||||
2001-02-05 Gerd Moellmann <gerd@gnu.org>
|
||||
|
||||
* xfaces.c (split_font_name): Compute numeric value of
|
||||
|
|
|
@ -5334,20 +5334,20 @@ extern int *char_ins_del_vector;
|
|||
/* Perform a frame-based update on line VPOS in frame FRAME. */
|
||||
|
||||
static void
|
||||
update_frame_line (frame, vpos)
|
||||
register struct frame *frame;
|
||||
update_frame_line (f, vpos)
|
||||
struct frame *f;
|
||||
int vpos;
|
||||
{
|
||||
struct glyph *obody, *nbody, *op1, *op2, *np1, *nend;
|
||||
int tem;
|
||||
int osp, nsp, begmatch, endmatch, olen, nlen;
|
||||
struct glyph_matrix *current_matrix = frame->current_matrix;
|
||||
struct glyph_matrix *desired_matrix = frame->desired_matrix;
|
||||
struct glyph_matrix *current_matrix = f->current_matrix;
|
||||
struct glyph_matrix *desired_matrix = f->desired_matrix;
|
||||
struct glyph_row *current_row = MATRIX_ROW (current_matrix, vpos);
|
||||
struct glyph_row *desired_row = MATRIX_ROW (desired_matrix, vpos);
|
||||
int must_write_whole_line_p;
|
||||
int write_spaces_p = must_write_spaces;
|
||||
int colored_spaces_p = (FACE_FROM_ID (frame, DEFAULT_FACE_ID)->background
|
||||
int colored_spaces_p = (FACE_FROM_ID (f, DEFAULT_FACE_ID)->background
|
||||
!= FACE_TTY_DEFAULT_BG_COLOR);
|
||||
|
||||
if (colored_spaces_p)
|
||||
|
@ -5388,7 +5388,7 @@ update_frame_line (frame, vpos)
|
|||
/* For an inverse-video line, make sure it's filled with
|
||||
spaces all the way to the frame edge so that the reverse
|
||||
video extends all the way across. */
|
||||
while (olen < FRAME_WIDTH (frame) - 1)
|
||||
while (olen < FRAME_WIDTH (f) - 1)
|
||||
obody[olen++] = space_glyph;
|
||||
}
|
||||
}
|
||||
|
@ -5426,10 +5426,10 @@ update_frame_line (frame, vpos)
|
|||
/* Don't call clear_end_of_line if we already wrote the whole
|
||||
line. The cursor will not be at the right margin in that
|
||||
case but in the line below. */
|
||||
if (nlen < FRAME_WINDOW_WIDTH (frame))
|
||||
if (nlen < FRAME_WINDOW_WIDTH (f))
|
||||
{
|
||||
cursor_to (vpos, nlen);
|
||||
clear_end_of_line (FRAME_WINDOW_WIDTH (frame));
|
||||
clear_end_of_line (FRAME_WINDOW_WIDTH (f));
|
||||
}
|
||||
else
|
||||
/* Make sure we are in the right row, otherwise cursor movement
|
||||
|
@ -5453,7 +5453,7 @@ update_frame_line (frame, vpos)
|
|||
/* For an inverse-video line, give it extra trailing spaces all
|
||||
the way to the frame edge so that the reverse video extends
|
||||
all the way across. */
|
||||
while (nlen < FRAME_WIDTH (frame) - 1)
|
||||
while (nlen < FRAME_WIDTH (f) - 1)
|
||||
nbody[nlen++] = space_glyph;
|
||||
}
|
||||
|
||||
|
@ -5563,7 +5563,7 @@ update_frame_line (frame, vpos)
|
|||
|
||||
tem = (nlen - nsp) - (olen - osp);
|
||||
if (endmatch && tem
|
||||
&& (!char_ins_del_ok || endmatch <= char_ins_del_cost (frame)[tem]))
|
||||
&& (!char_ins_del_ok || endmatch <= char_ins_del_cost (f)[tem]))
|
||||
endmatch = 0;
|
||||
|
||||
/* nsp - osp is the distance to insert or delete.
|
||||
|
@ -5573,7 +5573,7 @@ update_frame_line (frame, vpos)
|
|||
|
||||
if (nsp != osp
|
||||
&& (!char_ins_del_ok
|
||||
|| begmatch + endmatch <= char_ins_del_cost (frame)[nsp - osp]))
|
||||
|| begmatch + endmatch <= char_ins_del_cost (f)[nsp - osp]))
|
||||
{
|
||||
begmatch = 0;
|
||||
endmatch = 0;
|
||||
|
@ -5607,16 +5607,23 @@ update_frame_line (frame, vpos)
|
|||
tem = nsp + begmatch + endmatch;
|
||||
if (nlen != tem || olen != tem)
|
||||
{
|
||||
cursor_to (vpos, nsp + begmatch);
|
||||
if (!endmatch || nlen == olen)
|
||||
{
|
||||
/* If new text being written reaches right margin,
|
||||
there is no need to do clear-to-eol at the end.
|
||||
(and it would not be safe, since cursor is not
|
||||
going to be "at the margin" after the text is done) */
|
||||
if (nlen == FRAME_WINDOW_WIDTH (frame))
|
||||
/* If new text being written reaches right margin, there is
|
||||
no need to do clear-to-eol at the end of this function
|
||||
(and it would not be safe, since cursor is not going to
|
||||
be "at the margin" after the text is done). */
|
||||
if (nlen == FRAME_WINDOW_WIDTH (f))
|
||||
olen = 0;
|
||||
write_glyphs (nbody + nsp + begmatch, nlen - tem);
|
||||
|
||||
/* Function write_glyphs is prepared to do nothing
|
||||
if passed a length <= 0. Check it here to avoid
|
||||
unnecessary cursor movement. */
|
||||
if (nlen - tem > 0)
|
||||
{
|
||||
cursor_to (vpos, nsp + begmatch);
|
||||
write_glyphs (nbody + nsp + begmatch, nlen - tem);
|
||||
}
|
||||
}
|
||||
else if (nlen > olen)
|
||||
{
|
||||
|
@ -5630,18 +5637,25 @@ update_frame_line (frame, vpos)
|
|||
int out = olen - tem; /* Columns to be overwritten originally. */
|
||||
int del;
|
||||
|
||||
cursor_to (vpos, nsp + begmatch);
|
||||
|
||||
/* Calculate columns we can actually overwrite. */
|
||||
while (CHAR_GLYPH_PADDING_P (nbody[nsp + begmatch + out])) out--;
|
||||
while (CHAR_GLYPH_PADDING_P (nbody[nsp + begmatch + out]))
|
||||
out--;
|
||||
write_glyphs (nbody + nsp + begmatch, out);
|
||||
|
||||
/* If we left columns to be overwritten, we must delete them. */
|
||||
del = olen - tem - out;
|
||||
if (del > 0) delete_glyphs (del);
|
||||
if (del > 0)
|
||||
delete_glyphs (del);
|
||||
|
||||
/* At last, we insert columns not yet written out. */
|
||||
insert_glyphs (nbody + nsp + begmatch + out, nlen - olen + del);
|
||||
olen = nlen;
|
||||
}
|
||||
else if (olen > nlen)
|
||||
{
|
||||
cursor_to (vpos, nsp + begmatch);
|
||||
write_glyphs (nbody + nsp + begmatch, nlen - tem);
|
||||
delete_glyphs (olen - nlen);
|
||||
olen = nlen;
|
||||
|
|
Loading…
Add table
Reference in a new issue