gitk: Do only the parts of the layout that are needed
This changes layoutrows and optimize_rows to make it possible to lay
out only a little bit more of the graph than is visible, rather than
having to lay out the whole graph from top to bottom. To lay out
some of the graph without starting at the top, we use the new make_idlist
procedure for the first row, then lay it out proceeding downwards
as before. Empty list elements in rowidlist are used to denote rows
that haven't been laid out yet.
Optimizing happens much as before except that we don't try to optimize
unless we have three consecutive rows laid out (or the top 2 rows).
We have a new list, rowisopt, to record which rows have been optimized.
If we change a row that has already been drawn, we set a flag which
causes drawcommits to throw away everything drawn on the canvas and redraw
the visible rows.
Signed-off-by: Paul Mackerras <paulus@samba.org>