aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1994-04-03 08:08:33 +0000
committerRichard M. Stallman1994-04-03 08:08:33 +0000
commit2d810f84640007d26d5702b069579d51796d3e53 (patch)
tree95b1b0fe2e12ab852cae11ae81042689802f9014 /src
parentae9fdfe5e1035d5c914d465e4b3fb380d959f3f8 (diff)
downloademacs-2d810f84640007d26d5702b069579d51796d3e53.tar.gz
emacs-2d810f84640007d26d5702b069579d51796d3e53.zip
(do_scrolling): Handle charstarts like glyphs.
Diffstat (limited to 'src')
-rw-r--r--src/scroll.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/scroll.c b/src/scroll.c
index 5cc60ca1d02..6571a746a08 100644
--- a/src/scroll.c
+++ b/src/scroll.c
@@ -217,9 +217,20 @@ calculate_scrolling (frame, matrix, window_size, lines_below,
217 } 217 }
218} 218}
219 219
220/* Perform insert-lines and delete-lines operations 220/* Perform insert-lines and delete-lines operations on FRAME
221 according to the costs in the matrix. 221 according to the costs in MATRIX.
222 Updates the contents of the frame to record what was done. */ 222 Update the frame's current_glyphs info to record what was done.
223
224 WINDOW_SIZE is the number of lines being considered for scrolling
225 and UNCHANGED_AT_TOP is the vpos of the first line being considered.
226 These two arguments can specify any contiguous range of lines.
227
228 We also shuffle the charstarts vectors for the lines
229 along with the glyphs; but the results are not quite right,
230 since we cannot offset them for changes in amount of text
231 in this line or that line. Luckily it doesn't matter,
232 since update_frame and update_line will copy in the proper
233 new charstarts vectors from the frame's desired_glyphs. */
223 234
224static void 235static void
225do_scrolling (frame, matrix, window_size, unchanged_at_top) 236do_scrolling (frame, matrix, window_size, unchanged_at_top)
@@ -248,6 +259,8 @@ do_scrolling (frame, matrix, window_size, unchanged_at_top)
248 259
249 bcopy (current_frame->glyphs, temp_frame->glyphs, 260 bcopy (current_frame->glyphs, temp_frame->glyphs,
250 current_frame->height * sizeof (GLYPH *)); 261 current_frame->height * sizeof (GLYPH *));
262 bcopy (current_frame->charstarts, temp_frame->charstarts,
263 current_frame->height * sizeof (GLYPH *));
251 bcopy (current_frame->used, temp_frame->used, 264 bcopy (current_frame->used, temp_frame->used,
252 current_frame->height * sizeof (int)); 265 current_frame->height * sizeof (int));
253 bcopy (current_frame->highlight, temp_frame->highlight, 266 bcopy (current_frame->highlight, temp_frame->highlight,
@@ -303,6 +316,8 @@ do_scrolling (frame, matrix, window_size, unchanged_at_top)
303 /* Old line at vpos j-1 ends up at vpos i-1 */ 316 /* Old line at vpos j-1 ends up at vpos i-1 */
304 current_frame->glyphs[i + offset - 1] 317 current_frame->glyphs[i + offset - 1]
305 = temp_frame->glyphs[j + offset - 1]; 318 = temp_frame->glyphs[j + offset - 1];
319 current_frame->charstarts[i + offset - 1]
320 = temp_frame->charstarts[j + offset - 1];
306 current_frame->used[i + offset - 1] 321 current_frame->used[i + offset - 1]
307 = temp_frame->used[j + offset - 1]; 322 = temp_frame->used[j + offset - 1];
308 current_frame->highlight[i + offset - 1] 323 current_frame->highlight[i + offset - 1]
@@ -337,7 +352,8 @@ do_scrolling (frame, matrix, window_size, unchanged_at_top)
337 current_frame->enable[j] = 0; 352 current_frame->enable[j] = 0;
338 while (temp_frame->enable[next]) 353 while (temp_frame->enable[next])
339 next++; 354 next++;
340 current_frame->glyphs[j] = temp_frame->glyphs[next++]; 355 current_frame->glyphs[j] = temp_frame->glyphs[next];
356 current_frame->charstarts[j] = temp_frame->charstarts[next++];
341 } 357 }
342 } 358 }
343 359