diff options
| -rw-r--r-- | src/Editor.cxx | 43 | 
1 files changed, 21 insertions, 22 deletions
| diff --git a/src/Editor.cxx b/src/Editor.cxx index 4e9bcc4cb..6fa7a2ad4 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -2536,35 +2536,34 @@ void Editor::DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVis  	}  	// Draw indicators -	int indStart[INDIC_MAX + 1] = {0}; -	for (int indica = 0; indica <= INDIC_MAX; indica++) -		indStart[indica] = 0; - -	for (int indicPos = lineStart; indicPos <= lineEnd; indicPos++) { -		if ((indicPos == lineStart) || (indicPos == lineEnd) || -			(ll->indicators[indicPos] != ll->indicators[indicPos + 1])) { -			int mask = 1 << pdoc->stylingBits; -			for (int indicnum = 0; mask < 0x100; indicnum++) { -				if ((indicPos == lineStart) || (indicPos == lineEnd)) { -					indStart[indicnum] = ll->positions[indicPos]; -				} else if ((ll->indicators[indicPos + 1] & mask) && !(ll->indicators[indicPos] & mask)) { -					indStart[indicnum] = ll->positions[indicPos + 1]; -				} -				if ((ll->indicators[indicPos] & mask) && -					((indicPos == lineEnd) || !(ll->indicators[indicPos + 1] & mask))) { -					int endIndicator = indicPos; -					if (endIndicator >= lineEnd) -						endIndicator = lineEnd-1; +	// foreach indicator... +	for (int indicnum = 0, mask = 1 << pdoc->stylingBits; mask < 0x100; indicnum++) { +		int startPos = -1; +		// foreach style pos in line... +		for (int indicPos = lineStart; indicPos <= lineEnd; indicPos++) { +			// look for starts... +			if (startPos < 0) { +				// NOT in indicator run, looking for START +				if (indicPos < lineEnd && (ll->indicators[indicPos] & mask)) +					startPos = indicPos; +			} +			// ... or ends +			if (startPos >= 0) { +				// IN indicator run, looking for END +				if (indicPos >= lineEnd || !(ll->indicators[indicPos] & mask)) { +					// AT end of indicator run, DRAW it!  					PRectangle rcIndic( -						indStart[indicnum] + xStart - subLineStart, +						ll->positions[startPos] + xStart - subLineStart,  						rcLine.top + vsDraw.maxAscent, -						ll->positions[endIndicator + 1] + xStart - subLineStart, +						ll->positions[indicPos] + xStart - subLineStart,  						rcLine.top + vsDraw.maxAscent + 3);  					vsDraw.indicators[indicnum].Draw(surface, rcIndic, rcLine); +					// RESET control var +					startPos = -1;  				} -				mask = mask << 1;  			}  		} +		mask <<= 1;  	}  	// End of the drawing of the current line  	if (!twoPhaseDraw) { | 
