diff options
author | Neil <nyamatongwe@gmail.com> | 2021-09-07 16:28:35 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-09-07 16:28:35 +1000 |
commit | dff533101fae1223831eddd66c6685573f221ba9 (patch) | |
tree | 4b6377b046228f2b6988a85d715eb5c57fda54da | |
parent | 044a2a4b7414c82030112cc1be7cc810c21d2e48 (diff) | |
download | scintilla-mirror-dff533101fae1223831eddd66c6685573f221ba9.tar.gz |
Move bulk of PaintMargin into PaintOneMargin which paints one margin.
This reduces nesting and indentation.
-rw-r--r-- | src/MarginView.cxx | 503 | ||||
-rw-r--r-- | src/MarginView.h | 2 |
2 files changed, 256 insertions, 249 deletions
diff --git a/src/MarginView.cxx b/src/MarginView.cxx index 50e3822d3..50469a401 100644 --- a/src/MarginView.cxx +++ b/src/MarginView.cxx @@ -172,21 +172,263 @@ static MarkerOutline SubstituteMarkerIfEmpty(MarkerOutline markerCheck, MarkerOu return markerCheck; } +void MarginView::PaintOneMargin(Surface *surface, Sci::Line topLine, PRectangle rc, PRectangle rcOneMargin, size_t margin, + const EditModel &model, const ViewStyle &vs) { + const Point ptOrigin = model.GetVisibleOriginInMain(); + const Sci::Line lineStartPaint = static_cast<Sci::Line>(rcOneMargin.top + ptOrigin.y) / vs.lineHeight; + Sci::Line visibleLine = model.TopLineOfMain() + lineStartPaint; + XYPOSITION yposScreen = lineStartPaint * vs.lineHeight - ptOrigin.y; + // Work out whether the top line is whitespace located after a + // lessening of fold level which implies a 'fold tail' but which should not + // be displayed until the last of a sequence of whitespace. + bool needWhiteClosure = false; + if (vs.ms[margin].ShowsFolding()) { + const FoldLevel level = model.pdoc->GetFoldLevel(model.pcs->DocFromDisplay(visibleLine)); + if (LevelIsWhitespace(level)) { + Sci::Line lineBack = model.pcs->DocFromDisplay(visibleLine); + FoldLevel levelPrev = level; + while ((lineBack > 0) && LevelIsWhitespace(levelPrev)) { + lineBack--; + levelPrev = model.pdoc->GetFoldLevel(lineBack); + } + if (!LevelIsHeader(levelPrev)) { + if (LevelNumber(level) < LevelNumber(levelPrev)) + needWhiteClosure = true; + } + } + if (highlightDelimiter.isEnabled) { + const Sci::Line lastLine = model.pcs->DocFromDisplay(topLine + model.LinesOnScreen()) + 1; + model.pdoc->GetHighlightDelimiters(highlightDelimiter, + model.pdoc->SciLineFromPosition(model.sel.MainCaret()), lastLine); + } + } + + // Old code does not know about new markers needed to distinguish all cases + const MarkerOutline folderOpenMid = SubstituteMarkerIfEmpty(MarkerOutline::FolderOpenMid, + MarkerOutline::FolderOpen, vs); + const MarkerOutline folderEnd = SubstituteMarkerIfEmpty(MarkerOutline::FolderEnd, + MarkerOutline::Folder, vs); + + while ((visibleLine < model.pcs->LinesDisplayed()) && yposScreen < rc.bottom) { + + PLATFORM_ASSERT(visibleLine < model.pcs->LinesDisplayed()); + const Sci::Line lineDoc = model.pcs->DocFromDisplay(visibleLine); + PLATFORM_ASSERT(model.pcs->GetVisible(lineDoc)); + const Sci::Line firstVisibleLine = model.pcs->DisplayFromDoc(lineDoc); + const Sci::Line lastVisibleLine = model.pcs->DisplayLastFromDoc(lineDoc); + const bool firstSubLine = visibleLine == firstVisibleLine; + const bool lastSubLine = visibleLine == lastVisibleLine; + + int marks = model.pdoc->GetMark(lineDoc); + if (!firstSubLine) + marks = 0; + + bool headWithTail = false; + + if (vs.ms[margin].ShowsFolding()) { + // Decide which fold indicator should be displayed + const FoldLevel level = model.pdoc->GetFoldLevel(lineDoc); + const FoldLevel levelNext = model.pdoc->GetFoldLevel(lineDoc + 1); + const FoldLevel levelNum = LevelNumberPart(level); + const FoldLevel levelNextNum = LevelNumberPart(levelNext); + if (LevelIsHeader(level)) { + if (firstSubLine) { + if (levelNum < levelNextNum) { + if (model.pcs->GetExpanded(lineDoc)) { + if (levelNum == FoldLevel::Base) + marks |= 1 << MarkerOutline::FolderOpen; + else + marks |= 1 << folderOpenMid; + } else { + if (levelNum == FoldLevel::Base) + marks |= 1 << MarkerOutline::Folder; + else + marks |= 1 << folderEnd; + } + } else if (levelNum > FoldLevel::Base) { + marks |= 1 << MarkerOutline::FolderSub; + } + } else { + if (levelNum < levelNextNum) { + if (model.pcs->GetExpanded(lineDoc)) { + marks |= 1 << MarkerOutline::FolderSub; + } else if (levelNum > FoldLevel::Base) { + marks |= 1 << MarkerOutline::FolderSub; + } + } else if (levelNum > FoldLevel::Base) { + marks |= 1 << MarkerOutline::FolderSub; + } + } + needWhiteClosure = false; + const Sci::Line firstFollowupLine = model.pcs->DocFromDisplay(model.pcs->DisplayFromDoc(lineDoc + 1)); + const FoldLevel firstFollowupLineLevel = model.pdoc->GetFoldLevel(firstFollowupLine); + const FoldLevel secondFollowupLineLevelNum = LevelNumberPart(model.pdoc->GetFoldLevel(firstFollowupLine + 1)); + if (!model.pcs->GetExpanded(lineDoc)) { + if (LevelIsWhitespace(firstFollowupLineLevel) && + (levelNum > secondFollowupLineLevelNum)) + needWhiteClosure = true; + + if (highlightDelimiter.IsFoldBlockHighlighted(firstFollowupLine)) + headWithTail = true; + } + } else if (LevelIsWhitespace(level)) { + if (needWhiteClosure) { + if (LevelIsWhitespace(levelNext)) { + marks |= 1 << MarkerOutline::FolderSub; + } else if (levelNextNum > FoldLevel::Base) { + marks |= 1 << MarkerOutline::FolderMidTail; + needWhiteClosure = false; + } else { + marks |= 1 << MarkerOutline::FolderTail; + needWhiteClosure = false; + } + } else if (levelNum > FoldLevel::Base) { + if (levelNextNum < levelNum) { + if (levelNextNum > FoldLevel::Base) { + marks |= 1 << MarkerOutline::FolderMidTail; + } else { + marks |= 1 << MarkerOutline::FolderTail; + } + } else { + marks |= 1 << MarkerOutline::FolderSub; + } + } + } else if (levelNum > FoldLevel::Base) { + if (levelNextNum < levelNum) { + needWhiteClosure = false; + if (LevelIsWhitespace(levelNext)) { + marks |= 1 << MarkerOutline::FolderSub; + needWhiteClosure = true; + } else if (lastSubLine) { + if (levelNextNum > FoldLevel::Base) { + marks |= 1 << MarkerOutline::FolderMidTail; + } else { + marks |= 1 << MarkerOutline::FolderTail; + } + } else { + marks |= 1 << MarkerOutline::FolderSub; + } + } else { + marks |= 1 << MarkerOutline::FolderSub; + } + } + } + + marks &= vs.ms[margin].mask; + + const PRectangle rcMarker( + rcOneMargin.left, + static_cast<XYPOSITION>(yposScreen), + rcOneMargin.right, + static_cast<XYPOSITION>(yposScreen + vs.lineHeight)); + if (vs.ms[margin].style == MarginType::Number) { + if (firstSubLine) { + std::string sNumber; + if (lineDoc >= 0) { + sNumber = std::to_string(lineDoc + 1); + } + if (FlagSet(model.foldFlags, (FoldFlag::LevelNumbers | FoldFlag::LineState))) { + char number[100] = ""; + if (FlagSet(model.foldFlags, FoldFlag::LevelNumbers)) { + const FoldLevel lev = model.pdoc->GetFoldLevel(lineDoc); + sprintf(number, "%c%c %03X %03X", + LevelIsHeader(lev) ? 'H' : '_', + LevelIsWhitespace(lev) ? 'W' : '_', + LevelNumber(lev), + static_cast<int>(lev) >> 16 + ); + } else { + const int state = model.pdoc->GetLineState(lineDoc); + sprintf(number, "%0X", state); + } + sNumber = number; + } + PRectangle rcNumber = rcMarker; + // Right justify + const XYPOSITION width = surface->WidthText(vs.styles[StyleLineNumber].font.get(), sNumber); + const XYPOSITION xpos = rcNumber.right - width - vs.marginNumberPadding; + rcNumber.left = xpos; + DrawTextNoClipPhase(surface, rcNumber, vs.styles[StyleLineNumber], + rcNumber.top + vs.maxAscent, sNumber, DrawPhase::all); + } else if (FlagSet(vs.wrap.visualFlags, WrapVisualFlag::Margin)) { + PRectangle rcWrapMarker = rcMarker; + rcWrapMarker.right -= wrapMarkerPaddingRight; + rcWrapMarker.left = rcWrapMarker.right - vs.styles[StyleLineNumber].aveCharWidth; + if (!customDrawWrapMarker) { + DrawWrapMarker(surface, rcWrapMarker, false, vs.styles[StyleLineNumber].fore); + } else { + customDrawWrapMarker(surface, rcWrapMarker, false, vs.styles[StyleLineNumber].fore); + } + } + } else if (vs.ms[margin].style == MarginType::Text || vs.ms[margin].style == MarginType::RText) { + const StyledText stMargin = model.pdoc->MarginStyledText(lineDoc); + if (stMargin.text && ValidStyledText(vs, vs.marginStyleOffset, stMargin)) { + if (firstSubLine) { + surface->FillRectangle(rcMarker, + vs.styles[stMargin.StyleAt(0) + vs.marginStyleOffset].back); + PRectangle rcText = rcMarker; + if (vs.ms[margin].style == MarginType::RText) { + const int width = WidestLineWidth(surface, vs, vs.marginStyleOffset, stMargin); + rcText.left = rcText.right - width - 3; + } + DrawStyledText(surface, vs, vs.marginStyleOffset, rcText, + stMargin, 0, stMargin.length, DrawPhase::all); + } else { + // if we're displaying annotation lines, colour the margin to match the associated document line + const int annotationLines = model.pdoc->AnnotationLines(lineDoc); + if (annotationLines && (visibleLine > lastVisibleLine - annotationLines)) { + surface->FillRectangle(rcMarker, vs.styles[stMargin.StyleAt(0) + vs.marginStyleOffset].back); + } + } + } + } + + if (marks) { + for (int markBit = 0; (markBit < 32) && marks; markBit++) { + if (marks & 1) { + LineMarker::FoldPart part = LineMarker::FoldPart::undefined; + if (vs.ms[margin].ShowsFolding() && highlightDelimiter.IsFoldBlockHighlighted(lineDoc)) { + if (highlightDelimiter.IsBodyOfFoldBlock(lineDoc)) { + part = LineMarker::FoldPart::body; + } else if (highlightDelimiter.IsHeadOfFoldBlock(lineDoc)) { + if (firstSubLine) { + part = headWithTail ? LineMarker::FoldPart::headWithTail : LineMarker::FoldPart::head; + } else { + if (model.pcs->GetExpanded(lineDoc) || headWithTail) { + part = LineMarker::FoldPart::body; + } else { + part = LineMarker::FoldPart::undefined; + } + } + } else if (highlightDelimiter.IsTailOfFoldBlock(lineDoc)) { + part = LineMarker::FoldPart::tail; + } + } + vs.markers[markBit].Draw(surface, rcMarker, vs.styles[StyleLineNumber].font.get(), part, vs.ms[margin].style); + } + marks >>= 1; + } + } + + visibleLine++; + yposScreen += vs.lineHeight; + } +} + void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc, PRectangle rcMargin, const EditModel &model, const ViewStyle &vs) { - PRectangle rcSelMargin = rcMargin; - rcSelMargin.right = rcMargin.left; - if (rcSelMargin.bottom < rc.bottom) - rcSelMargin.bottom = rc.bottom; + PRectangle rcOneMargin = rcMargin; + rcOneMargin.right = rcMargin.left; + if (rcOneMargin.bottom < rc.bottom) + rcOneMargin.bottom = rc.bottom; const Point ptOrigin = model.GetVisibleOriginInMain(); - const Font *fontLineNumber = vs.styles[StyleLineNumber].font.get(); for (size_t margin = 0; margin < vs.ms.size(); margin++) { if (vs.ms[margin].width > 0) { - rcSelMargin.left = rcSelMargin.right; - rcSelMargin.right = rcSelMargin.left + vs.ms[margin].width; + rcOneMargin.left = rcOneMargin.right; + rcOneMargin.right = rcOneMargin.left + vs.ms[margin].width; if (vs.ms[margin].style != MarginType::Number) { if (vs.ms[margin].ShowsFolding()) { @@ -194,7 +436,7 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc, // Ensure patterns line up when scrolling with separate margin view // by choosing correctly aligned variant. const bool invertPhase = static_cast<int>(ptOrigin.y) & 1; - surface->FillRectangle(rcSelMargin, + surface->FillRectangle(rcOneMargin, invertPhase ? *pixmapSelPattern : *pixmapSelPatternOffset1); } else { ColourRGBA colour; @@ -212,255 +454,18 @@ void MarginView::PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc, colour = vs.styles[StyleLineNumber].back; break; } - surface->FillRectangle(rcSelMargin, colour); + surface->FillRectangle(rcOneMargin, colour); } } else { - surface->FillRectangle(rcSelMargin, vs.styles[StyleLineNumber].back); + surface->FillRectangle(rcOneMargin, vs.styles[StyleLineNumber].back); } - const Sci::Line lineStartPaint = static_cast<Sci::Line>(rcMargin.top + ptOrigin.y) / vs.lineHeight; - Sci::Line visibleLine = model.TopLineOfMain() + lineStartPaint; - Sci::Position yposScreen = lineStartPaint * vs.lineHeight - static_cast<Sci::Position>(ptOrigin.y); - // Work out whether the top line is whitespace located after a - // lessening of fold level which implies a 'fold tail' but which should not - // be displayed until the last of a sequence of whitespace. - bool needWhiteClosure = false; - if (vs.ms[margin].ShowsFolding()) { - const FoldLevel level = model.pdoc->GetFoldLevel(model.pcs->DocFromDisplay(visibleLine)); - if (LevelIsWhitespace(level)) { - Sci::Line lineBack = model.pcs->DocFromDisplay(visibleLine); - FoldLevel levelPrev = level; - while ((lineBack > 0) && LevelIsWhitespace(levelPrev)) { - lineBack--; - levelPrev = model.pdoc->GetFoldLevel(lineBack); - } - if (!LevelIsHeader(levelPrev)) { - if (LevelNumber(level) < LevelNumber(levelPrev)) - needWhiteClosure = true; - } - } - if (highlightDelimiter.isEnabled) { - const Sci::Line lastLine = model.pcs->DocFromDisplay(topLine + model.LinesOnScreen()) + 1; - model.pdoc->GetHighlightDelimiters(highlightDelimiter, - model.pdoc->SciLineFromPosition(model.sel.MainCaret()), lastLine); - } - } - - // Old code does not know about new markers needed to distinguish all cases - const MarkerOutline folderOpenMid = SubstituteMarkerIfEmpty(MarkerOutline::FolderOpenMid, - MarkerOutline::FolderOpen, vs); - const MarkerOutline folderEnd = SubstituteMarkerIfEmpty(MarkerOutline::FolderEnd, - MarkerOutline::Folder, vs); - - while ((visibleLine < model.pcs->LinesDisplayed()) && yposScreen < rc.bottom) { - - PLATFORM_ASSERT(visibleLine < model.pcs->LinesDisplayed()); - const Sci::Line lineDoc = model.pcs->DocFromDisplay(visibleLine); - PLATFORM_ASSERT(model.pcs->GetVisible(lineDoc)); - const Sci::Line firstVisibleLine = model.pcs->DisplayFromDoc(lineDoc); - const Sci::Line lastVisibleLine = model.pcs->DisplayLastFromDoc(lineDoc); - const bool firstSubLine = visibleLine == firstVisibleLine; - const bool lastSubLine = visibleLine == lastVisibleLine; - - int marks = model.pdoc->GetMark(lineDoc); - if (!firstSubLine) - marks = 0; - - bool headWithTail = false; - - if (vs.ms[margin].ShowsFolding()) { - // Decide which fold indicator should be displayed - const FoldLevel level = model.pdoc->GetFoldLevel(lineDoc); - const FoldLevel levelNext = model.pdoc->GetFoldLevel(lineDoc + 1); - const FoldLevel levelNum = LevelNumberPart(level); - const FoldLevel levelNextNum = LevelNumberPart(levelNext); - if (LevelIsHeader(level)) { - if (firstSubLine) { - if (levelNum < levelNextNum) { - if (model.pcs->GetExpanded(lineDoc)) { - if (levelNum == FoldLevel::Base) - marks |= 1 << MarkerOutline::FolderOpen; - else - marks |= 1 << folderOpenMid; - } else { - if (levelNum == FoldLevel::Base) - marks |= 1 << MarkerOutline::Folder; - else - marks |= 1 << folderEnd; - } - } else if (levelNum > FoldLevel::Base) { - marks |= 1 << MarkerOutline::FolderSub; - } - } else { - if (levelNum < levelNextNum) { - if (model.pcs->GetExpanded(lineDoc)) { - marks |= 1 << MarkerOutline::FolderSub; - } else if (levelNum > FoldLevel::Base) { - marks |= 1 << MarkerOutline::FolderSub; - } - } else if (levelNum > FoldLevel::Base) { - marks |= 1 << MarkerOutline::FolderSub; - } - } - needWhiteClosure = false; - const Sci::Line firstFollowupLine = model.pcs->DocFromDisplay(model.pcs->DisplayFromDoc(lineDoc + 1)); - const FoldLevel firstFollowupLineLevel = model.pdoc->GetFoldLevel(firstFollowupLine); - const FoldLevel secondFollowupLineLevelNum = LevelNumberPart(model.pdoc->GetFoldLevel(firstFollowupLine + 1)); - if (!model.pcs->GetExpanded(lineDoc)) { - if (LevelIsWhitespace(firstFollowupLineLevel) && - (levelNum > secondFollowupLineLevelNum)) - needWhiteClosure = true; - - if (highlightDelimiter.IsFoldBlockHighlighted(firstFollowupLine)) - headWithTail = true; - } - } else if (LevelIsWhitespace(level)) { - if (needWhiteClosure) { - if (LevelIsWhitespace(levelNext)) { - marks |= 1 << MarkerOutline::FolderSub; - } else if (levelNextNum > FoldLevel::Base) { - marks |= 1 << MarkerOutline::FolderMidTail; - needWhiteClosure = false; - } else { - marks |= 1 << MarkerOutline::FolderTail; - needWhiteClosure = false; - } - } else if (levelNum > FoldLevel::Base) { - if (levelNextNum < levelNum) { - if (levelNextNum > FoldLevel::Base) { - marks |= 1 << MarkerOutline::FolderMidTail; - } else { - marks |= 1 << MarkerOutline::FolderTail; - } - } else { - marks |= 1 << MarkerOutline::FolderSub; - } - } - } else if (levelNum > FoldLevel::Base) { - if (levelNextNum < levelNum) { - needWhiteClosure = false; - if (LevelIsWhitespace(levelNext)) { - marks |= 1 << MarkerOutline::FolderSub; - needWhiteClosure = true; - } else if (lastSubLine) { - if (levelNextNum > FoldLevel::Base) { - marks |= 1 << MarkerOutline::FolderMidTail; - } else { - marks |= 1 << MarkerOutline::FolderTail; - } - } else { - marks |= 1 << MarkerOutline::FolderSub; - } - } else { - marks |= 1 << MarkerOutline::FolderSub; - } - } - } - - marks &= vs.ms[margin].mask; - - const PRectangle rcMarker( - rcSelMargin.left, - static_cast<XYPOSITION>(yposScreen), - rcSelMargin.right, - static_cast<XYPOSITION>(yposScreen + vs.lineHeight)); - if (vs.ms[margin].style == MarginType::Number) { - if (firstSubLine) { - std::string sNumber; - if (lineDoc >= 0) { - sNumber = std::to_string(lineDoc + 1); - } - if (FlagSet(model.foldFlags, (FoldFlag::LevelNumbers | FoldFlag::LineState))) { - char number[100] = ""; - if (FlagSet(model.foldFlags, FoldFlag::LevelNumbers)) { - const FoldLevel lev = model.pdoc->GetFoldLevel(lineDoc); - sprintf(number, "%c%c %03X %03X", - LevelIsHeader(lev) ? 'H' : '_', - LevelIsWhitespace(lev) ? 'W' : '_', - LevelNumber(lev), - static_cast<int>(lev) >> 16 - ); - } else { - const int state = model.pdoc->GetLineState(lineDoc); - sprintf(number, "%0X", state); - } - sNumber = number; - } - PRectangle rcNumber = rcMarker; - // Right justify - const XYPOSITION width = surface->WidthText(fontLineNumber, sNumber); - const XYPOSITION xpos = rcNumber.right - width - vs.marginNumberPadding; - rcNumber.left = xpos; - DrawTextNoClipPhase(surface, rcNumber, vs.styles[StyleLineNumber], - rcNumber.top + vs.maxAscent, sNumber, DrawPhase::all); - } else if (FlagSet(vs.wrap.visualFlags, WrapVisualFlag::Margin)) { - PRectangle rcWrapMarker = rcMarker; - rcWrapMarker.right -= wrapMarkerPaddingRight; - rcWrapMarker.left = rcWrapMarker.right - vs.styles[StyleLineNumber].aveCharWidth; - if (!customDrawWrapMarker) { - DrawWrapMarker(surface, rcWrapMarker, false, vs.styles[StyleLineNumber].fore); - } else { - customDrawWrapMarker(surface, rcWrapMarker, false, vs.styles[StyleLineNumber].fore); - } - } - } else if (vs.ms[margin].style == MarginType::Text || vs.ms[margin].style == MarginType::RText) { - const StyledText stMargin = model.pdoc->MarginStyledText(lineDoc); - if (stMargin.text && ValidStyledText(vs, vs.marginStyleOffset, stMargin)) { - if (firstSubLine) { - surface->FillRectangle(rcMarker, - vs.styles[stMargin.StyleAt(0) + vs.marginStyleOffset].back); - PRectangle rcText = rcMarker; - if (vs.ms[margin].style == MarginType::RText) { - const int width = WidestLineWidth(surface, vs, vs.marginStyleOffset, stMargin); - rcText.left = rcText.right - width - 3; - } - DrawStyledText(surface, vs, vs.marginStyleOffset, rcText, - stMargin, 0, stMargin.length, DrawPhase::all); - } else { - // if we're displaying annotation lines, colour the margin to match the associated document line - const int annotationLines = model.pdoc->AnnotationLines(lineDoc); - if (annotationLines && (visibleLine > lastVisibleLine - annotationLines)) { - surface->FillRectangle(rcMarker, vs.styles[stMargin.StyleAt(0) + vs.marginStyleOffset].back); - } - } - } - } - - if (marks) { - for (int markBit = 0; (markBit < 32) && marks; markBit++) { - if (marks & 1) { - LineMarker::FoldPart part = LineMarker::FoldPart::undefined; - if (vs.ms[margin].ShowsFolding() && highlightDelimiter.IsFoldBlockHighlighted(lineDoc)) { - if (highlightDelimiter.IsBodyOfFoldBlock(lineDoc)) { - part = LineMarker::FoldPart::body; - } else if (highlightDelimiter.IsHeadOfFoldBlock(lineDoc)) { - if (firstSubLine) { - part = headWithTail ? LineMarker::FoldPart::headWithTail : LineMarker::FoldPart::head; - } else { - if (model.pcs->GetExpanded(lineDoc) || headWithTail) { - part = LineMarker::FoldPart::body; - } else { - part = LineMarker::FoldPart::undefined; - } - } - } else if (highlightDelimiter.IsTailOfFoldBlock(lineDoc)) { - part = LineMarker::FoldPart::tail; - } - } - vs.markers[markBit].Draw(surface, rcMarker, fontLineNumber, part, vs.ms[margin].style); - } - marks >>= 1; - } - } - - visibleLine++; - yposScreen += vs.lineHeight; - } + PaintOneMargin(surface, topLine, rc, rcOneMargin, margin, model, vs); } } PRectangle rcBlankMargin = rcMargin; - rcBlankMargin.left = rcSelMargin.right; + rcBlankMargin.left = rcOneMargin.right; surface->FillRectangle(rcBlankMargin, vs.styles[StyleDefault].back); } diff --git a/src/MarginView.h b/src/MarginView.h index f73a18858..6088ed3d6 100644 --- a/src/MarginView.h +++ b/src/MarginView.h @@ -36,6 +36,8 @@ public: void DropGraphics() noexcept; void RefreshPixMaps(Surface *surfaceWindow, const ViewStyle &vsDraw); + void PaintOneMargin(Surface *surface, Sci::Line topLine, PRectangle rc, PRectangle rcMargin, size_t margin, + const EditModel &model, const ViewStyle &vs); void PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc, PRectangle rcMargin, const EditModel &model, const ViewStyle &vs); }; |