* Redesign redisplay to get line-contents strings from the screen
abstraction and write directly on those strings, thus avoiding much
intermediate copying and the consequent computation. Eliminate as
much intermediate consing as possible from the image-generation
code.
* Eliminate `string-base' window class, which was storing too much
information for each buffer line. Instead, use new `outline'
abstraction, which keeps track of two pieces of information for each
line: the number of characters in the line and the height of the
line's image on the screen. This is all that is needed when
computing what needs to be redrawn -- all other information is
already being stored in the screen abstraction.
* New `outline' and `o3' objects are explicitly managed for each
window. Instead of being discarded after use, they are saved for
reuse later, preventing the generation of garbage during most
redisplay.
* Fix bug in redisplay: if the image of the last line in a window
extends past the bottom of the window, and the point moves, we must
check to see if it has gone offscreen, even if it is on a displayed
line.
12 files changed: