Commit 190bb91a authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(scrolling): Fewer restrictions if scroll_region_ok is

set.  New vector old_draw_cost for direct scrolling method.
parent 33c448cd
...@@ -1387,6 +1387,7 @@ scrolling (frame) ...@@ -1387,6 +1387,7 @@ scrolling (frame)
int *old_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int)); int *old_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
int *new_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int)); int *new_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
int *draw_cost = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int)); int *draw_cost = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
int *old_draw_cost = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
register int i; register int i;
int free_at_end_vpos = FRAME_HEIGHT (frame); int free_at_end_vpos = FRAME_HEIGHT (frame);
register struct frame_glyphs *current_frame = FRAME_CURRENT_GLYPHS (frame); register struct frame_glyphs *current_frame = FRAME_CURRENT_GLYPHS (frame);
...@@ -1419,10 +1420,11 @@ scrolling (frame) ...@@ -1419,10 +1420,11 @@ scrolling (frame)
else if (i == unchanged_at_top) else if (i == unchanged_at_top)
unchanged_at_top++; unchanged_at_top++;
draw_cost[i] = line_draw_cost (desired_frame, i); draw_cost[i] = line_draw_cost (desired_frame, i);
old_draw_cost[i] = line_draw_cost (current_frame, i);
} }
/* If changed lines are few, don't allow preemption, don't scroll. */ /* If changed lines are few, don't allow preemption, don't scroll. */
if (changed_lines < baud_rate / 2400 if (!scroll_region_ok && changed_lines < baud_rate / 2400
|| unchanged_at_bottom == FRAME_HEIGHT (frame)) || unchanged_at_bottom == FRAME_HEIGHT (frame))
return 1; return 1;
...@@ -1436,7 +1438,7 @@ scrolling (frame) ...@@ -1436,7 +1438,7 @@ scrolling (frame)
/* If large window, fast terminal and few lines in common between /* If large window, fast terminal and few lines in common between
current frame and desired frame, don't bother with i/d calc. */ current frame and desired frame, don't bother with i/d calc. */
if (window_size >= 18 && baud_rate > 2400 if (!scroll_region_ok && window_size >= 18 && baud_rate > 2400
&& (window_size >= && (window_size >=
10 * scrolling_max_lines_saved (unchanged_at_top, 10 * scrolling_max_lines_saved (unchanged_at_top,
FRAME_HEIGHT (frame) - unchanged_at_bottom, FRAME_HEIGHT (frame) - unchanged_at_bottom,
...@@ -1445,6 +1447,7 @@ scrolling (frame) ...@@ -1445,6 +1447,7 @@ scrolling (frame)
scrolling_1 (frame, window_size, unchanged_at_top, unchanged_at_bottom, scrolling_1 (frame, window_size, unchanged_at_top, unchanged_at_bottom,
draw_cost + unchanged_at_top - 1, draw_cost + unchanged_at_top - 1,
old_draw_cost + unchanged_at_top - 1,
old_hash + unchanged_at_top - 1, old_hash + unchanged_at_top - 1,
new_hash + unchanged_at_top - 1, new_hash + unchanged_at_top - 1,
free_at_end_vpos - unchanged_at_top); free_at_end_vpos - unchanged_at_top);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment