diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/EditView.cxx | 47 |
1 files changed, 19 insertions, 28 deletions
diff --git a/src/EditView.cxx b/src/EditView.cxx index 986772fe2..c87d88481 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -1289,24 +1289,20 @@ static void DrawIndicators(Surface *surface, const EditModel &model, const ViewS for (const IDecoration *deco : model.pdoc->decorations->View()) { if (under == vsDraw.indicators[deco->Indicator()].under) { Sci::Position startPos = posLineStart + lineStart; - if (!deco->ValueAt(startPos)) { - startPos = deco->EndRun(startPos); - } - while ((startPos < posLineEnd) && (deco->ValueAt(startPos))) { + while (startPos < posLineEnd) { const Range rangeRun(deco->StartRun(startPos), deco->EndRun(startPos)); const Sci::Position endPos = std::min(rangeRun.end, posLineEnd); - const bool hover = vsDraw.indicators[deco->Indicator()].IsDynamic() && - rangeRun.ContainsCharacter(model.hoverIndicatorPos); const int value = deco->ValueAt(startPos); - const Indicator::State state = hover ? Indicator::State::hover : Indicator::State::normal; - const Sci::Position posSecond = model.pdoc->MovePositionOutsideChar(rangeRun.First() + 1, 1); - DrawIndicator(deco->Indicator(), startPos - posLineStart, endPos - posLineStart, - surface, vsDraw, ll, xStart, rcLine, posSecond - posLineStart, subLine, state, - value, model.BidirectionalEnabled(), tabWidthMinimumPixels); - startPos = endPos; - if (!deco->ValueAt(startPos)) { - startPos = deco->EndRun(startPos); + if (value) { + const bool hover = vsDraw.indicators[deco->Indicator()].IsDynamic() && + rangeRun.ContainsCharacter(model.hoverIndicatorPos); + const Indicator::State state = hover ? Indicator::State::hover : Indicator::State::normal; + const Sci::Position posSecond = model.pdoc->MovePositionOutsideChar(rangeRun.First() + 1, 1); + DrawIndicator(deco->Indicator(), startPos - posLineStart, endPos - posLineStart, + surface, vsDraw, ll, xStart, rcLine, posSecond - posLineStart, subLine, state, + value, model.BidirectionalEnabled(), tabWidthMinimumPixels); } + startPos = endPos; } } } @@ -1317,20 +1313,15 @@ static void DrawIndicators(Surface *surface, const EditModel &model, const ViewS const int braceIndicator = (model.bracesMatchStyle == StyleBraceLight) ? vsDraw.braceHighlightIndicator : vsDraw.braceBadLightIndicator; if (under == vsDraw.indicators[braceIndicator].under) { const Range rangeLine(posLineStart + lineStart, posLineEnd); - if (rangeLine.ContainsCharacter(model.braces[0])) { - const Sci::Position braceOffset = model.braces[0] - posLineStart; - if (braceOffset < ll->numCharsInLine) { - const Sci::Position secondOffset = model.pdoc->MovePositionOutsideChar(model.braces[0] + 1, 1) - posLineStart; - DrawIndicator(braceIndicator, braceOffset, braceOffset + 1, surface, vsDraw, ll, xStart, rcLine, secondOffset, - subLine, Indicator::State::normal, 1, model.BidirectionalEnabled(), tabWidthMinimumPixels); - } - } - if (rangeLine.ContainsCharacter(model.braces[1])) { - const Sci::Position braceOffset = model.braces[1] - posLineStart; - if (braceOffset < ll->numCharsInLine) { - const Sci::Position secondOffset = model.pdoc->MovePositionOutsideChar(model.braces[1] + 1, 1) - posLineStart; - DrawIndicator(braceIndicator, braceOffset, braceOffset + 1, surface, vsDraw, ll, xStart, rcLine, secondOffset, - subLine, Indicator::State::normal, 1, model.BidirectionalEnabled(), tabWidthMinimumPixels); + for (size_t brace = 0; brace <= 1; brace++) { + if (rangeLine.ContainsCharacter(model.braces[brace])) { + const Sci::Position braceOffset = model.braces[brace] - posLineStart; + if (braceOffset < ll->numCharsInLine) { + const Sci::Position braceEnd = model.pdoc->MovePositionOutsideChar(model.braces[brace] + 1, 1) - posLineStart; + DrawIndicator(braceIndicator, braceOffset, braceEnd, + surface, vsDraw, ll, xStart, rcLine, braceEnd, subLine, Indicator::State::normal, + 1, model.BidirectionalEnabled(), tabWidthMinimumPixels); + } } } } |