aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/EditView.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/EditView.cxx')
-rw-r--r--src/EditView.cxx15
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;