aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx43
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) {