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(); |