diff options
| -rw-r--r-- | src/EditView.cxx | 17 | ||||
| -rw-r--r-- | src/PositionCache.cxx | 4 | ||||
| -rw-r--r-- | src/PositionCache.h | 1 |
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); }; |
