diff options
Diffstat (limited to 'win32/ScintillaWin.cxx')
| -rw-r--r-- | win32/ScintillaWin.cxx | 38 | 
1 files changed, 28 insertions, 10 deletions
| diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index b5db2a3ae..553077b0e 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -898,7 +898,7 @@ bool ScintillaWin::ModifyScrollBars(int nMax, int nPage) {  	sci.fMask = SIF_PAGE | SIF_RANGE;  	::GetScrollInfo(MainHWND(), SB_VERT, &sci);  	if ((sci.nMin != 0) ||  -			(sci.nMax != nMax) || +		(sci.nMax != nMax) ||  	        (sci.nPage != static_cast<unsigned int>(nPage)) ||  	        (sci.nPos != 0)) {  		//Platform::DebugPrintf("Scroll info changed %d %d %d %d %d\n", @@ -912,16 +912,31 @@ bool ScintillaWin::ModifyScrollBars(int nMax, int nPage) {  		::SetScrollInfo(MainHWND(), SB_VERT, &sci, TRUE);  		modified = true;  	} -	int horizStart = 0; -	int horizEnd = 2000; -	int horizEndPreferred = 2000; + +	PRectangle rcText = GetTextRectangle(); +	int horizEndPreferred = scrollWidth; +	if (horizEndPreferred < 0) +		horizEndPreferred = 0;  	if (!horizontalScrollBarVisible || (wrapState != eWrapNone))  		horizEndPreferred = 0; -	if (!::GetScrollRange(MainHWND(), SB_HORZ, &horizStart, &horizEnd) || -	        horizStart != 0 || horizEnd != horizEndPreferred) { -		::SetScrollRange(MainHWND(), SB_HORZ, 0, horizEndPreferred, TRUE); -		//Platform::DebugPrintf("Horiz Scroll info changed\n"); +	unsigned int pageWidth = rcText.Width(); +	sci.fMask = SIF_PAGE | SIF_RANGE; +	::GetScrollInfo(MainHWND(), SB_HORZ, &sci); +	if ((sci.nMin != 0) ||  +		(sci.nMax != horizEndPreferred) || +		(sci.nPage != 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(MainHWND(), SB_HORZ, &sci, TRUE);  		modified = true; +		if (scrollWidth < static_cast<int>(pageWidth)) { +			HorizontalScrollTo(0); +		}  	}  	return modified;  } @@ -1528,7 +1543,7 @@ void ScintillaWin::HorizontalScrollMessage(WPARAM wParam) {  	case SB_LINEUP:  		xPos -= 20;  		break; -	case SB_LINEDOWN: +	case SB_LINEDOWN:	// May move past the logical end  		xPos += 20;  		break;  	case SB_PAGEUP: @@ -1536,12 +1551,15 @@ void ScintillaWin::HorizontalScrollMessage(WPARAM wParam) {  		break;  	case SB_PAGEDOWN:  		xPos += pageWidth; +		if (xPos > scrollWidth - rcText.Width()) {	// Hit the end exactly +			xPos = scrollWidth - rcText.Width(); +		}  		break;  	case SB_TOP:  		xPos = 0;  		break;  	case SB_BOTTOM: -		xPos = 2000; +		xPos = scrollWidth;  		break;  	case SB_THUMBPOSITION:  		xPos = HiWord(wParam); | 
