From 275e0c25ae6cf1568099509682417b1c8ae60911 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Wed, 26 Aug 2009 10:48:18 +0000 Subject: Avoid breaking text into substrings on selection boundaries for drawing when the selection is empty (thus only needing a caret drawn) or when the selection settings do not need the text drawn as pieces such as when the selection is drawn translucently. --- src/PositionCache.cxx | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/PositionCache.cxx') diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index 580a1797c..fa2d581e1 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -386,7 +386,7 @@ static int NextBadU(const char *s, int p, int len, int &trailBytes) { return -1; } -BreakFinder::BreakFinder(LineLayout *ll_, int lineStart_, int lineEnd_, int posLineStart_, bool utf8_, int xStart) : +BreakFinder::BreakFinder(LineLayout *ll_, int lineStart_, int lineEnd_, int posLineStart_, bool utf8_, int xStart, bool breakForSelection) : ll(ll_), lineStart(lineStart_), lineEnd(lineEnd_), @@ -412,13 +412,17 @@ BreakFinder::BreakFinder(LineLayout *ll_, int lineStart_, int lineEnd_, int posL nextBreak--; } - SelectionSegment segmentLine(SelectionPosition(posLineStart), SelectionPosition(posLineStart + lineEnd)); - for (size_t r=0; rpsel->Count(); r++) { - SelectionSegment portion = ll->psel->Range(r).Intersect(segmentLine); - if (portion.start.IsValid()) - Insert(portion.start.Position() - posLineStart - 1); - if (portion.end.IsValid()) - Insert(portion.end.Position() - posLineStart - 1); + if (breakForSelection) { + SelectionSegment segmentLine(SelectionPosition(posLineStart), SelectionPosition(posLineStart + lineEnd)); + for (size_t r=0; rpsel->Count(); r++) { + SelectionSegment portion = ll->psel->Range(r).Intersect(segmentLine); + if (!(portion.start == portion.end)) { + if (portion.start.IsValid()) + Insert(portion.start.Position() - posLineStart - 1); + if (portion.end.IsValid()) + Insert(portion.end.Position() - posLineStart - 1); + } + } } Insert(ll->edgeColumn - 1); -- cgit v1.2.3