diff options
| -rw-r--r-- | src/Editor.cxx | 36 | 
1 files changed, 20 insertions, 16 deletions
| diff --git a/src/Editor.cxx b/src/Editor.cxx index d4443ab45..58401a330 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -2499,9 +2499,6 @@ void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, Lin  		const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth;  		virtualSpace = sel.VirtualSpaceFor(pdoc->LineEnd(line)) * spaceWidth;  	} - -	// Fill in a PRectangle representing the end of line characters -  	XYPOSITION xEol = ll->positions[lineEnd] - subLineStart;  	// Fill the virtual space and show selections within it @@ -2528,34 +2525,41 @@ void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, Lin  		}  	} -	int posAfterLineEnd = pdoc->LineStart(line + 1); -	int eolInSelection = (subLine == (ll->lines - 1)) ? sel.InSelectionForEOL(posAfterLineEnd) : 0; -	int alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; +	int eolInSelection = 0; +	int alpha = SC_ALPHA_NOALPHA; +	if (!hideSelection) { +		int posAfterLineEnd = pdoc->LineStart(line + 1); +		eolInSelection = (subLine == (ll->lines - 1)) ? sel.InSelectionForEOL(posAfterLineEnd) : 0; +		alpha = (eolInSelection == 1) ? vsDraw.selAlpha : vsDraw.selAdditionalAlpha; +	}  	// Draw the [CR], [LF], or [CR][LF] blobs if visible line ends are on -	int blobsWidth = 0; +	XYPOSITION blobsWidth = 0;  	if (lastSubLine) {  		for (int eolPos=ll->numCharsBeforeEOL; eolPos<ll->numCharsInLine; eolPos++) {  			rcSegment.left = xStart + ll->positions[eolPos] - subLineStart + virtualSpace;  			rcSegment.right = xStart + ll->positions[eolPos+1] - subLineStart + virtualSpace;  			blobsWidth += rcSegment.Width();  			const char *ctrlChar = ControlCharacterString(ll->chars[eolPos]); -			int inSelection = 0; -			bool inHotspot = false;  			int styleMain = ll->styles[eolPos]; -			ColourDesired textBack = TextBackground(vsDraw, overrideBackground, background, inSelection, inHotspot, styleMain, eolPos, ll); +			ColourDesired textBack = TextBackground(vsDraw, overrideBackground, background, eolInSelection, false, styleMain, eolPos, ll);  			ColourDesired textFore = vsDraw.styles[styleMain].fore; -			if (!hideSelection && eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1)) { +			if (eolInSelection && vsDraw.selforeset) { +				textFore = (eolInSelection == 1) ? vsDraw.selforeground : vsDraw.selAdditionalForeground; +			} +			if (eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1)) {  				if (alpha == SC_ALPHA_NOALPHA) {  					surface->FillRectangle(rcSegment, SelectionBackground(vsDraw, eolInSelection == 1));  				} else {  					surface->FillRectangle(rcSegment, textBack); -					SimpleAlphaRectangle(surface, rcSegment, SelectionBackground(vsDraw, eolInSelection == 1), alpha);  				}  			} else {  				surface->FillRectangle(rcSegment, textBack);  			}  			DrawTextBlob(surface, vsDraw, rcSegment, ctrlChar, textBack, textFore, twoPhaseDraw); +			if (eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha != SC_ALPHA_NOALPHA)) { +				SimpleAlphaRectangle(surface, rcSegment, SelectionBackground(vsDraw, eolInSelection == 1), alpha); +			}  		}  	} @@ -2563,7 +2567,7 @@ void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, Lin  	rcSegment.left = xEol + xStart + virtualSpace + blobsWidth;  	rcSegment.right = rcSegment.left + vsDraw.aveCharWidth; -	if (!hideSelection && eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha == SC_ALPHA_NOALPHA)) { +	if (eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha == SC_ALPHA_NOALPHA)) {  		surface->FillRectangle(rcSegment, SelectionBackground(vsDraw, eolInSelection == 1));  	} else {  		if (overrideBackground) { @@ -2575,7 +2579,7 @@ void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, Lin  		} else {  			surface->FillRectangle(rcSegment, vsDraw.styles[STYLE_DEFAULT].back);  		} -		if (!hideSelection && eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha != SC_ALPHA_NOALPHA)) { +		if (eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha != SC_ALPHA_NOALPHA)) {  			SimpleAlphaRectangle(surface, rcSegment, SelectionBackground(vsDraw, eolInSelection == 1), alpha);  		}  	} @@ -2586,7 +2590,7 @@ void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, Lin  		rcSegment.left = rcLine.left;  	rcSegment.right = rcLine.right; -	if (!hideSelection && vsDraw.selEOLFilled && eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha == SC_ALPHA_NOALPHA)) { +	if (eolInSelection && vsDraw.selEOLFilled && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha == SC_ALPHA_NOALPHA)) {  		surface->FillRectangle(rcSegment, SelectionBackground(vsDraw, eolInSelection == 1));  	} else {  		if (overrideBackground) { @@ -2596,7 +2600,7 @@ void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, Lin  		} else {  			surface->FillRectangle(rcSegment, vsDraw.styles[STYLE_DEFAULT].back);  		} -		if (!hideSelection && vsDraw.selEOLFilled && eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha != SC_ALPHA_NOALPHA)) { +		if (eolInSelection && vsDraw.selEOLFilled && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (alpha != SC_ALPHA_NOALPHA)) {  			SimpleAlphaRectangle(surface, rcSegment, SelectionBackground(vsDraw, eolInSelection == 1), alpha);  		}  	} | 
