diff options
| author | Richard M. Stallman | 1994-04-03 08:08:33 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1994-04-03 08:08:33 +0000 |
| commit | 2d810f84640007d26d5702b069579d51796d3e53 (patch) | |
| tree | 95b1b0fe2e12ab852cae11ae81042689802f9014 /src | |
| parent | ae9fdfe5e1035d5c914d465e4b3fb380d959f3f8 (diff) | |
| download | emacs-2d810f84640007d26d5702b069579d51796d3e53.tar.gz emacs-2d810f84640007d26d5702b069579d51796d3e53.zip | |
(do_scrolling): Handle charstarts like glyphs.
Diffstat (limited to 'src')
| -rw-r--r-- | src/scroll.c | 24 |
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 | ||
| 224 | static void | 235 | static void |
| 225 | do_scrolling (frame, matrix, window_size, unchanged_at_top) | 236 | do_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 | ||