Skip to content

Commit 1f5f0e7

Browse files
committed
Fixed bug with hiding the scroll bar
1 parent 200c691 commit 1f5f0e7

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

mushview.cpp

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1482,6 +1482,12 @@ ASSERT_VALID(pDoc);
14821482
CSize sizeTotal;
14831483

14841484
sizeTotal.cx = sizeTotal.cy = 100;
1485+
1486+
m_ScrollbarSizeTotal = sizeTotal;
1487+
m_ScrollbarSizePage = sizeTotal;
1488+
m_ScrollbarSizeLine = sizeTotal;
1489+
1490+
// odd?
14851491
SetScrollSizes(sizeTotal, sizeTotal, sizeTotal);
14861492

14871493
sizewindow ();
@@ -1718,11 +1724,11 @@ int lastline;
17181724

17191725
lastline = pDoc->GetLastLine ();
17201726

1721-
CSize sizeTotal (pDoc->m_nWrapColumn * pDoc->m_FontWidth, lastline * pDoc->m_FontHeight),
1722-
sizePage (GetOutputWindowWidth () - pDoc->m_iPixelOffset, GetOutputWindowHeight ()),
1723-
sizeLine (pDoc->m_FontWidth, pDoc->m_FontHeight);
1727+
m_ScrollbarSizeTotal = CSize (pDoc->m_nWrapColumn * pDoc->m_FontWidth, lastline * pDoc->m_FontHeight);
1728+
m_ScrollbarSizePage = CSize (GetOutputWindowWidth () - pDoc->m_iPixelOffset, GetOutputWindowHeight ());
1729+
m_ScrollbarSizeLine = CSize (pDoc->m_FontWidth, pDoc->m_FontHeight);
17241730

1725-
SetScrollSizes (sizeTotal, sizePage, sizeLine);
1731+
SetScrollSizes (m_ScrollbarSizeTotal, m_ScrollbarSizePage, m_ScrollbarSizeLine);
17261732

17271733
pDoc->SendWindowSizes (pDoc->m_nWrapColumn);
17281734

@@ -1743,11 +1749,12 @@ int lastline;
17431749

17441750
lastline = pDoc->GetLastLine ();
17451751

1746-
CSize sizeTotal (pDoc->m_nWrapColumn * pDoc->m_FontWidth, lastline * pDoc->m_FontHeight),
1747-
sizePage (GetOutputWindowWidth () - pDoc->m_iPixelOffset, GetOutputWindowHeight ()),
1748-
sizeLine (pDoc->m_FontWidth, pDoc->m_FontHeight);
1752+
m_ScrollbarSizeTotal = CSize (pDoc->m_nWrapColumn * pDoc->m_FontWidth, lastline * pDoc->m_FontHeight),
1753+
m_ScrollbarSizePage = CSize (GetOutputWindowWidth () - pDoc->m_iPixelOffset, GetOutputWindowHeight ()),
1754+
m_ScrollbarSizeLine = CSize (pDoc->m_FontWidth, pDoc->m_FontHeight);
17491755

1750-
SetScrollSizes (sizeTotal, sizePage, sizeLine);
1756+
if (pDoc->m_bScrollBarWanted)
1757+
SetScrollSizes (m_ScrollbarSizeTotal, m_ScrollbarSizePage, m_ScrollbarSizeLine);
17511758

17521759
// pretend they pressed "End" to force the view to update.
17531760

@@ -3276,11 +3283,12 @@ int lastline;
32763283

32773284
lastline = pDoc->GetLastLine ();
32783285

3279-
CSize sizeTotal (pDoc->m_nWrapColumn * pDoc->m_FontWidth, lastline * pDoc->m_FontHeight),
3280-
sizePage (GetOutputWindowWidth () - pDoc->m_iPixelOffset, GetOutputWindowHeight ()),
3281-
sizeLine (pDoc->m_FontWidth, pDoc->m_FontHeight);
3286+
m_ScrollbarSizeTotal = CSize (pDoc->m_nWrapColumn * pDoc->m_FontWidth, lastline * pDoc->m_FontHeight);
3287+
m_ScrollbarSizePage = CSize (GetOutputWindowWidth () - pDoc->m_iPixelOffset, GetOutputWindowHeight ());
3288+
m_ScrollbarSizeLine = CSize (pDoc->m_FontWidth, pDoc->m_FontHeight);
32823289

3283-
SetScrollSizes (sizeTotal, sizePage, sizeLine);
3290+
if (pDoc->m_bScrollBarWanted)
3291+
SetScrollSizes (m_ScrollbarSizeTotal, m_ScrollbarSizePage, m_ScrollbarSizeLine);
32843292

32853293
// very bizarre bug - fixed in 4.39
32863294
// we seem to get size messages if we are maximized and in the background
@@ -3345,7 +3353,7 @@ ASSERT_VALID(pDoc);
33453353

33463354
int iNewPauseStatus = eNotPaused;
33473355

3348-
m_bAtBufferEnd = GetScrollPos (SB_VERT) >= GetScrollLimit(SB_VERT);
3356+
m_bAtBufferEnd = m_ScrollbarPosition.cy >= (m_ScrollbarSizeTotal.cy - m_ScrollbarSizePage.cy);
33493357

33503358
// calculate pause status
33513359

@@ -4647,7 +4655,9 @@ int iDeltaY = m_scroll_position.y - pt.y;
46474655
// update scroll bar
46484656
GetScrollInfo (SB_VERT, &ScrollInfo, SIF_POS);
46494657
ScrollInfo.nPos = m_scroll_position.y;
4650-
SetScrollInfo (SB_VERT, &ScrollInfo, pDoc->m_bScrollBarWanted);
4658+
if (pDoc->m_bScrollBarWanted)
4659+
SetScrollInfo (SB_VERT, &ScrollInfo, pDoc->m_bScrollBarWanted);
4660+
m_ScrollbarPosition = ScrollInfo.nPos;
46514661
ScrollWindow (0, iSmoothDelta);
46524662
UpdateWindow ();
46534663
}
@@ -4680,16 +4690,18 @@ int iDeltaY = m_scroll_position.y - pt.y;
46804690
m_scroll_position = pt;
46814691

46824692
// update scroll bar
4683-
GetScrollInfo (SB_VERT, &ScrollInfo, SIF_POS);
4693+
GetScrollInfo (SB_VERT, &ScrollInfo, SIF_POS | SIF_ALL);
46844694
ScrollInfo.nPos = pt.y;
46854695
SetScrollInfo (SB_VERT, &ScrollInfo, pDoc->m_bScrollBarWanted);
4696+
m_ScrollbarPosition = ScrollInfo.nPos;
4697+
46864698

46874699
// GetScrollInfo (SB_HORZ, &ScrollInfo, SIF_POS);
46884700
// ScrollInfo.nPos = pt.x;
46894701
// SetScrollInfo (SB_HORZ, &ScrollInfo, pDoc->m_bScrollBarWanted);
46904702

46914703
if (pDoc->m_bAutoFreeze)
4692-
m_freeze = GetScrollPos (SB_VERT) < GetScrollLimit(SB_VERT);
4704+
m_freeze = pt.y < (m_ScrollbarSizeTotal.cy - m_ScrollbarSizePage.cy);
46934705

46944706
} // end of CMUSHView::ScrollToPosition
46954707

@@ -4708,6 +4720,7 @@ SCROLLINFO ScrollInfo;
47084720
ScrollInfo.nMax = sizeTotal.cy - 1;
47094721
ScrollInfo.nPage = sizePage.cy;
47104722
SetScrollInfo (SB_VERT, &ScrollInfo, pDoc->m_bScrollBarWanted);
4723+
m_ScrollbarPosition = ScrollInfo.nPos;
47114724

47124725
/*
47134726
GetScrollInfo (SB_HORZ, &ScrollInfo, SIF_ALL);

mushview.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ class CMUSHView : public CView
6868
CPoint m_scroll_position;
6969
CPoint m_scroll_limit;
7070

71+
// local copies of current scroll bar info
72+
CSize m_ScrollbarSizeTotal,
73+
m_ScrollbarSizePage,
74+
m_ScrollbarSizeLine,
75+
m_ScrollbarPosition;
76+
7177
string m_sPreviousMiniWindow;
7278

7379
BOOL m_mousedover;

0 commit comments

Comments
 (0)