aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/EditView.cxx17
-rw-r--r--src/PositionCache.cxx4
-rw-r--r--src/PositionCache.h1
3 files changed, 14 insertions, 8 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx
index df772395e..ee2789ee6 100644
--- a/src/EditView.cxx
+++ b/src/EditView.cxx
@@ -935,8 +935,8 @@ void FillLineRemainder(Surface *surface, const EditModel &model, const ViewStyle
const ColourOptional background = vsDraw.Background(model.GetMark(line), model.caret.active, ll->containsCaret);
if (background) {
surface->FillRectangleAligned(rcArea, Fill(*background));
- } else if (vsDraw.styles[ll->styles[ll->numCharsInLine]].eolFilled) {
- surface->FillRectangleAligned(rcArea, Fill(vsDraw.styles[ll->styles[ll->numCharsInLine]].back));
+ } else if (vsDraw.styles[ll->LastStyle()].eolFilled) {
+ surface->FillRectangleAligned(rcArea, Fill(vsDraw.styles[ll->LastStyle()].back));
} else {
surface->FillRectangleAligned(rcArea, Fill(vsDraw.styles[StyleDefault].back));
}
@@ -1010,7 +1010,7 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle
if (virtualSpace > 0.0f) {
rcSegment.left = xEol + xStart;
rcSegment.right = xEol + xStart + virtualSpace;
- const ColourRGBA backgroundFill = background.value_or(vsDraw.styles[ll->styles[ll->numCharsInLine]].back);
+ const ColourRGBA backgroundFill = background.value_or(vsDraw.styles[ll->LastStyle()].back);
surface->FillRectangleAligned(rcSegment, backgroundFill);
if (vsDraw.selection.visible && (vsDraw.selection.layer == Layer::Base)) {
const SelectionSegment virtualSpaceRange(SelectionPosition(model.pdoc->LineEnd(line)),
@@ -1115,12 +1115,13 @@ void EditView::DrawEOL(Surface *surface, const EditModel &model, const ViewStyle
} else {
if (background) {
surface->FillRectangleAligned(rcSegment, Fill(*background));
- } else if (line < model.pdoc->LinesTotal() - 1) {
- surface->FillRectangleAligned(rcSegment, Fill(vsDraw.styles[ll->styles[ll->numCharsInLine]].back));
- } else if (vsDraw.styles[ll->styles[ll->numCharsInLine]].eolFilled) {
- surface->FillRectangleAligned(rcSegment, Fill(vsDraw.styles[ll->styles[ll->numCharsInLine]].back));
} else {
- surface->FillRectangleAligned(rcSegment, Fill(vsDraw.styles[StyleDefault].back));
+ const Style &styleLast = vsDraw.styles[ll->LastStyle()];
+ if ((line < model.pdoc->LinesTotal() - 1) || styleLast.eolFilled) {
+ surface->FillRectangleAligned(rcSegment, Fill(styleLast.back));
+ } else {
+ surface->FillRectangleAligned(rcSegment, Fill(vsDraw.styles[StyleDefault].back));
+ }
}
if (eolInSelection && (line < model.pdoc->LinesTotal() - 1) && (vsDraw.selection.layer != Layer::Base)) {
surface->FillRectangleAligned(rcSegment, selectionBack);
diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx
index 16bc10f5a..abe467f10 100644
--- a/src/PositionCache.cxx
+++ b/src/PositionCache.cxx
@@ -318,6 +318,10 @@ int LineLayout::EndLineStyle() const noexcept {
return styles[std::max(numCharsBeforeEOL - 1, 0)];
}
+int LineLayout::LastStyle() const noexcept {
+ return styles[numCharsInLine];
+}
+
void LineLayout::WrapLine(const Document *pdoc, Sci::Position posLineStart, Wrap wrapState, XYPOSITION wrapWidth) {
// Document wants document positions but simpler to work in line positions
// so take care of adding and subtracting line start in a lambda.
diff --git a/src/PositionCache.h b/src/PositionCache.h
index b912c2fcc..d8f778c5c 100644
--- a/src/PositionCache.h
+++ b/src/PositionCache.h
@@ -101,6 +101,7 @@ public:
Interval Span(int start, int end) const noexcept;
Interval SpanByte(int index) const noexcept;
int EndLineStyle() const noexcept;
+ [[nodiscard]] int LastStyle() const noexcept;
void WrapLine(const Document *pdoc, Sci::Position posLineStart, Wrap wrapState, XYPOSITION wrapWidth);
};