aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2026-02-18 13:21:16 +1100
committerNeil <nyamatongwe@gmail.com>2026-02-18 13:21:16 +1100
commit1ffe844d22600a4acd248c14bd0006e000622d93 (patch)
treebf14609595855b86fbea0ec921a4798e6dea47c5
parentcc4f8a10905045aed04ae8c48a34581e16752dcb (diff)
downloadscintilla-mirror-1ffe844d22600a4acd248c14bd0006e000622d93.tar.gz
Hoist calculation of virtual space on a line into a method and simplify callers.
-rw-r--r--src/EditModel.cxx4
-rw-r--r--src/EditModel.h1
-rw-r--r--src/EditView.cxx24
3 files changed, 13 insertions, 16 deletions
diff --git a/src/EditModel.cxx b/src/EditModel.cxx
index 65d39f9e7..cad0c3ade 100644
--- a/src/EditModel.cxx
+++ b/src/EditModel.cxx
@@ -167,6 +167,10 @@ InSelection EditModel::LineEndInSelection(Sci::Line lineDoc) const {
return sel.InSelectionForEOL(posAfterLineEnd);
}
+Sci::Position EditModel::VirtualSpaceForLine(Sci::Line lineDoc) const {
+ return sel.VirtualSpaceFor(pdoc->LineEnd(lineDoc));
+}
+
int EditModel::GetMark(Sci::Line line) const {
return pdoc->GetMark(line, FlagSet(changeHistoryOption, ChangeHistoryOption::Markers));
}
diff --git a/src/EditModel.h b/src/EditModel.h
index dcaf99613..b23169f78 100644
--- a/src/EditModel.h
+++ b/src/EditModel.h
@@ -108,6 +108,7 @@ public:
const char *GetDefaultFoldDisplayText() const noexcept;
const char *GetFoldDisplayText(Sci::Line lineDoc) const noexcept;
InSelection LineEndInSelection(Sci::Line lineDoc) const;
+ [[nodiscard]] Sci::Position VirtualSpaceForLine(Sci::Line lineDoc) const;
[[nodiscard]] int GetMark(Sci::Line line) const;
void EnsureModelState();
diff --git a/src/EditView.cxx b/src/EditView.cxx
index 48b1ba5de..9ebf9a759 100644
--- a/src/EditView.cxx
+++ b/src/EditView.cxx
@@ -1002,11 +1002,9 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle
PRectangle rcSegment = rcLine;
const bool lastSubLine = subLine == (ll->lines - 1);
- XYPOSITION virtualSpace = 0;
- if (lastSubLine) {
- const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth;
- virtualSpace = static_cast<XYPOSITION>(model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line))) * spaceWidth;
- }
+ const Sci::Position virtualSpaces = lastSubLine ? model.VirtualSpaceForLine(line) : 0;
+ const XYPOSITION spaceWidth = lastSubLine ? vsDraw.styles[ll->EndLineStyle()].spaceWidth : 0;
+ const XYPOSITION virtualSpace = static_cast<XYPOSITION>(virtualSpaces) * spaceWidth;
const XYPOSITION xEol = ll->positions[lineEnd] - subLineStart;
// Fill the virtual space and show selections within it
@@ -1017,12 +1015,10 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle
surface->FillRectangleAligned(rcSegment, backgroundFill);
if (vsDraw.selection.visible && (vsDraw.selection.layer == Layer::Base)) {
const SelectionSegment virtualSpaceRange(SelectionPosition(model.pdoc->LineEnd(line)),
- SelectionPosition(model.pdoc->LineEnd(line),
- model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line))));
+ SelectionPosition(model.pdoc->LineEnd(line), virtualSpaces));
for (size_t r = 0; r<model.sel.Count(); r++) {
const SelectionSegment portion = model.sel.Range(r).Intersect(virtualSpaceRange);
if (!portion.Empty()) {
- const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth;
rcSegment.left = xStart + ll->positions[portion.start.Position() - posLineStart] -
subLineStart + portion.start.VirtualSpaceWidth(spaceWidth);
rcSegment.right = xStart + ll->positions[portion.end.Position() - posLineStart] -
@@ -1185,8 +1181,7 @@ void EditView::DrawFoldDisplayText(Surface *surface, const EditModel &model, con
}
const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth;
- const XYPOSITION virtualSpace = static_cast<XYPOSITION>(model.sel.VirtualSpaceFor(
- model.pdoc->LineEnd(line))) * spaceWidth;
+ const XYPOSITION virtualSpace = static_cast<XYPOSITION>(model.VirtualSpaceForLine(line)) * spaceWidth;
rcSegment.left = xStart + ll->positions[ll->numCharsInLine] - subLineStart + virtualSpace + vsDraw.aveCharWidth;
rcSegment.right = rcSegment.left + static_cast<XYPOSITION>(widthFoldDisplayText);
@@ -1264,8 +1259,7 @@ void EditView::DrawEOLAnnotationText(Surface *surface, const EditModel &model, c
padding.left + padding.right);
const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth;
- const XYPOSITION virtualSpace = static_cast<XYPOSITION>(model.sel.VirtualSpaceFor(
- model.pdoc->LineEnd(line))) * spaceWidth;
+ const XYPOSITION virtualSpace = static_cast<XYPOSITION>(model.VirtualSpaceForLine(line)) * spaceWidth;
rcSegment.left = xStart +
ll->positions[ll->numCharsInLine] - subLineStart
+ virtualSpace + vsDraw.aveCharWidth;
@@ -1762,10 +1756,8 @@ void DrawTranslucentSelection(Surface *surface, const EditModel &model, const Vi
const XYPOSITION subLineStart = ll->positions[lineRange.start];
const XYPOSITION horizontalOffset = xStart - subLineStart;
// For each selection draw
- Sci::Position virtualSpaces = 0;
- if (subLine == (ll->lines - 1)) {
- virtualSpaces = model.sel.VirtualSpaceFor(model.pdoc->LineEnd(line));
- }
+ const Sci::Position virtualSpaces = (subLine == (ll->lines - 1)) ?
+ model.VirtualSpaceForLine(line) : 0;
const SelectionPosition posStart(posLineStart + lineRange.start);
const SelectionPosition posEnd(posLineStart + lineRange.end, virtualSpaces);
const SelectionSegment virtualSpaceRange(posStart, posEnd);