diff options
author | nyamatongwe <unknown> | 2000-12-21 01:39:34 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2000-12-21 01:39:34 +0000 |
commit | 9cb4cca29f5535ea07f0582dad57186bae6ec474 (patch) | |
tree | 95eb8d74c91cf022023e8f0f027822fd726c0ca0 | |
parent | 9e91e969b5b32bbc4bfbb4b72b33514670b6439d (diff) | |
download | scintilla-mirror-9cb4cca29f5535ea07f0582dad57186bae6ec474.tar.gz |
Patch from James for SetVisiblePolicy.
-rw-r--r-- | doc/ScintillaDoc.html | 8 | ||||
-rw-r--r-- | include/Scintilla.h | 3 | ||||
-rw-r--r-- | include/Scintilla.iface | 7 | ||||
-rw-r--r-- | src/Editor.cxx | 26 | ||||
-rw-r--r-- | src/Editor.h | 3 |
5 files changed, 45 insertions, 2 deletions
diff --git a/doc/ScintillaDoc.html b/doc/ScintillaDoc.html index fdb12bc92..36868b308 100644 --- a/doc/ScintillaDoc.html +++ b/doc/ScintillaDoc.html @@ -192,7 +192,8 @@ SCI_SELECTALL SCI_GOTOLINE(int line) SCI_GOTOPOS(int position) SCI_GETCURLINE(int textlen, char *text) -SCI_SETCARETPOLICY(int policy) +SCI_SETCARETPOLICY(int policy, int slop) +SCI_SETVISIBLEPOLICY(int policy, int slop) SCI_LINESONSCREEN SCI_SELECTIONISRECTANGLE SCI_SETHSCROLLBAR(bool visible) @@ -213,7 +214,10 @@ SCI_GETHSCROLLBAR <p> SCI_SETCARETPOLICY can be set to a combination of the flags CARET_SLOP, CARET_CENTER, and CARET_STRICT to change the automatic vertical positioning of the view - when ensuring a position is visible. + when ensuring a position is visible. SCI_SETVISIBLEPOLICY is a similar function that + determines how the vertical positioning is determined when SCI_ENSUREVISIBLE is + called. It takes VISIBLE_SLOP, VISIBLE_CENTER, and VISIBLE_STRICT flags + for the policy parameter. </p> <h3> Searching diff --git a/include/Scintilla.h b/include/Scintilla.h index da41bb6bf..099f2e3b7 100644 --- a/include/Scintilla.h +++ b/include/Scintilla.h @@ -382,6 +382,9 @@ typedef long (*SciFnDirect)(long ptr, unsigned int iMessage, unsigned long wPara #define SCI_WORDPARTLEFTEXTEND 2391 #define SCI_WORDPARTRIGHT 2392 #define SCI_WORDPARTRIGHTEXTEND 2393 +#define VISIBLE_SLOP 0x01 +#define VISIBLE_STRICT 0x04 +#define SCI_SETVISIBLEPOLICY 2394 #define SCI_GRABFOCUS 2400 #define SCI_STARTRECORD 3001 #define SCI_STOPRECORD 3002 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index f5ea2f965..d1107388f 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -1030,6 +1030,13 @@ fun void WordPartRight=2392(,) # Move to the next change in capitalistion extending selection to new caret position. fun void WordPartRightExtend=2393(,) +# Constants for use with SetVisiblePolicy +val VISIBLE_SLOP=0x01 +#val VISIBLE_CENTER=0x02 +val VISIBLE_STRICT=0x04 +# Set the way the display area is determined when a particular line is to be moved to. +fun void SetVisiblePolicy=2394(int visiblePolicy, int visibleSlop) + # Set the focus to this Scintilla widget. # GTK+ Specific fun void GrabFocus=2400(,) diff --git a/src/Editor.cxx b/src/Editor.cxx index 6c7bda2b2..85958be8f 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -75,6 +75,9 @@ Editor::Editor() { caretPolicy = CARET_SLOP; caretSlop = 0; + visiblePolicy = VISIBLE_SLOP; + visibleSlop = 0; + searchAnchor = 0; ucWheelScrollLines = 0; @@ -3148,6 +3151,24 @@ void Editor::EnsureLineVisible(int line) { SetScrollBars(); Redraw(); } + if (visiblePolicy & VISIBLE_SLOP) { + if ((topLine > line) || ((visiblePolicy & VISIBLE_STRICT) && (topLine + visibleSlop > line))) { + SetTopLine(Platform::Clamp(line - visibleSlop, 0, MaxScrollPos())); + SetVerticalScrollPos(); + Redraw(); + } else if ((line > topLine + LinesOnScreen() - 1) || + ((visiblePolicy & VISIBLE_STRICT) && (line > topLine + LinesOnScreen() - 1 - visibleSlop))) { + SetTopLine(Platform::Clamp(line - LinesOnScreen() + 1 + visibleSlop, 0, MaxScrollPos())); + SetVerticalScrollPos(); + Redraw(); + } + } else { + if ((topLine > line) || (line > topLine + LinesOnScreen() - 1) || (visiblePolicy & VISIBLE_STRICT)) { + SetTopLine(Platform::Clamp(line - LinesOnScreen() / 2 + 1, 0, MaxScrollPos())); + SetVerticalScrollPos(); + Redraw(); + } + } } static bool ValidMargin(unsigned long wParam) { @@ -4180,6 +4201,11 @@ long Editor::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) { caretSlop = lParam; break; + case SCI_SETVISIBLEPOLICY: + visiblePolicy = wParam; + visibleSlop = lParam; + break; + case SCI_LINESONSCREEN: return LinesOnScreen(); diff --git a/src/Editor.h b/src/Editor.h index 1bcac1665..52b3d7037 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -134,6 +134,9 @@ protected: // ScintillaBase subclass needs access to much of Editor int caretPolicy; int caretSlop; + int visiblePolicy; + int visibleSlop; + int searchAnchor; int displayPopupMenu; |