From f650e7fd9d5596e6c165e02ca5defdb4afc90131 Mon Sep 17 00:00:00 2001 From: Marko Njezic Date: Sat, 2 Jul 2011 13:41:25 +0200 Subject: Folding related fixes. Initiated by bug #3323805. Make fold highlighting follow closely the actual folding implementation. Introduce a concept of fold headers with a tail to accommodate certain fold highlighting situations. Optimize PaintSelMargin(), so it doesn't waste time with fold markers, unless really necessary. Make EnsureLineVisible() find right parent, when called on whitespace line. Fix wrong fold tail marker when needWhiteClosure is true. --- src/LineMarker.cxx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/LineMarker.cxx') diff --git a/src/LineMarker.cxx b/src/LineMarker.cxx index 1415c609b..b2b7ceae8 100644 --- a/src/LineMarker.cxx +++ b/src/LineMarker.cxx @@ -84,6 +84,7 @@ void LineMarker::Draw(Surface *surface, PRectangle &rcWhole, Font &fontForCharac switch (tFold) { case LineMarker::head : + case LineMarker::headWithTail : head = backSelected; tail = backSelected; break; @@ -243,7 +244,10 @@ void LineMarker::Draw(Surface *surface, PRectangle &rcWhole, Font &fontForCharac DrawPlus(surface, centreX, centreY, blobSize, tail.allocated); } else if (markType == SC_MARK_BOXPLUSCONNECTED) { - surface->PenColour(body.allocated); + if (tFold == LineMarker::headWithTail) + surface->PenColour(tail.allocated); + else + surface->PenColour(body.allocated); surface->MoveTo(centreX, centreY + blobSize); surface->LineTo(centreX, rcWhole.bottom); @@ -301,10 +305,14 @@ void LineMarker::Draw(Surface *surface, PRectangle &rcWhole, Font &fontForCharac DrawPlus(surface, centreX, centreY, blobSize, tail.allocated); } else if (markType == SC_MARK_CIRCLEPLUSCONNECTED) { - surface->PenColour(body.allocated); + if (tFold == LineMarker::headWithTail) + surface->PenColour(tail.allocated); + else + surface->PenColour(body.allocated); surface->MoveTo(centreX, centreY + blobSize); surface->LineTo(centreX, rcWhole.bottom); + surface->PenColour(body.allocated); surface->MoveTo(centreX, rcWhole.top); surface->LineTo(centreX, centreY - blobSize); -- cgit v1.2.3