diff options
| -rw-r--r-- | doc/ScintillaHistory.html | 12 | ||||
| -rw-r--r-- | src/Editor.cxx | 71 | ||||
| -rw-r--r-- | src/Editor.h | 1 | 
3 files changed, 52 insertions, 32 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index 0d2cbeb4c..c1545004d 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -518,6 +518,18 @@        </li>      </ul>      <h3> +       <a href="http://www.scintilla.org/scite371.zip">Release 3.7.2</a> +    </h3> +    <ul> +	<li> +	Released 4 December 2016. +	</li> +	<li> +	Minimize redrawing for SCI_SETSELECTIONN* APIs. +	<a href="http://sourceforge.net/p/scintilla/bugs/1888/">Bug #1888</a>. +	</li> +    </ul> +    <h3>         <a href="http://www.scintilla.org/scite371.zip">Release 3.7.1</a>      </h3>      <ul> diff --git a/src/Editor.cxx b/src/Editor.cxx index 9c4e39490..5c9e20d71 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -5694,6 +5694,39 @@ sptr_t Editor::StyleGetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lPar  	return 0;  } +void Editor::SetSelectionNMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { +	InvalidateRange(sel.Range(wParam).Start().Position(), sel.Range(wParam).End().Position()); + +	switch (iMessage) { +	case SCI_SETSELECTIONNCARET: +		sel.Range(wParam).caret.SetPosition(static_cast<int>(lParam)); +		break; + +	case SCI_SETSELECTIONNANCHOR: +		sel.Range(wParam).anchor.SetPosition(static_cast<int>(lParam)); +		break; + +	case SCI_SETSELECTIONNCARETVIRTUALSPACE: +		sel.Range(wParam).caret.SetVirtualSpace(static_cast<int>(lParam)); +		break; + +	case SCI_SETSELECTIONNANCHORVIRTUALSPACE: +		sel.Range(wParam).anchor.SetVirtualSpace(static_cast<int>(lParam)); +		break; + +	case SCI_SETSELECTIONNSTART: +		sel.Range(wParam).anchor.SetPosition(static_cast<int>(lParam)); +		break; + +	case SCI_SETSELECTIONNEND: +		sel.Range(wParam).caret.SetPosition(static_cast<int>(lParam)); +		break; +	} + +	InvalidateRange(sel.Range(wParam).Start().Position(), sel.Range(wParam).End().Position()); +	ContainerNeedsUpdate(SC_UPDATE_SELECTION); +} +  sptr_t Editor::StringResult(sptr_t lParam, const char *val) {  	const size_t len = val ? strlen(val) : 0;  	if (lParam) { @@ -7967,55 +8000,29 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  		return sel.Main();  	case SCI_SETSELECTIONNCARET: -		sel.Range(wParam).caret.SetPosition(static_cast<int>(lParam)); -		ContainerNeedsUpdate(SC_UPDATE_SELECTION); -		Redraw(); +	case SCI_SETSELECTIONNANCHOR: +	case SCI_SETSELECTIONNCARETVIRTUALSPACE: +	case SCI_SETSELECTIONNANCHORVIRTUALSPACE: +	case SCI_SETSELECTIONNSTART: +	case SCI_SETSELECTIONNEND: +		SetSelectionNMessage(iMessage, wParam, lParam);  		break;  	case SCI_GETSELECTIONNCARET:  		return sel.Range(wParam).caret.Position(); -	case SCI_SETSELECTIONNANCHOR: -		sel.Range(wParam).anchor.SetPosition(static_cast<int>(lParam)); -		ContainerNeedsUpdate(SC_UPDATE_SELECTION); -		Redraw(); -		break;  	case SCI_GETSELECTIONNANCHOR:  		return sel.Range(wParam).anchor.Position(); -	case SCI_SETSELECTIONNCARETVIRTUALSPACE: -		sel.Range(wParam).caret.SetVirtualSpace(static_cast<int>(lParam)); -		ContainerNeedsUpdate(SC_UPDATE_SELECTION); -		Redraw(); -		break; -  	case SCI_GETSELECTIONNCARETVIRTUALSPACE:  		return sel.Range(wParam).caret.VirtualSpace(); -	case SCI_SETSELECTIONNANCHORVIRTUALSPACE: -		sel.Range(wParam).anchor.SetVirtualSpace(static_cast<int>(lParam)); -		ContainerNeedsUpdate(SC_UPDATE_SELECTION); -		Redraw(); -		break; -  	case SCI_GETSELECTIONNANCHORVIRTUALSPACE:  		return sel.Range(wParam).anchor.VirtualSpace(); -	case SCI_SETSELECTIONNSTART: -		sel.Range(wParam).anchor.SetPosition(static_cast<int>(lParam)); -		ContainerNeedsUpdate(SC_UPDATE_SELECTION); -		Redraw(); -		break; -  	case SCI_GETSELECTIONNSTART:  		return sel.Range(wParam).Start().Position(); -	case SCI_SETSELECTIONNEND: -		sel.Range(wParam).caret.SetPosition(static_cast<int>(lParam)); -		ContainerNeedsUpdate(SC_UPDATE_SELECTION); -		Redraw(); -		break; -  	case SCI_GETSELECTIONNEND:  		return sel.Range(wParam).End().Position(); diff --git a/src/Editor.h b/src/Editor.h index 052507381..64eb42db7 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -577,6 +577,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	bool ValidMargin(uptr_t wParam) const;  	void StyleSetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);  	sptr_t StyleGetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam); +	void SetSelectionNMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);  	static const char *StringFromEOLMode(int eolMode);  | 
