diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 23 | ||||
-rw-r--r-- | src/LineMarker.cxx | 2 |
2 files changed, 20 insertions, 5 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 2e8654ca4..05531a650 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1745,6 +1745,7 @@ void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) { int lineDoc = cs.DocFromDisplay(visibleLine); PLATFORM_ASSERT(cs.GetVisible(lineDoc)); bool firstSubLine = visibleLine == cs.DisplayFromDoc(lineDoc); + bool lastSubLine = visibleLine == (cs.DisplayFromDoc(lineDoc + 1) - 1); // Decide which fold indicator should be displayed level = pdoc->GetLevel(lineDoc); @@ -1768,11 +1769,19 @@ void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) { else marks |= 1 << folderEnd; } - } else if (levelNum > SC_FOLDLEVELBASE){ + } else if (levelNum > SC_FOLDLEVELBASE) { marks |= 1 << SC_MARKNUM_FOLDERSUB; } } else { - marks |= 1 << SC_MARKNUM_FOLDERSUB; + if (levelNum < levelNextNum) { + if (cs.GetExpanded(lineDoc)) { + marks |= 1 << SC_MARKNUM_FOLDERSUB; + } else if (levelNum > SC_FOLDLEVELBASE) { + marks |= 1 << SC_MARKNUM_FOLDERSUB; + } + } else if (levelNum > SC_FOLDLEVELBASE) { + marks |= 1 << SC_MARKNUM_FOLDERSUB; + } } needWhiteClosure = false; } else if (level & SC_FOLDLEVELWHITEFLAG) { @@ -1803,10 +1812,14 @@ void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) { if (levelNext & SC_FOLDLEVELWHITEFLAG) { marks |= 1 << SC_MARKNUM_FOLDERSUB; needWhiteClosure = true; - } else if (levelNextNum > SC_FOLDLEVELBASE) { - marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL; + } else if (lastSubLine) { + if (levelNextNum > SC_FOLDLEVELBASE) { + marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL; + } else { + marks |= 1 << SC_MARKNUM_FOLDERTAIL; + } } else { - marks |= 1 << SC_MARKNUM_FOLDERTAIL; + marks |= 1 << SC_MARKNUM_FOLDERSUB; } } else { marks |= 1 << SC_MARKNUM_FOLDERSUB; diff --git a/src/LineMarker.cxx b/src/LineMarker.cxx index 747c5ff12..b97c9fd5a 100644 --- a/src/LineMarker.cxx +++ b/src/LineMarker.cxx @@ -77,6 +77,8 @@ void LineMarker::Draw(Surface *surface, PRectangle &rcWhole, Font &fontForCharac case LineMarker::head : head = backSelected; tail = backSelected; + if (markType == SC_MARK_VLINE) + body = backSelected; break; case LineMarker::body : head = backSelected; |