diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Editor.cxx | 27 | ||||
| -rw-r--r-- | src/Editor.h | 2 | ||||
| -rw-r--r-- | src/ScintillaBase.cxx | 4 | 
3 files changed, 22 insertions, 11 deletions
| diff --git a/src/Editor.cxx b/src/Editor.cxx index 7af0e7325..0958d8076 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -355,12 +355,12 @@ SelectionPosition Editor::ClampPositionIntoDocument(SelectionPosition sp) const  	}  } -Point Editor::LocationFromPosition(int pos) { +Point Editor::LocationFromPosition(SelectionPosition pos) {  	Point pt;  	RefreshStyleData(); -	if (pos == INVALID_POSITION) +	if (pos.Position() == INVALID_POSITION)  		return pt; -	int line = pdoc->LineFromPosition(pos); +	int line = pdoc->LineFromPosition(pos.Position());  	int lineVisible = cs.DisplayFromDoc(line);  	//Platform::DebugPrintf("line=%d\n", line);  	AutoSurface surface(this); @@ -371,7 +371,7 @@ Point Editor::LocationFromPosition(int pos) {  		pt.x = 0;  		unsigned int posLineStart = pdoc->LineStart(line);  		LayoutLine(line, surface, vs, ll, wrapWidth); -		int posInLine = pos - posLineStart; +		int posInLine = pos.Position() - posLineStart;  		// In case of very long line put x at arbitrary large position  		if (posInLine > ll->maxLineLength) {  			pt.x = ll->positions[ll->maxLineLength] - ll->positions[ll->LineStart(ll->lines)]; @@ -392,17 +392,22 @@ Point Editor::LocationFromPosition(int pos) {  		}  		pt.x += vs.fixedColumnWidth - xOffset;  	} +	pt.x += pos.VirtualSpace() * vs.spaceWidth;  	return pt;  } +Point Editor::LocationFromPosition(int pos) { +	return LocationFromPosition(SelectionPosition(pos)); +} +  int Editor::XFromPosition(int pos) {  	Point pt = LocationFromPosition(pos);  	return pt.x - vs.fixedColumnWidth + xOffset;  }  int Editor::XFromPosition(SelectionPosition sp) { -	Point pt = LocationFromPosition(sp.Position()); -	return pt.x + sp.VirtualSpace() * vs.spaceWidth - vs.fixedColumnWidth + xOffset; +	Point pt = LocationFromPosition(sp); +	return pt.x - vs.fixedColumnWidth + xOffset;  }  int Editor::LineFromLocation(Point pt) { @@ -896,12 +901,16 @@ SelectionPosition Editor::MovePositionSoVisible(int pos, int moveDir) {  	return MovePositionSoVisible(SelectionPosition(pos), moveDir);  } +Point Editor::PointMainCaret() { +	return LocationFromPosition(sel.Range(sel.Main()).caret); +} +  /**   * Choose the x position that the caret will try to stick to   * as it moves up and down.   */  void Editor::SetLastXChosen() { -	Point pt = LocationFromPosition(sel.MainCaret()); +	Point pt = PointMainCaret();  	lastXChosen = pt.x;  } @@ -946,7 +955,7 @@ void Editor::HorizontalScrollTo(int xPos) {  void Editor::MoveCaretInsideView(bool ensureVisible) {  	PRectangle rcClient = GetTextRectangle(); -	Point pt = LocationFromPosition(sel.MainCaret()); +	Point pt = PointMainCaret();  	if (pt.y < rcClient.top) {  		MovePositionTo(SPositionFromLocation(  		            Point(lastXChosen, rcClient.top)), @@ -4521,7 +4530,7 @@ void Editor::NewLine() {  }  void Editor::CursorUpOrDown(int direction, Selection::selTypes selt) { -	Point pt = LocationFromPosition(sel.MainCaret()); +	Point pt = PointMainCaret();  	int lineDoc = pdoc->LineFromPosition(sel.MainCaret());  	Point ptStartLine = LocationFromPosition(pdoc->LineStart(lineDoc));  	int subLine = (pt.y - ptStartLine.y) / vs.lineHeight; diff --git a/src/Editor.h b/src/Editor.h index ab1e9a1e8..68580fdaa 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -258,6 +258,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	int LinesToScroll();  	int MaxScrollPos();  	SelectionPosition ClampPositionIntoDocument(SelectionPosition sp) const; +	Point LocationFromPosition(SelectionPosition pos);  	Point LocationFromPosition(int pos);  	int XFromPosition(int pos);  	int XFromPosition(SelectionPosition sp); @@ -295,6 +296,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	int MovePositionTo(int newPos, Selection::selTypes sel=Selection::noSel, bool ensureVisible=true);  	SelectionPosition MovePositionSoVisible(SelectionPosition pos, int moveDir);  	SelectionPosition MovePositionSoVisible(int pos, int moveDir); +	Point PointMainCaret();  	void SetLastXChosen();  	void ScrollTo(int line, bool moveThumb=true); diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index b47986ff0..0a8912c7b 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -226,7 +226,7 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {  			return;  		}  	} -	ac.Start(wMain, idAutoComplete, sel.MainCaret(), LocationFromPosition(sel.MainCaret()), +	ac.Start(wMain, idAutoComplete, sel.MainCaret(), PointMainCaret(),  				lenEntered, vs.lineHeight, IsUnicodeMode());  	PRectangle rcClient = GetClientRectangle(); @@ -240,7 +240,7 @@ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {  	if (pt.x >= rcClient.right - widthLB) {  		HorizontalScrollTo(xOffset + pt.x - rcClient.right + widthLB);  		Redraw(); -		pt = LocationFromPosition(sel.MainCaret()); +		pt = PointMainCaret();  	}  	PRectangle rcac;  	rcac.left = pt.x - ac.lb->CaretFromEdge(); | 
