From aa198d68b4f938a20aadfb53267fab87f64a7004 Mon Sep 17 00:00:00 2001 From: Marko Njezic Date: Mon, 20 Jun 2011 13:33:27 +0200 Subject: Properly highlight fold markers on sub lines. Bug #3323015. This complements fold markers highlighting change from revision 3619, which only fixed part of the problem. Changes from revision 3620 have been reverted, as they cause line to be drawn out of bounds and overlap with previously drawn marker above. They are also no longer needed, with this change. --- src/Editor.cxx | 15 ++++++++++----- src/LineMarker.cxx | 4 +--- 2 files changed, 11 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/Editor.cxx b/src/Editor.cxx index f618c78de..26c260101 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1930,18 +1930,23 @@ void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) { if (marks) { for (int markBit = 0; (markBit < 32) && marks; markBit++) { if (marks & 1) { - LineMarker::typeOfFold tFold; + LineMarker::typeOfFold tFold = LineMarker::undefined; if (!highlightDelimiter.isCurrentBlockHighlight(lineDoc)) { tFold = LineMarker::undefined; } else if (highlightDelimiter.isBodyBlockFold(lineDoc)) { tFold = LineMarker::body; } else if (highlightDelimiter.isHeadBlockFold(lineDoc)) { - tFold = LineMarker::head; + if (firstSubLine) { + tFold = LineMarker::head; + } else { + if (cs.GetExpanded(lineDoc)) { + tFold = LineMarker::body; + } else { + tFold = LineMarker::undefined; + } + } } else if (highlightDelimiter.isTailBlockFold(lineDoc)) { tFold = LineMarker::tail; - } else { - //Normally, this branch is never used. But I prefer to manage it anyway. - tFold = LineMarker::undefined; } vs.markers[markBit].Draw(surface, rcMarker, vs.styles[STYLE_LINENUMBER].font, tFold); } diff --git a/src/LineMarker.cxx b/src/LineMarker.cxx index 73410e2cd..747c5ff12 100644 --- a/src/LineMarker.cxx +++ b/src/LineMarker.cxx @@ -77,8 +77,6 @@ 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; @@ -186,7 +184,7 @@ void LineMarker::Draw(Surface *surface, PRectangle &rcWhole, Font &fontForCharac } else if (markType == SC_MARK_VLINE) { surface->PenColour(body.allocated); - surface->MoveTo(centreX, rcWhole.top + blobSize - (rcWhole.bottom - rcWhole.top)/2); + surface->MoveTo(centreX, rcWhole.top); surface->LineTo(centreX, rcWhole.bottom); } else if (markType == SC_MARK_LCORNER) { -- cgit v1.2.3