From b44276b2e5b823e254b6dfe06ca19ba45c64c223 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Fri, 2 Aug 2002 04:26:31 +0000 Subject: Made Ctrl+Up and Ctrl+Down not flicker when using strict caret policy. Avoided by not calling EnsureCaretVisible for these keys. --- src/Editor.cxx | 17 ++++++++++------- src/Editor.h | 4 ++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Editor.cxx b/src/Editor.cxx index c857d2e71..76dbd1ba7 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -836,7 +836,7 @@ int Editor::MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd) { return pos; } -int Editor::MovePositionTo(int newPos, bool extend) { +int Editor::MovePositionTo(int newPos, bool extend, bool ensureVisible) { int delta = newPos - currentPos; newPos = pdoc->ClampPositionIntoDocument(newPos); newPos = MovePositionOutsideChar(newPos, delta); @@ -845,7 +845,8 @@ int Editor::MovePositionTo(int newPos, bool extend) { } else { SetEmptySelection(newPos); } - EnsureCaretVisible(); + if (ensureVisible) + EnsureCaretVisible(); ShowCaretAtCurrentPosition(); NotifyMove(newPos); return 0; @@ -909,16 +910,18 @@ void Editor::HorizontalScrollTo(int xPos) { } } -void Editor::MoveCaretInsideView() { +void Editor::MoveCaretInsideView(bool ensureVisible) { PRectangle rcClient = GetTextRectangle(); Point pt = LocationFromPosition(currentPos); if (pt.y < rcClient.top) { MovePositionTo(PositionFromLocation( - Point(lastXChosen, rcClient.top))); + Point(lastXChosen, rcClient.top)), + false, ensureVisible); } else if ((pt.y + vs.lineHeight - 1) > rcClient.bottom) { int yOfLastLineFullyDisplayed = rcClient.top + (LinesOnScreen() - 1) * vs.lineHeight; MovePositionTo(PositionFromLocation( - Point(lastXChosen, rcClient.top + yOfLastLineFullyDisplayed))); + Point(lastXChosen, rcClient.top + yOfLastLineFullyDisplayed)), + false, ensureVisible); } } @@ -3180,7 +3183,7 @@ int Editor::KeyCommand(unsigned int iMessage) { break; case SCI_LINESCROLLDOWN: ScrollTo(topLine + 1); - MoveCaretInsideView(); + MoveCaretInsideView(false); break; case SCI_LINEUP: CursorUpOrDown(-1); @@ -3190,7 +3193,7 @@ int Editor::KeyCommand(unsigned int iMessage) { break; case SCI_LINESCROLLUP: ScrollTo(topLine - 1); - MoveCaretInsideView(); + MoveCaretInsideView(false); break; case SCI_CHARLEFT: if (SelectionEmpty()) { diff --git a/src/Editor.h b/src/Editor.h index 451f12341..5c838ebce 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -322,14 +322,14 @@ protected: // ScintillaBase subclass needs access to much of Editor void SetSelection(int currentPos_); void SetEmptySelection(int currentPos_); int MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd=true); - int MovePositionTo(int newPos, bool extend = false); + int MovePositionTo(int newPos, bool extend=false, bool ensureVisible=true); int MovePositionSoVisible(int pos, int moveDir); void SetLastXChosen(); void ScrollTo(int line); virtual void ScrollText(int linesToMove); void HorizontalScrollTo(int xPos); - void MoveCaretInsideView(); + void MoveCaretInsideView(bool ensureVisible=true); int DisplayFromPosition(int pos); void EnsureCaretVisible(bool useMargin=true, bool vert=true, bool horiz=true); void ShowCaretAtCurrentPosition(); -- cgit v1.2.3