diff --git a/Versions/build.txt b/Versions/build.txt index d00491fd7..0cfbf0888 100644 --- a/Versions/build.txt +++ b/Versions/build.txt @@ -1 +1 @@ -1 +2 diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index ef7fc9065..a161287fc 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 RC3 diff --git a/src/Edit.c b/src/Edit.c index 1b9c4a3dc..3e52484bf 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -4777,14 +4777,11 @@ void EditSetSelectionEx(DocPos iAnchorPos, DocPos iCurrentPos, DocPos vSpcAnchor if (vSpcCurrent > 0) { SciCall_SetRectangularSelectionCaretVirtualSpace(vSpcCurrent); } - SciCall_ScrollRange(iAnchorPos, iCurrentPos); } else { SciCall_SetSel(iAnchorPos, iCurrentPos); // scrolls into view } - - // remember x-pos for moving caret vertically - SciCall_ChooseCaretX(); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view } UpdateToolbar(); UpdateStatusbar(false); @@ -4805,6 +4802,21 @@ void EditEnsureConsistentLineEndings(HWND hwnd) } +//============================================================================= +// +// EditScrollToLine() - normalize View +// +void EditScrollToLine(const DocLn iDocLine) +{ + if (iDocLine == Sci_GetCurrentLineNumber()) { + Sci_ScrollChooseCaret(); + } + //~Sci_ScrollToLine(iDocLine); + DocLn const vSlop = max_ln(2, Settings2.CurrentLineVerticalSlop); + SciCall_SetFirstVisibleLine(clampp((iDocLine - vSlop), 0, Sci_GetLastDocLineNumber())); +} + + //============================================================================= // // EditEnsureSelectionVisible() @@ -4819,7 +4831,7 @@ void EditEnsureSelectionVisible() SciCall_EnsureVisible(iAnchorLine); if (iAnchorLine != iCurrentLine) { SciCall_EnsureVisible(iCurrentLine); } - Sci_ScrollToLine(iCurrentLine, true); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view } @@ -4827,66 +4839,25 @@ void EditEnsureSelectionVisible() // // EditJumpTo() // -void EditJumpTo(HWND hwnd, DocLn iNewLine, DocPos iNewCol) +void EditJumpTo(DocLn iNewLine, DocPos iNewCol) { - UNUSED(hwnd); // jump to end with line set to -1 if (iNewLine < 0) { SciCall_DocumentEnd(); return; } - const DocLn iMaxLine = SciCall_GetLineCount(); + DocLn const iMaxLine = SciCall_GetLineCount(); // Line maximum is iMaxLine - 1 (doc line count starts with 0) iNewLine = (min_ln(iNewLine, iMaxLine) - 1); - const DocPos iLineEndPos = SciCall_GetLineEndPosition(iNewLine); + DocPos const iLineEndPos = SciCall_GetLineEndPosition(iNewLine); // Column minimum is 1 DocPos const colOffset = Globals.bZeroBasedColumnIndex ? 0 : 1; - iNewCol = max_p(0, min_p((iNewCol - colOffset), iLineEndPos)); + iNewCol = clampp((iNewCol - colOffset), 0, iLineEndPos); const DocPos iNewPos = SciCall_FindColumn(iNewLine, iNewCol); SciCall_GotoPos(iNewPos); - Sci_ScrollToLine(iNewLine, true); - - // remember x-pos for moving caret vertically - SciCall_ChooseCaretX(); -} - - - -//============================================================================= -// -// EditGetCurrentDocView() -// -const DOCVIEWPOS_T EditGetCurrentDocView(HWND hwnd) -{ - UNUSED(hwnd); - DOCVIEWPOS_T docView = INIT_DOCVIEWPOS; - docView.iCurPos = Sci_IsMultiOrRectangleSelection() ? SciCall_GetSelectionNCaret(0) : SciCall_GetCurrentPos(); - docView.iAnchorPos = Sci_IsMultiOrRectangleSelection() ? SciCall_GetSelectionNAnchor(SciCall_GetSelections() - 1) : SciCall_GetAnchor(); - //docView.vSpcCaretPos = SciCall_IsSelectionRectangle() ? SciCall_GetRectangularSelectionCaretVirtualSpace() : -1; - //docView.vSpcAnchorPos = SciCall_IsSelectionRectangle() ? SciCall_GetRectangularSelectionAnchorVirtualSpace() : -1; - docView.iCurrLine = SciCall_LineFromPosition(docView.iCurPos); - docView.iCurColumn = SciCall_GetColumn(docView.iCurPos); - docView.iVisTopLine = SciCall_GetFirstVisibleLine(); - docView.iDocTopLine = SciCall_DocLineFromVisible(docView.iVisTopLine); - docView.iXOffset = SciCall_GetXOffset(); - docView.bIsTail = (docView.iCurPos == docView.iAnchorPos) && (docView.iCurrLine >= (SciCall_GetLineCount() - 1)); - return docView; -} - - -//============================================================================= -// -// EditSetDocView() -// -void EditSetDocView(HWND hwnd, const DOCVIEWPOS_T docView) -{ - EditJumpTo(hwnd, docView.iCurrLine + 1, docView.iCurColumn + 1); - DocLn const iNewTopLine = SciCall_GetFirstVisibleLine(); - SciCall_EnsureVisible(iNewTopLine); - SciCall_LineScroll(0, docView.iVisTopLine - iNewTopLine); - SciCall_SetXOffset(docView.iXOffset); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view } @@ -6655,12 +6626,8 @@ void EditSelectionMultiSelectAll() DocPos const iMainCaret = SciCall_GetSelectionNCaret(0); if (iMainAnchor > iMainCaret) { SciCall_SwapMainAnchorCaret(); - SciCall_ScrollRange(iMainCaret, iMainAnchor); } - else { - SciCall_ScrollRange(iMainAnchor, iMainCaret); - } - SciCall_ChooseCaretX(); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view SciCall_SetTargetRange(saveTargetBeg, saveTargetEnd); //restore @@ -6977,11 +6944,11 @@ void EditToggleView(HWND hwnd) EditHideNotMarkedLineRange(hwnd, FocusedView.HideNonMatchedLines); if (FocusedView.HideNonMatchedLines) { - Sci_ScrollToLine(0, false); + EditScrollToLine(0); SciCall_SetReadOnly(true); } else { - Sci_ScrollToLine(Sci_GetCurrentLineNumber(), true); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view SciCall_SetReadOnly(false); } @@ -7721,7 +7688,7 @@ static INT_PTR CALLBACK EditLinenumDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPA if ((iNewLine > 0) && (iNewLine <= iMaxLnNum) && (iNewCol > 0)) { - EditJumpTo(Globals.hwndEdit, iNewLine, iNewCol); + EditJumpTo(iNewLine, iNewCol); EndDialog(hwnd, IDOK); } else { @@ -8702,7 +8669,7 @@ void EditFoldClick(DocLn ln, int mode) EditFoldPerformAction(ln, mode, SNIFF); if (fGotoFoldPoint) { - EditJumpTo(Globals.hwndEdit, ln + 1, 0); + EditJumpTo(ln + 1, 0); } } @@ -8721,7 +8688,7 @@ void EditFoldCmdKey(FOLD_MOVE move, FOLD_ACTION action) { if ((SciCall_GetFoldLevel(ln) & SC_FOLDLEVELHEADERFLAG) && SciCall_GetLineVisible(ln)) { - EditJumpTo(Globals.hwndEdit, ln + 1, 0); + EditJumpTo(ln + 1, 0); return; } } @@ -8732,7 +8699,7 @@ void EditFoldCmdKey(FOLD_MOVE move, FOLD_ACTION action) { if ((SciCall_GetFoldLevel(ln) & SC_FOLDLEVELHEADERFLAG) && SciCall_GetLineVisible(ln)) { - EditJumpTo(Globals.hwndEdit, ln + 1, 0); + EditJumpTo(ln + 1, 0); return; } } diff --git a/src/Edit.h b/src/Edit.h index 07aab561e..eef2adbec 100644 --- a/src/Edit.h +++ b/src/Edit.h @@ -79,11 +79,10 @@ void EditSplitLines(HWND hwnd); void EditJoinLinesEx(bool,bool); void EditSortLines(HWND hwnd,int iSortFlags); -void EditJumpTo(HWND hwnd, DocLn iNewLine, DocPos iNewCol); -const DOCVIEWPOS_T EditGetCurrentDocView(HWND hwnd); -void EditSetDocView(HWND hwnd, const DOCVIEWPOS_T docView); +void EditJumpTo(DocLn iNewLine, DocPos iNewCol); void EditSetSelectionEx(DocPos iAnchorPos, DocPos iCurrentPos, DocPos vSpcAnchor, DocPos vSpcCurrent); void EditFixPositions(); +void EditScrollToLine(const DocLn iDocLine); void EditEnsureSelectionVisible(); void EditEnsureConsistentLineEndings(HWND hwnd); void EditGetExcerpt(HWND hwnd,LPWSTR lpszExcerpt,DWORD cchExcerpt); diff --git a/src/Notepad3.c b/src/Notepad3.c index 7c2ac6b86..4587871b2 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -1302,7 +1302,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow) } } if (s_flagJumpTo) { // Jump to position - EditJumpTo(Globals.hwndEdit,s_iInitialLine,s_iInitialColumn); + EditJumpTo(s_iInitialLine,s_iInitialColumn); } } } @@ -1359,7 +1359,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow) if (SciCall_CanPaste()) { bool bAutoIndent2 = Settings.AutoIndent; Settings.AutoIndent = 0; - EditJumpTo(Globals.hwndEdit, -1, 0); + EditJumpTo(-1, 0); _BEGIN_UNDO_ACTION_; if (!Sci_IsDocEmpty()) { SciCall_NewLine(); @@ -1369,7 +1369,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow) _END_UNDO_ACTION_; Settings.AutoIndent = bAutoIndent2; if (s_flagJumpTo) - EditJumpTo(Globals.hwndEdit, s_iInitialLine, s_iInitialColumn); + EditJumpTo(s_iInitialLine, s_iInitialColumn); else EditEnsureSelectionVisible(); } @@ -2848,7 +2848,7 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam) if (params->flagJumpTo) { if (params->iInitialLine == 0) params->iInitialLine = 1; - EditJumpTo(Globals.hwndEdit, params->iInitialLine, params->iInitialColumn); + EditJumpTo(params->iInitialLine, params->iInitialColumn); } s_flagLexerSpecified = false; @@ -2957,7 +2957,7 @@ LRESULT MsgChangeNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) if (FileWatching.MonitoringLog) { SciCall_SetReadOnly(FileWatching.MonitoringLog); - Sci_ScrollToLine(Sci_GetLastDocLineNumber(), false); + EditScrollToLine(Sci_GetLastDocLineNumber()); } else { SciCall_GotoPos(iCurPos); @@ -4778,7 +4778,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) { SciCall_EnsureVisible(iNextLine); SciCall_GotoLine(iNextLine); - SciCall_ScrollCaret(); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view } } break; @@ -4799,7 +4799,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) { SciCall_EnsureVisible(iNextLine); SciCall_GotoLine(iNextLine); - SciCall_ScrollCaret(); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view } } break; @@ -4870,9 +4870,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_SELTONEXT: { SciCall_RotateSelection(); - DocPosU const iMain = SciCall_GetMainSelection(); - SciCall_ScrollRange(SciCall_GetSelectionNAnchor(iMain), SciCall_GetSelectionNCaret(iMain)); - SciCall_ChooseCaretX(); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view } break; @@ -4881,13 +4879,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) DocPosU const iMain = SciCall_GetMainSelection(); if (iMain > 0) { SciCall_SetMainSelection(iMain - 1); - SciCall_ScrollRange(SciCall_GetSelectionNAnchor(iMain - 1), SciCall_GetSelectionNCaret(iMain - 1)); } else { DocPosU const iNewMain = SciCall_GetSelections() - 1; SciCall_SetMainSelection(iNewMain); - SciCall_ScrollRange(SciCall_GetSelectionNAnchor(iNewMain), SciCall_GetSelectionNCaret(iNewMain)); } - SciCall_ChooseCaretX(); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view } break; @@ -5311,7 +5307,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) FileWatching.AutoReloadTimeout = 250UL; UndoRedoRecordingStop(); SciCall_SetEndAtLastLine(false); - Sci_ScrollToLine(Sci_GetLastDocLineNumber(), false); + EditScrollToLine(Sci_GetLastDocLineNumber()); } else { s_flagChangeNotify = FileWatching.flagChangeNotify; @@ -5321,7 +5317,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) FileWatching.AutoReloadTimeout = Settings2.AutoReloadTimeout; UndoRedoRecordingStart(); SciCall_SetEndAtLastLine(!Settings.ScrollPastEOF); - Sci_ScrollToLine(Sci_GetCurrentLineNumber(), true); + EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view } InstallFileWatching(Globals.CurrentFile); // force @@ -9713,7 +9709,8 @@ bool FileRevert(LPCWSTR szFileName, bool bIgnoreCmdLnEnc) if (StrIsEmpty(szFileName)) { return false; } bool bPreserveView = true; - DOCVIEWPOS_T const docView = EditGetCurrentDocView(Globals.hwndEdit); + DocLn const curLineNum = Sci_GetCurrentLineNumber(); + bool const bIsAtDocEnd = (curLineNum >= (Sci_GetLastDocLineNumber() - Settings2.CurrentLineVerticalSlop)); Encoding_SrcWeak(CPI_NONE); if (bIgnoreCmdLnEnc) { @@ -9731,9 +9728,10 @@ bool FileRevert(LPCWSTR szFileName, bool bIgnoreCmdLnEnc) } if (FileWatching.FileWatchingMode == FWM_AUTORELOAD) { - if (docView.bIsTail || FileWatching.MonitoringLog) { + if (bIsAtDocEnd || FileWatching.MonitoringLog) { bPreserveView = false; - Sci_ScrollToLine(Sci_GetLastDocLineNumber(), false); + SciCall_DocumentEnd(); + EditScrollToLine(Sci_GetLastDocLineNumber()); } } @@ -9744,12 +9742,12 @@ bool FileRevert(LPCWSTR szFileName, bool bIgnoreCmdLnEnc) SciCall_ClearSelections(); bPreserveView = false; SciCall_DocumentEnd(); - EditEnsureSelectionVisible(); + EditScrollToLine(Sci_GetLastDocLineNumber()); } } if (bPreserveView) { - EditSetDocView(Globals.hwndEdit, docView); + EditJumpTo(curLineNum, 0); } SciCall_SetSavePoint(); @@ -10856,7 +10854,7 @@ void CALLBACK PasteBoardTimer(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime) if (SciCall_CanPaste()) { bool bAutoIndent2 = Settings.AutoIndent; Settings.AutoIndent = 0; - EditJumpTo(Globals.hwndEdit,-1,0); + EditJumpTo(-1,0); _BEGIN_UNDO_ACTION_; if (!Sci_IsDocEmpty()) { SciCall_NewLine(); diff --git a/src/SciCall.h b/src/SciCall.h index aeaee204c..8df7cfc5f 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -599,7 +599,10 @@ inline DocPos Sci_GetRangeMaxLineLength(DocLn iBeginLine, DocLn iEndLine) { } // respect VSlop settings -#define Sci_ScrollToLine(L,C) { SciCall_ScrollRange(SciCall_PositionFromLine(L), SciCall_GetLineEndPosition(L)); if (C) { SciCall_ScrollCaret(); } } +inline void Sci_ScrollChooseCaret() { SciCall_ScrollCaret(); SciCall_ChooseCaretX(); } +inline void Sci_ScrollToLine(DocLn line) { SciCall_ScrollRange(SciCall_PositionFromLine(line), SciCall_GetLineEndPosition(line)); } +inline void Sci_ScrollToCurrentLine() { Sci_ScrollToLine(Sci_GetCurrentLineNumber()); } + #define Sci_ReplaceTarget(M,L,T) (((M) == SCI_REPLACETARGET) ? SciCall_ReplaceTarget((L),(T)) : SciCall_ReplaceTargetRe((L),(T))) diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 597d5111f..a2e94749a 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -620,25 +620,6 @@ typedef struct _editfileiostatus //============================================================================= -typedef struct _docviewpos_t -{ - DocPos iCurPos; - DocPos iAnchorPos; - //DocPos vSpcCaretPos; - //DocPos vSpcAnchorPos; - DocLn iCurrLine; - DocPos iCurColumn; - DocLn iVisTopLine; - DocLn iDocTopLine; - int iXOffset; - bool bIsTail; - -} DOCVIEWPOS_T, * PDOCVIEWPOS_T; - -#define INIT_DOCVIEWPOS { 0, 0, /*0, 0,*/ 0, 0, 0, 0, 0, false } - -//============================================================================= - typedef struct _themeFiles { UINT rid; diff --git a/src/VersionEx.h b/src/VersionEx.h index b6638db13..5a8133da5 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -9,11 +9,11 @@ #define VERSION_MAJOR 5 #define VERSION_MINOR 20 #define VERSION_REV 320 -#define VERSION_BUILD 1 +#define VERSION_BUILD 2 #define SCINTILLA_VER 432 #define ONIGURUMA_REGEX_VER 6.9.4 #define UCHARDET_VER 2018.09.27 #define TINYEXPR_VER 2018.05.11 #define UTHASH_VER 2.1.0 #define VERSION_PATCH RC3 -#define VERSION_COMMIT_ID dkt1-amr +#define VERSION_COMMIT_ID t7820-rk