From f0c53e7b25f12be66881acc110d815ec491f1533 Mon Sep 17 00:00:00 2001 From: Neil Date: Sat, 8 May 2021 15:20:59 +1000 Subject: Feature [feature-requests:1373]. Make idle actions smoother by measuring per-byte and allowing just one line to be processed in a time slice. Very long lines will not distort estimation or block interaction as much. --- src/Document.cxx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/Document.cxx') diff --git a/src/Document.cxx b/src/Document.cxx index 21d492a8e..acb9f14bd 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -113,7 +113,7 @@ size_t ActionDuration::ActionsInAllowedTime(double secondsAllowed) const noexcep Document::Document(int options) : cb((options & SC_DOCUMENTOPTION_STYLES_NONE) == 0, (options & SC_DOCUMENTOPTION_TEXT_LARGE) != 0), - durationStyleOneLine(0.00001, 0.000001, 0.0001) { + durationStyleOneByte(0.000001, 0.0000001, 0.00001) { refCount = 0; #ifdef _WIN32 eolMode = SC_EOL_CRLF; @@ -2287,11 +2287,10 @@ void Document::EnsureStyledTo(Sci::Position pos) { } void Document::StyleToAdjustingLineDuration(Sci::Position pos) { - const Sci::Line lineFirst = SciLineFromPosition(GetEndStyled()); + const Sci::Position stylingStart = GetEndStyled(); ElapsedPeriod epStyling; EnsureStyledTo(pos); - const Sci::Line lineLast = SciLineFromPosition(GetEndStyled()); - durationStyleOneLine.AddSample(lineLast - lineFirst, epStyling.Duration()); + durationStyleOneByte.AddSample(pos - stylingStart, epStyling.Duration()); } void Document::LexerChanged() { -- cgit v1.2.3