indicator: adjust the size to the number of visible lines, not chunks

Since two commits ago, the position of the indicator shows the position
of the viewport relative to the full buffer in terms of actual lines,
not of visual chunks (to avoid excessive computation).  But the size of
the indicator stayed constant, as if it always covered as many lines as
the edit window has rows.  But the latter will not be the case when
softwrapping occurs.  Therefore, when softwrapping, compute how many
actual lines are visible in the viewport, and adjust the size of the
indicator accordingly.
master
Benno Schulenberg 2021-04-22 11:51:07 +02:00
parent 2cdff6c32c
commit f54bc6c7d6
1 changed files with 15 additions and 1 deletions

View File

@ -3057,8 +3057,22 @@ void draw_scrollbar(void)
{
int totallines = openfile->filebot->lineno;
int fromline = openfile->edittop->lineno - 1;
int coveredlines = editwinrows;
if (ISSET(SOFTWRAP)) {
linestruct *line = openfile->edittop;
int extras = extra_chunks_in(line) - chunk_for(openfile->firstcolumn, line);
while (line->lineno + extras < fromline + editwinrows && line->next) {
line = line->next;
extras += extra_chunks_in(line);
}
coveredlines = line->lineno - fromline;
}
int lowest = (fromline * editwinrows) / totallines;
int highest = lowest + (editwinrows * editwinrows) / totallines;
int highest = lowest + (editwinrows * coveredlines) / totallines;
if (editwinrows > totallines)
highest = editwinrows;