aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2022-10-01 10:19:44 +1000
committerNeil <nyamatongwe@gmail.com>2022-10-01 10:19:44 +1000
commitb8202ab86ed353ebb5f6c70bde91df05a2c7a350 (patch)
treea7dd2d21176a16660cfd3c1bd54ed1ea451fd5bf /src
parent64a090697a4ce072addd4f9ea6aadca5f6cd9a86 (diff)
downloadscintilla-mirror-b8202ab86ed353ebb5f6c70bde91df05a2c7a350.tar.gz
Hoist choosing marker variants into PartForFoldHighlight and PartForBar.
PaintOneMargin is constant so mark as const. Extend scope of isExpanded to avoid recalculation. This change set does not change behaviour.
Diffstat (limited to 'src')
-rw-r--r--src/MarginView.cxx71
-rw-r--r--src/MarginView.h2
2 files changed, 40 insertions, 33 deletions
diff --git a/src/MarginView.cxx b/src/MarginView.cxx
index 6e43c0f0c..26848a909 100644
--- a/src/MarginView.cxx
+++ b/src/MarginView.cxx
@@ -239,10 +239,42 @@ int FoldingMark(FoldLevel level, FoldLevel levelNext, bool firstSubLine, bool la
return 0;
}
+LineMarker::FoldPart PartForFoldHighlight(const HighlightDelimiter &highlightDelimiter, Sci::Line lineDoc, bool firstSubLine, bool headWithTail, bool isExpanded) noexcept {
+ if (highlightDelimiter.IsFoldBlockHighlighted(lineDoc)) {
+ if (highlightDelimiter.IsBodyOfFoldBlock(lineDoc)) {
+ return LineMarker::FoldPart::body;
+ }
+ if (highlightDelimiter.IsHeadOfFoldBlock(lineDoc)) {
+ if (firstSubLine) {
+ return headWithTail ? LineMarker::FoldPart::headWithTail : LineMarker::FoldPart::head;
+ }
+ if (isExpanded || headWithTail) {
+ return LineMarker::FoldPart::body;
+ }
+ } else if (highlightDelimiter.IsTailOfFoldBlock(lineDoc)) {
+ return LineMarker::FoldPart::tail;
+ }
+ }
+ return LineMarker::FoldPart::undefined;
+}
+
+constexpr LineMarker::FoldPart PartForBar(bool markBefore, bool markAfter) {
+ if (markBefore) {
+ if (markAfter) {
+ return LineMarker::FoldPart::body;
+ }
+ return LineMarker::FoldPart::tail;
+ }
+ if (markAfter) {
+ return LineMarker::FoldPart::head;
+ }
+ return LineMarker::FoldPart::headWithTail;
+}
+
}
void MarginView::PaintOneMargin(Surface *surface, PRectangle rc, PRectangle rcOneMargin, const MarginStyle &marginStyle,
- const EditModel &model, const ViewStyle &vs) {
+ const EditModel &model, const ViewStyle &vs) const {
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;
@@ -290,6 +322,7 @@ void MarginView::PaintOneMargin(Surface *surface, PRectangle rc, PRectangle rcOn
}
bool headWithTail = false;
+ bool isExpanded = false;
if (marginStyle.ShowsFolding()) {
// Decide which fold indicator should be displayed
@@ -297,7 +330,7 @@ void MarginView::PaintOneMargin(Surface *surface, PRectangle rc, PRectangle rcOn
const FoldLevel levelNext = model.pdoc->GetFoldLevel(lineDoc + 1);
const FoldLevel levelNum = LevelNumberPart(level);
const FoldLevel levelNextNum = LevelNumberPart(levelNext);
- const bool isExpanded = model.pcs->GetExpanded(lineDoc);
+ isExpanded = model.pcs->GetExpanded(lineDoc);
marks |= FoldingMark(level, levelNext, firstSubLine, lastSubLine,
isExpanded, needWhiteClosure, folderOpenMid, folderEnd);
@@ -401,39 +434,13 @@ void MarginView::PaintOneMargin(Surface *surface, PRectangle rc, PRectangle rcOn
if (marks & 1) {
LineMarker::FoldPart part = LineMarker::FoldPart::undefined;
if (marginStyle.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;
- }
+ part = PartForFoldHighlight(highlightDelimiter, lineDoc, firstSubLine, headWithTail, isExpanded);
}
if (vs.markers[markBit].markType == MarkerSymbol::Bar) {
const int mask = 1 << markBit;
- const bool markBefore = firstSubLine ? (model.GetMark(lineDoc-1) & mask) : true;
- const bool markAfter = lastSubLine ? (model.GetMark(lineDoc+1) & mask) : true;
- if (markBefore) {
- if (markAfter) {
- part = LineMarker::FoldPart::body;
- } else {
- part = LineMarker::FoldPart::tail;
- }
- } else {
- if (markAfter) {
- part = LineMarker::FoldPart::head;
- } else {
- part = LineMarker::FoldPart::headWithTail;
- }
- }
+ const bool markBefore = firstSubLine ? (model.GetMark(lineDoc - 1) & mask) : true;
+ const bool markAfter = lastSubLine ? (model.GetMark(lineDoc + 1) & mask) : true;
+ part = PartForBar(markBefore, markAfter);
}
vs.markers[markBit].Draw(surface, rcMarker, vs.styles[StyleLineNumber].font.get(), part, marginStyle.style);
}
diff --git a/src/MarginView.h b/src/MarginView.h
index a34f52e29..629d876d7 100644
--- a/src/MarginView.h
+++ b/src/MarginView.h
@@ -37,7 +37,7 @@ public:
void DropGraphics() noexcept;
void RefreshPixMaps(Surface *surfaceWindow, const ViewStyle &vsDraw);
void PaintOneMargin(Surface *surface, PRectangle rc, PRectangle rcOneMargin, const MarginStyle &marginStyle,
- const EditModel &model, const ViewStyle &vs);
+ const EditModel &model, const ViewStyle &vs) const;
void PaintMargin(Surface *surface, Sci::Line topLine, PRectangle rc, PRectangle rcMargin,
const EditModel &model, const ViewStyle &vs);
};