# HG changeset patch # User Richard M. Stallman # Date 765360513 0 # Node ID e6611521fb67c1cfe6ee1bf1d9356e1779f9d398 # Parent d3e3efcd8461f5e5854dc68e9c1122afb6775687 (do_scrolling): Handle charstarts like glyphs. diff -r d3e3efcd8461 -r e6611521fb67 src/scroll.c --- a/src/scroll.c Sun Apr 03 06:04:35 1994 +0000 +++ b/src/scroll.c Sun Apr 03 08:08:33 1994 +0000 @@ -217,9 +217,20 @@ } } -/* Perform insert-lines and delete-lines operations - according to the costs in the matrix. - Updates the contents of the frame to record what was done. */ +/* Perform insert-lines and delete-lines operations on FRAME + according to the costs in MATRIX. + Update the frame's current_glyphs info to record what was done. + + WINDOW_SIZE is the number of lines being considered for scrolling + and UNCHANGED_AT_TOP is the vpos of the first line being considered. + These two arguments can specify any contiguous range of lines. + + We also shuffle the charstarts vectors for the lines + along with the glyphs; but the results are not quite right, + since we cannot offset them for changes in amount of text + in this line or that line. Luckily it doesn't matter, + since update_frame and update_line will copy in the proper + new charstarts vectors from the frame's desired_glyphs. */ static void do_scrolling (frame, matrix, window_size, unchanged_at_top) @@ -248,6 +259,8 @@ bcopy (current_frame->glyphs, temp_frame->glyphs, current_frame->height * sizeof (GLYPH *)); + bcopy (current_frame->charstarts, temp_frame->charstarts, + current_frame->height * sizeof (GLYPH *)); bcopy (current_frame->used, temp_frame->used, current_frame->height * sizeof (int)); bcopy (current_frame->highlight, temp_frame->highlight, @@ -303,6 +316,8 @@ /* Old line at vpos j-1 ends up at vpos i-1 */ current_frame->glyphs[i + offset - 1] = temp_frame->glyphs[j + offset - 1]; + current_frame->charstarts[i + offset - 1] + = temp_frame->charstarts[j + offset - 1]; current_frame->used[i + offset - 1] = temp_frame->used[j + offset - 1]; current_frame->highlight[i + offset - 1] @@ -337,7 +352,8 @@ current_frame->enable[j] = 0; while (temp_frame->enable[next]) next++; - current_frame->glyphs[j] = temp_frame->glyphs[next++]; + current_frame->glyphs[j] = temp_frame->glyphs[next]; + current_frame->charstarts[j] = temp_frame->charstarts[next++]; } }