aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMcLoo <unknown>2020-02-21 02:15:24 +0100
committerMcLoo <unknown>2020-02-21 02:15:24 +0100
commit0a648064cf4d88f6252aa880a0832d39a5331148 (patch)
treebc3b116441696f866ba8803d58ed9dffefef8206
parent1f90d600278536b7ff0aab128174a0f93915d433 (diff)
downloadscintilla-mirror-0a648064cf4d88f6252aa880a0832d39a5331148.tar.gz
Feature [feature-requests:497] Automatically scroll while dragging text.
Added automatic scrolling when text dragged near edge of window.
-rw-r--r--doc/ScintillaHistory.html5
-rw-r--r--src/Editor.cxx14
2 files changed, 19 insertions, 0 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index 9a77f6bcf..9dadab0e2 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -550,6 +550,7 @@
<td>Andreas Falkenhahn</td>
<td>Mark Reay</td>
<td>David Shuman</td>
+ <td>McLoo</td>
</tr>
</table>
<p>
@@ -577,6 +578,10 @@
<a href="https://sourceforge.net/p/scintilla/bugs/2151/">Bug #2151</a>.
</li>
<li>
+ Automatically scroll while dragging text.
+ <a href="https://sourceforge.net/p/scintilla/feature-requests/497/">Feature #497</a>.
+ </li>
+ <li>
On Win32, the numeric keypad with Alt pressed can be used to enter characters by number.
This can produce unexpected results in non-numlock mode when function keys are assigned.
Potentially problematic keys like Alt+KeypadUp are now ignored.
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 9c4ad2d4f..8f80ef716 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -4261,6 +4261,20 @@ void Editor::SetDragPosition(SelectionPosition newPos) {
posDrop = newPos;
}
if (!(posDrag == newPos)) {
+ const int oldCaretYPolicy = caretYPolicy;
+ const int oldCaretYSlop = caretYSlop;
+ const int oldCaretXPolicy = caretXPolicy;
+ const int oldCaretXSlop = caretXSlop;
+ caretYPolicy = CARET_SLOP | CARET_STRICT | CARET_EVEN;
+ caretYSlop = 2;
+ caretXPolicy = CARET_SLOP | CARET_STRICT | CARET_EVEN;
+ caretXSlop = 50;
+ MovedCaret(newPos, posDrag, true);
+ caretYPolicy = oldCaretYPolicy;
+ caretYSlop = oldCaretYSlop;
+ caretXPolicy = oldCaretXPolicy;
+ caretXSlop = oldCaretXSlop;
+
caret.on = true;
FineTickerCancel(tickCaret);
if ((caret.active) && (caret.period > 0) && (newPos.Position() < 0))