From 0850525585a84cd22010b7dcf5579e37e940a9aa Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Fri, 25 Mar 2005 10:49:07 +0000 Subject: Patch from Franck Marcia implements sticky caret. --- src/Editor.cxx | 39 +++++++++++++++++++++++++++++++++------ src/Editor.h | 1 + 2 files changed, 34 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Editor.cxx b/src/Editor.cxx index 5eb384bb2..d9ec00a35 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -344,6 +344,7 @@ Editor::Editor() { scrollWidth = 2000; verticalScrollBarVisible = true; endAtLastLine = true; + caretSticky = false; pixmapLine = Surface::Allocate(); pixmapSelMargin = Surface::Allocate(); @@ -3224,7 +3225,9 @@ void Editor::AddCharUTF(char *s, unsigned int len, bool treatAsDBCS) { EnsureCaretVisible(); // Avoid blinking during rapid typing: ShowCaretAtCurrentPosition(); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } if (treatAsDBCS) { NotifyChar((static_cast(s[0]) << 8) | @@ -4253,22 +4256,30 @@ int Editor::KeyCommand(unsigned int iMessage) { break; case SCI_DELETEBACK: DelCharBack(true); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; case SCI_DELETEBACKNOTLINE: DelCharBack(false); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; case SCI_TAB: Indent(true); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; case SCI_BACKTAB: Indent(false); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; case SCI_NEWLINE: @@ -5647,7 +5658,9 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_PASTE: Paste(); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; @@ -6347,6 +6360,20 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_GETENDATLASTLINE: return endAtLastLine; + case SCI_SETCARETSTICKY: + PLATFORM_ASSERT((wParam == 0) || (wParam == 1)); + if (caretSticky != (wParam != 0)) { + caretSticky = wParam != 0; + } + break; + + case SCI_GETCARETSTICKY: + return caretSticky; + + case SCI_TOGGLECARETSTICKY: + caretSticky = !caretSticky; + break; + case SCI_GETCOLUMN: return pdoc->GetColumn(wParam); diff --git a/src/Editor.h b/src/Editor.h index 76e79e7e7..ab80a21c4 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -218,6 +218,7 @@ protected: // ScintillaBase subclass needs access to much of Editor int scrollWidth; bool verticalScrollBarVisible; bool endAtLastLine; + bool caretSticky; Surface *pixmapLine; Surface *pixmapSelMargin; -- cgit v1.2.3