diff options
| author | Neil <nyamatongwe@gmail.com> | 2015-09-23 09:33:21 +1000 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2015-09-23 09:33:21 +1000 | 
| commit | c9317c2bdfa092a531ed5ba0ec9f5115689489ac (patch) | |
| tree | 9511dd654e0576afd6caf379a55513f80ea7b4fb /src/EditView.cxx | |
| parent | 3d6f475c76142eae65b4b219df936f2bc6a4db3a (diff) | |
| download | scintilla-mirror-c9317c2bdfa092a531ed5ba0ec9f5115689489ac.tar.gz | |
When SC_MARK_UNDERLINE if not assigned to a margin, stop drawing the whole line.
Optimise drawing of markers that appear in the text area.
Diffstat (limited to 'src/EditView.cxx')
| -rw-r--r-- | src/EditView.cxx | 35 | 
1 files changed, 17 insertions, 18 deletions
| diff --git a/src/EditView.cxx b/src/EditView.cxx index f8912a991..072a715f4 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -1408,27 +1408,26 @@ static void DrawTranslucentLineState(Surface *surface, const EditModel &model, c  	if ((model.caret.active || vsDraw.alwaysShowCaretLineBackground) && vsDraw.showCaretLineBackground && ll->containsCaret) {  		SimpleAlphaRectangle(surface, rcLine, vsDraw.caretLineBackground, vsDraw.caretLineAlpha);  	} -	int marks = model.pdoc->GetMark(line); -	for (int markBit = 0; (markBit < 32) && marks; markBit++) { -		if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND)) { -			SimpleAlphaRectangle(surface, rcLine, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); -		} else if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_UNDERLINE)) { -			PRectangle rcUnderline = rcLine; -			rcUnderline.top = rcUnderline.bottom - 2; -			SimpleAlphaRectangle(surface, rcUnderline, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); +	const int marksOfLine = model.pdoc->GetMark(line); +	int marksDrawnInText = marksOfLine & vsDraw.maskDrawInText; +	for (int markBit = 0; (markBit < 32) && marksDrawnInText; markBit++) { +		if (marksDrawnInText & 1) { +			if (vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND) { +				SimpleAlphaRectangle(surface, rcLine, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); +			} else if (vsDraw.markers[markBit].markType == SC_MARK_UNDERLINE) { +				PRectangle rcUnderline = rcLine; +				rcUnderline.top = rcUnderline.bottom - 2; +				SimpleAlphaRectangle(surface, rcUnderline, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); +			}  		} -		marks >>= 1; +		marksDrawnInText >>= 1;  	} -	if (vsDraw.maskInLine) { -		int marksMasked = model.pdoc->GetMark(line) & vsDraw.maskInLine; -		if (marksMasked) { -			for (int markBit = 0; (markBit < 32) && marksMasked; markBit++) { -				if ((marksMasked & 1) && (vsDraw.markers[markBit].markType != SC_MARK_EMPTY)) { -					SimpleAlphaRectangle(surface, rcLine, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha); -				} -				marksMasked >>= 1; -			} +	int marksDrawnInLine = marksOfLine & vsDraw.maskInLine; +	for (int markBit = 0; (markBit < 32) && marksDrawnInLine; markBit++) { +		if (marksDrawnInLine & 1) { +			SimpleAlphaRectangle(surface, rcLine, vsDraw.markers[markBit].back, vsDraw.markers[markBit].alpha);  		} +		marksDrawnInLine >>= 1;  	}  } | 
