diff options
Diffstat (limited to 'src/PositionCache.cxx')
-rw-r--r-- | src/PositionCache.cxx | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index 88415abfe..8ed0580bb 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -177,9 +177,11 @@ void LineLayout::RestoreBracesHighlight(Range rangeLine, const Sci::Position bra xHighlightGuide = 0; } -int LineLayout::FindBefore(XYPOSITION x, int lower, int upper) const { +int LineLayout::FindBefore(XYPOSITION x, Range range) const { + Sci::Position lower = range.start; + Sci::Position upper = range.end; do { - const int middle = (upper + lower + 1) / 2; // Round high + const Sci::Position middle = (upper + lower + 1) / 2; // Round high const XYPOSITION posMiddle = positions[middle]; if (x < posMiddle) { upper = middle - 1; @@ -187,12 +189,12 @@ int LineLayout::FindBefore(XYPOSITION x, int lower, int upper) const { lower = middle; } } while (lower < upper); - return lower; + return static_cast<int>(lower); } int LineLayout::FindPositionFromX(XYPOSITION x, Range range, bool charPosition) const { - int pos = FindBefore(x, static_cast<int>(range.start), static_cast<int>(range.end)); + int pos = FindBefore(x, range); while (pos < range.end) { if (charPosition) { if (x < (positions[pos + 1])) { @@ -429,13 +431,14 @@ void SpecialRepresentations::Clear() { std::fill(startByteHasReprs, std::end(startByteHasReprs), none); } -void BreakFinder::Insert(int val) { - if (val > nextBreak) { - const std::vector<int>::iterator it = std::lower_bound(selAndEdge.begin(), selAndEdge.end(), val); +void BreakFinder::Insert(Sci::Position val) { + int posInLine = static_cast<int>(val); + if (posInLine > nextBreak) { + const std::vector<int>::iterator it = std::lower_bound(selAndEdge.begin(), selAndEdge.end(), posInLine); if (it == selAndEdge.end()) { - selAndEdge.push_back(val); - } else if (*it != val) { - selAndEdge.insert(it, 1, val); + selAndEdge.push_back(posInLine); + } else if (*it != posInLine) { + selAndEdge.insert(it, 1, posInLine); } } } @@ -456,7 +459,7 @@ BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lin // Search for first visible break // First find the first visible character if (xStart > 0.0f) - nextBreak = ll->FindBefore(static_cast<XYPOSITION>(xStart), static_cast<int>(lineRange.start), static_cast<int>(lineRange.end)); + nextBreak = ll->FindBefore(static_cast<XYPOSITION>(xStart), lineRange); // Now back to a style break while ((nextBreak > lineRange.start) && (ll->styles[nextBreak] == ll->styles[nextBreak - 1])) { nextBreak--; @@ -470,9 +473,9 @@ BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lin const SelectionSegment portion = psel->Range(r).Intersect(segmentLine); if (!(portion.start == portion.end)) { if (portion.start.IsValid()) - Insert(static_cast<int>(portion.start.Position() - posLineStart)); + Insert(portion.start.Position() - posLineStart); if (portion.end.IsValid()) - Insert(static_cast<int>(portion.end.Position() - posLineStart)); + Insert(portion.end.Position() - posLineStart); } } } @@ -481,14 +484,14 @@ BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lin if (pvsDraw->indicators[deco->Indicator()].OverridesTextFore()) { Sci::Position startPos = deco->EndRun(posLineStart); while (startPos < (posLineStart + lineRange.end)) { - Insert(static_cast<int>(startPos - posLineStart)); + Insert(startPos - posLineStart); startPos = deco->EndRun(startPos); } } } } Insert(ll->edgeColumn); - Insert(static_cast<int>(lineRange.end)); + Insert(lineRange.end); saeNext = (!selAndEdge.empty()) ? selAndEdge[0] : -1; } |