diff options
author | John Ehresman <jpe@wingware.com> | 2016-06-17 17:20:53 -0400 |
---|---|---|
committer | John Ehresman <jpe@wingware.com> | 2016-06-17 17:20:53 -0400 |
commit | b5d9addc5beea11472d05cd12a3540e243c998bf (patch) | |
tree | b9b57a9add8767e0f7334999996d74f3e634449f | |
parent | 74a12e8f40cbc552a6882096dc0a616c5cd77837 (diff) | |
download | scintilla-mirror-b5d9addc5beea11472d05cd12a3540e243c998bf.tar.gz |
Bug [#1888]. Only invalidate selection when using SCI_SETSELECTIONN api's
-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); |