aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2021-10-19 12:51:08 +1100
committerNeil <nyamatongwe@gmail.com>2021-10-19 12:51:08 +1100
commit5279c0491fbf67972010fdd2a7a889863f80e22f (patch)
tree6871d341b092afed2c347b59a92e0b2f592107c2
parenta7a6ce52d718466b48962168f10b1599d23ee6ec (diff)
downloadscintilla-mirror-5279c0491fbf67972010fdd2a7a889863f80e22f.tar.gz
Extract ChangeScrollRange from common scroll range setting code.
-rw-r--r--win32/ScintillaWin.cxx50
1 files changed, 18 insertions, 32 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index c6f34cb18..6c69a8ceb 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -461,6 +461,7 @@ class ScintillaWin :
bool IsVisible() const noexcept;
int SetScrollInfo(int nBar, LPCSCROLLINFO lpsi, BOOL bRedraw) noexcept;
bool GetScrollInfo(int nBar, LPSCROLLINFO lpsi) noexcept;
+ bool ChangeScrollRange(int nBar, int nMin, int nMax, UINT nPage) noexcept;
void ChangeScrollPos(int barType, Sci::Position pos);
sptr_t GetTextLength();
sptr_t GetText(uptr_t wParam, sptr_t lParam);
@@ -2311,59 +2312,44 @@ void ScintillaWin::SetHorizontalScrollPos() {
ChangeScrollPos(SB_HORZ, xOffset);
}
+bool ScintillaWin::ChangeScrollRange(int nBar, int nMin, int nMax, UINT nPage) noexcept {
+ SCROLLINFO sci = { sizeof(sci), SIF_PAGE | SIF_RANGE, 0, 0, 0, 0, 0 };
+ GetScrollInfo(nBar, &sci);
+ if ((sci.nMin != nMin) || (sci.nMax != nMax) || (sci.nPage != nPage)) {
+ sci.nMin = nMin;
+ sci.nMax = nMax;
+ sci.nPage = nPage;
+ SetScrollInfo(nBar, &sci, TRUE);
+ return true;
+ }
+ return false;
+}
+
bool ScintillaWin::ModifyScrollBars(Sci::Line nMax, Sci::Line nPage) {
if (!IsVisible()) {
return false;
}
bool modified = false;
- SCROLLINFO sci = {
- sizeof(sci), 0, 0, 0, 0, 0, 0
- };
- sci.fMask = SIF_PAGE | SIF_RANGE;
- GetScrollInfo(SB_VERT, &sci);
const Sci::Line vertEndPreferred = nMax;
if (!verticalScrollBarVisible)
nPage = vertEndPreferred + 1;
- if ((sci.nMin != 0) ||
- (sci.nMax != vertEndPreferred) ||
- (sci.nPage != static_cast<unsigned int>(nPage)) ||
- (sci.nPos != 0)) {
- sci.fMask = SIF_PAGE | SIF_RANGE;
- sci.nMin = 0;
- sci.nMax = static_cast<int>(vertEndPreferred);
- sci.nPage = static_cast<UINT>(nPage);
- sci.nPos = 0;
- sci.nTrackPos = 1;
- SetScrollInfo(SB_VERT, &sci, TRUE);
+ if (ChangeScrollRange(SB_VERT, 0, static_cast<int>(vertEndPreferred), static_cast<unsigned int>(nPage))) {
modified = true;
}
const PRectangle rcText = GetTextRectangle();
int pageWidth = static_cast<int>(rcText.Width());
- int horizEndPreferred = std::max(scrollWidth, pageWidth-1);
- if (horizEndPreferred < 0)
- horizEndPreferred = 0;
+ const int horizEndPreferred = std::max({scrollWidth, pageWidth - 1, 0});
if (!horizontalScrollBarVisible || Wrapping())
pageWidth = horizEndPreferred + 1;
- sci.fMask = SIF_PAGE | SIF_RANGE;
- GetScrollInfo(SB_HORZ, &sci);
- if ((sci.nMin != 0) ||
- (sci.nMax != horizEndPreferred) ||
- (sci.nPage != static_cast<unsigned int>(pageWidth)) ||
- (sci.nPos != 0)) {
- sci.fMask = SIF_PAGE | SIF_RANGE;
- sci.nMin = 0;
- sci.nMax = horizEndPreferred;
- sci.nPage = pageWidth;
- sci.nPos = 0;
- sci.nTrackPos = 1;
- SetScrollInfo(SB_HORZ, &sci, TRUE);
+ if (ChangeScrollRange(SB_HORZ, 0, horizEndPreferred, pageWidth)) {
modified = true;
if (scrollWidth < pageWidth) {
HorizontalScrollTo(0);
}
}
+
return modified;
}