aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJohn Ehresman <jpe@wingware.com>2016-06-17 17:20:53 -0400
committerJohn Ehresman <jpe@wingware.com>2016-06-17 17:20:53 -0400
commitb5d9addc5beea11472d05cd12a3540e243c998bf (patch)
treeb9b57a9add8767e0f7334999996d74f3e634449f
parent74a12e8f40cbc552a6882096dc0a616c5cd77837 (diff)
downloadscintilla-mirror-b5d9addc5beea11472d05cd12a3540e243c998bf.tar.gz
Bug [#1888]. Only invalidate selection when using SCI_SETSELECTIONN api's
-rw-r--r--doc/ScintillaHistory.html12
-rw-r--r--src/Editor.cxx71
-rw-r--r--src/Editor.h1
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);