diff options
Diffstat (limited to 'src/EditView.cxx')
-rw-r--r-- | src/EditView.cxx | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx index 5b58d367a..7e2694366 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -650,7 +650,8 @@ Point EditView::LocationFromPosition(Surface *surface, const EditModel &model, S // Get the point from current position const ScreenLine screenLine(ll, subLine, vs, rcClient.right, tabWidthMinimumPixels); - pt.x = surface->XFromPosition(&screenLine, caretPosition); + std::unique_ptr<IScreenLineLayout> slLayout = surface->Layout(&screenLine); + pt.x = slLayout->XFromPosition(caretPosition); pt.x += vs.textStart - model.xOffset; @@ -719,7 +720,8 @@ SelectionPosition EditView::SPositionFromLocation(Surface *surface, const EditMo UpdateBidiData(model, vs, ll); const ScreenLine screenLine(ll, subLine, vs, rcClient.right, tabWidthMinimumPixels); - positionInLine = surface->PositionFromX(&screenLine, static_cast<XYPOSITION>(pt.x), charPosition) + + std::unique_ptr<IScreenLineLayout> slLayout = surface->Layout(&screenLine); + positionInLine = slLayout->PositionFromX(static_cast<XYPOSITION>(pt.x), charPosition) + rangeSubLine.start; } else { positionInLine = ll->FindPositionFromX(static_cast<XYPOSITION>(pt.x + subLineStart), @@ -1096,7 +1098,8 @@ static void DrawIndicator(int indicNum, Sci::Position startPos, Sci::Position en ScreenLine screenLine(ll, subLine, vsDraw, rcLine.right - xStart, tabWidthMinimumPixels); const Range lineRange = ll->SubLineRange(subLine, LineLayout::Scope::visibleOnly); - std::vector<Interval> intervals = surface->FindRangeIntervals(&screenLine, + std::unique_ptr<IScreenLineLayout> slLayout = surface->Layout(&screenLine); + std::vector<Interval> intervals = slLayout->FindRangeIntervals( startPos - lineRange.start, endPos - lineRange.start); for (const Interval &interval : intervals) { PRectangle rcInterval = rcIndic; @@ -1429,7 +1432,8 @@ void EditView::DrawCarets(Surface *surface, const EditModel &model, const ViewSt const int caretPosition = static_cast<int>(posCaret.Position() - posLineStart - ll->LineStart(subLine)); - const XYPOSITION caretLeft = surface->XFromPosition(&screenLine, caretPosition); + std::unique_ptr<IScreenLineLayout> slLayout = surface->Layout(&screenLine); + const XYPOSITION caretLeft = slLayout->XFromPosition(caretPosition); // In case of start of line, the cursor should be at the right xposCaret = caretLeft + virtualOffset; @@ -1675,8 +1679,9 @@ static void DrawTranslucentSelection(Surface *surface, const EditModel &model, c const ColourDesired background = SelectionBackground(vsDraw, r == model.sel.Main(), model.primarySelection); const ScreenLine screenLine(ll, subLine, vsDraw, rcLine.right, tabWidthMinimumPixels); + std::unique_ptr<IScreenLineLayout> slLayout = surface->Layout(&screenLine); - const std::vector<Interval> intervals = surface->FindRangeIntervals(&screenLine, selectionStart, selectionEnd); + const std::vector<Interval> intervals = slLayout->FindRangeIntervals(selectionStart, selectionEnd); for (const Interval &interval : intervals) { const XYPOSITION rcRight = interval.right + xStart; const XYPOSITION rcLeft = interval.left + xStart; |