diff options
| author | nyamatongwe <devnull@localhost> | 2009-08-26 10:48:18 +0000 | 
|---|---|---|
| committer | nyamatongwe <devnull@localhost> | 2009-08-26 10:48:18 +0000 | 
| commit | 14cfe75a40f8d92df6655d49f22cb325ddad9faf (patch) | |
| tree | 1d4a17c53614d85917a198b948d6d96e174c7c8a /src/PositionCache.cxx | |
| parent | 22a86737d86366ca685297ba544a1c3cdae08c4d (diff) | |
| download | scintilla-mirror-14cfe75a40f8d92df6655d49f22cb325ddad9faf.tar.gz | |
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.
Diffstat (limited to 'src/PositionCache.cxx')
| -rw-r--r-- | src/PositionCache.cxx | 20 | 
1 files changed, 12 insertions, 8 deletions
| 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; r<ll->psel->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; r<ll->psel->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); | 
