diff options
| author | nyamatongwe <unknown> | 2000-04-27 14:33:08 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2000-04-27 14:33:08 +0000 | 
| commit | 1f73a5a6b589ecb8ce375f3c3313d98d7f007ce9 (patch) | |
| tree | f55b125b60eb6dc353bd0c6bce6f39f2f37e3876 /src/Editor.cxx | |
| parent | 7639831370cc8881f906bfe359dd004c7d4bd303 (diff) | |
| download | scintilla-mirror-1f73a5a6b589ecb8ce375f3c3313d98d7f007ce9.tar.gz | |
Ctrl+Up and Ctrl+Down now keep the caret visible.
Diffstat (limited to 'src/Editor.cxx')
| -rw-r--r-- | src/Editor.cxx | 20 | 
1 files changed, 18 insertions, 2 deletions
| diff --git a/src/Editor.cxx b/src/Editor.cxx index e8e0f755c..bccddf160 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -503,6 +503,19 @@ void Editor::HorizontalScrollTo(int xPos) {  	Redraw();  } +void Editor::MoveCaretInsideView() { +	PRectangle rcClient = GetTextRectangle(); +	Point pt = LocationFromPosition(currentPos); +	if (pt.y < rcClient.top) { +		MovePositionTo(PositionFromLocation( +		                   Point(lastXChosen, rcClient.top))); +	} else if ((pt.y + vs.lineHeight - 1) > rcClient.bottom) { +		int yOfLastLineFullyDisplayed = rcClient.top + (LinesOnScreen()-1) * vs.lineHeight; +		MovePositionTo(PositionFromLocation( +		                   Point(lastXChosen, rcClient.top + yOfLastLineFullyDisplayed))); +	} +} +  void Editor::EnsureCaretVisible(bool useMargin) {  	//Platform::DebugPrintf("EnsureCaretVisible %d\n", xOffset);  	PRectangle rcClient = GetTextRectangle(); @@ -1090,9 +1103,10 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) {  			// Draw the Caret  			if (line == lineCaret) { -				int xposCaret = ll.positions[posCaret - posLineStart] + xStart; +				int offset = Platform::Minimum(posCaret - posLineStart, LineLayout::maxLineLength); +				int xposCaret = ll.positions[offset] + xStart;  				int widthOverstrikeCaret = -				    ll.positions[posCaret - posLineStart + 1] - ll.positions[posCaret - posLineStart]; +				    ll.positions[offset + 1] - ll.positions[offset];  				if (posCaret == pdoc->Length())	// At end of document  					widthOverstrikeCaret = vs.aveCharWidth;  				if ((posCaret - posLineStart) >= ll.numCharsInLine)	// At end of line @@ -1829,6 +1843,7 @@ int Editor::KeyCommand(UINT iMessage) {  		break;  	case SCI_LINESCROLLDOWN:  		ScrollTo(topLine + 1); +		MoveCaretInsideView();  		break;  	case SCI_LINEUP:  		MovePositionTo(PositionFromLocation( @@ -1840,6 +1855,7 @@ int Editor::KeyCommand(UINT iMessage) {  		break;  	case SCI_LINESCROLLUP:  		ScrollTo(topLine - 1); +		MoveCaretInsideView();  		break;  	case SCI_CHARLEFT:  		if (SelectionEmpty()) { | 
