diff options
Diffstat (limited to 'src/Editor.cxx')
| -rw-r--r-- | src/Editor.cxx | 23 | 
1 files changed, 12 insertions, 11 deletions
| diff --git a/src/Editor.cxx b/src/Editor.cxx index 0096da7a2..ecff9d496 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -3175,11 +3175,11 @@ void Editor::ToggleContraction(int line) {  // Recurse up from this line to find any folds that prevent this line from being visible  // and unfold them all. -void Editor::EnsureLineVisible(int line) { -	if (!cs.GetVisible(line)) { -		int lineParent = pdoc->GetFoldParent(line); +void Editor::EnsureLineVisible(int lineDoc) { +	if (!cs.GetVisible(lineDoc)) { +		int lineParent = pdoc->GetFoldParent(lineDoc);  		if (lineParent >= 0) { -			if (line != lineParent) +			if (lineDoc != lineParent)  				EnsureLineVisible(lineParent);  			if (!cs.GetExpanded(lineParent)) {  				cs.SetExpanded(lineParent, 1); @@ -3189,20 +3189,21 @@ void Editor::EnsureLineVisible(int line) {  		SetScrollBars();  		Redraw();  	} +	int lineDisplay = cs.DisplayFromDoc(lineDoc);  	if (visiblePolicy & VISIBLE_SLOP) { -		if ((topLine > line) || ((visiblePolicy & VISIBLE_STRICT) && (topLine + visibleSlop > line))) { -			SetTopLine(Platform::Clamp(line - visibleSlop, 0, MaxScrollPos())); +		if ((topLine > lineDisplay) || ((visiblePolicy & VISIBLE_STRICT) && (topLine + visibleSlop > lineDisplay))) { +			SetTopLine(Platform::Clamp(lineDisplay - visibleSlop, 0, MaxScrollPos()));  			SetVerticalScrollPos();  			Redraw(); -		} else if ((line > topLine + LinesOnScreen() - 1) || -		           ((visiblePolicy & VISIBLE_STRICT) && (line > topLine + LinesOnScreen() - 1 - visibleSlop))) { -			SetTopLine(Platform::Clamp(line - LinesOnScreen() + 1 + visibleSlop, 0, MaxScrollPos())); +		} else if ((lineDisplay > topLine + LinesOnScreen() - 1) || +		           ((visiblePolicy & VISIBLE_STRICT) && (lineDisplay > topLine + LinesOnScreen() - 1 - visibleSlop))) { +			SetTopLine(Platform::Clamp(lineDisplay - LinesOnScreen() + 1 + visibleSlop, 0, MaxScrollPos()));  			SetVerticalScrollPos();  			Redraw();  		}  	} else { -		if ((topLine > line) || (line > topLine + LinesOnScreen() - 1) || (visiblePolicy & VISIBLE_STRICT)) { -			SetTopLine(Platform::Clamp(line - LinesOnScreen() / 2 + 1, 0, MaxScrollPos())); +		if ((topLine > lineDisplay) || (lineDisplay > topLine + LinesOnScreen() - 1) || (visiblePolicy & VISIBLE_STRICT)) { +			SetTopLine(Platform::Clamp(lineDisplay - LinesOnScreen() / 2 + 1, 0, MaxScrollPos()));  			SetVerticalScrollPos();  			Redraw();  		} | 
