From: Dom Lachowicz (domlachowicz@yahoo.com)
Date: Mon Feb 17 2003 - 16:09:49 EST
Applied to HEAD and committed. Hub is looking at
STABLE.
Thanks a ton,
Dom
--- Johnny Lee <typo_pl@hotmail.com> wrote:
> The patches against HEAD and STABLE are attached.
> The actual non-whitespace 
> changes aren't very big.
> 
> I had to indent a bunch of code to make it look good
> which made the diffs 
> bigger than they really are.
> 
> Bug 3550:
> 
> When the document is >60 pages, the vertical
> scrollbar range > 16-bits.
> But the windows message that the UI uses to handle
> mousewheel msgs only 
> allows 16-bits of info to be passed to the window
> proc.
> 
> To get around this, the scrollbar code currently
> scales this value up as 
> appropriate to get from the 16-bit pos to the actual
> pos.
> 
> Except in the mousewheel case, where the code was
> sending the actual desired 
> Y-coords. The window proc receives the message and
> proceeds to scale the 
> value up as it usually does. So the mousewheel ends
> up moving 2x as much. It 
> snowballs as you get further down the file.
> 
> When there's less than ~60 pages, the vertical
> scrollbar range fits into 
> 16-bits so the scale factor is set to 1 which means
> no change occurs to the 
> scroll pos due to scaling.
> 
> Fix is to scale the value down before sending the
> scrollbar msg, since the 
> scrollbar code will scale the msg back up. this is
> the minimal change to fix 
> the bug. we lose some lower bits of info, but the
> code currently lives with 
> that Windows 16-bit limitation.
> 
> 
> Bug 3845:
> 
> When you change the mousewheel to scroll down "one
> screen" at a time in the 
> Mouse control panel, Windows will now return
> WHEEL_PAGESCROLL (== UINT_MAX 
> == 0xFFFFFFFF) as the number of lines to scroll in
> one mouse wheel move.
> 
> We end up going in the opposite direction when the
> mouse wheel is moved 
> since UINT_MAX == -1 in signed math.
> 
> Fix is to look out for WHEEL_PAGESCROLL and treat
> the mouse wheel move as a 
> page scroll up or down as appropriate.
> 
> 
> 
>
_________________________________________________________________
> The new MSN 8: advanced junk mail protection and 2
> months FREE*  
> http://join.msn.com/?page=features/junkmail
> > --- ap_win32frameimpl.cpp.old	Wed Feb 05 19:15:59
> 2003
> +++ ap_Win32FrameImpl.cpp	Mon Feb 17 06:04:22 2003
> @@ -947,31 +947,43 @@
>   		{
>   			// Get delta
>   			const int iDelta = (short) HIWORD(wParam);
> +			const int cWheelLines = _getMouseWheelLines()();
> 
> - 			// Calculate the movement offset to an integer
> resolution
> - 			const int iMove = (iDelta *
> _getMouseWheelLines()) / WHEEL_DELTA;
> -
> -	 		// Get current scroll position
> - 			SCROLLINFO si = { 0 };
> -
> - 			si.cbSize = sizeof(si);
> - 			si.fMask = SIF_ALL;
> - 			fImpl->_getVerticalScrollInfo(&si);
> -
> -	 		// Clip new position to limits
> - 			int iNewPos = si.nPos - (((iMove)?iMove:1) *
> SCROLL_LINE_SIZE);
> - 			if (iNewPos > si.nMax) iNewPos = si.nMax;
> - 			if (iNewPos < si.nMin) iNewPos = si.nMin;
> -
> - 			if (iNewPos != si.nPos)
> - 			{
> - 				// If position has changed set new position
> - 				SendMessage(hwnd,
> - 						WM_VSCROLL,
> - 						MAKELONG(SB_THUMBPOSITION, iNewPos),
> - 						NULL);
> - 			}
> -
> +			if (WHEEL_PAGESCROLL == cWheelLines)
> +			{
> +				WORD wDir = (iDelta < 0) ? SB_PAGEDOWN :
> SB_PAGEUP;
> +				SendMessage(hwnd,
> +							WM_VSCROLL,
> +							MAKELONG(wDir, 0),
> +							NULL);
> +			}
> +			else
> +			{
> +				// Calculate the movement offset to an integer
> resolution
> +				const int iMove = (iDelta * cWheelLines) /
> WHEEL_DELTA;
> +
> +				// Get current scroll position
> +				SCROLLINFO si = { 0 };
> +
> +				si.cbSize = sizeof(si);
> +				si.fMask = SIF_ALL;
> +				fImpl->_getVerticalScrollInfo(&si);
> +
> +				// Clip new position to limits
> +				int iNewPos = si.nPos - (((iMove)?iMove:1) *
> SCROLL_LINE_SIZE);
> +				if (iNewPos > si.nMax) iNewPos = si.nMax;
> +				if (iNewPos < si.nMin) iNewPos = si.nMin;
> +
> +				if (iNewPos != si.nPos)
> +				{
> +					// If position has changed set new position
> +					iNewPos >>= fImpl->m_vScale;
> +					SendMessage(hwnd,
> +							WM_VSCROLL,
> +							MAKELONG(SB_THUMBPOSITION, iNewPos),
> +							NULL);
> +				}
> +			}
> 			return 0;
> 		}
> 
> 
> > --- ap_Win32Frame.cpp.old	Fri Nov 29 09:18:28 2002
> +++ ap_win32frame.cpp	Mon Feb 17 06:22:02 2003
> @@ -1026,30 +1026,43 @@
>   	{
>   		// Get delta
>   		const int iDelta = (short) HIWORD(wParam);
> +		const int cWheelLines = GetMouseWheelLines();
> 
> - 		// Calculate the movement offset to an integer
> resolution
> - 		const int iMove = (iDelta *
> GetMouseWheelLines()) / WHEEL_DELTA;
> +		if (WHEEL_PAGESCROLL == cWheelLines)
> +		{
> +			WORD wDir = (iDelta < 0) ? SB_PAGEDOWN :
> SB_PAGEUP;
> +			SendMessage(hwnd,
> +						WM_VSCROLL,
> +						MAKELONG(wDir, 0),
> +						NULL);
> +		}
> +		else
> +		{
> +			// Calculate the movement offset to an integer
> resolution
> +			const int iMove = (iDelta * cWheelLines) /
> WHEEL_DELTA;
> 
> - 		// Get current scroll position
> - 		SCROLLINFO si = { 0 };
> +			// Get current scroll position
> +			SCROLLINFO si = { 0 };
> 
> - 		si.cbSize = sizeof(si);
> - 		si.fMask = SIF_ALL;
> - 		f->_getVerticalScrollInfo(&si);
> +			si.cbSize = sizeof(si);
> +			si.fMask = SIF_ALL;
> +			f->_getVerticalScrollInfo(&si);
> 
> - 		// Clip new position to limits
> - 		int iNewPos = si.nPos - (iMove *
> SCROLL_LINE_SIZE);
> - 		if (iNewPos > si.nMax) iNewPos = si.nMax;
> - 		if (iNewPos < si.nMin) iNewPos = si.nMin;
> +			// Clip new position to limits
> +			int iNewPos = si.nPos - (iMove *
> SCROLL_LINE_SIZE);
> +			if (iNewPos > si.nMax) iNewPos = si.nMax;
> +			if (iNewPos < si.nMin) iNewPos = si.nMin;
> 
> - 		if (iNewPos != si.nPos)
> - 		{
> - 			// If position has changed set new position
> - 			SendMessage(hwnd,
> - 						WM_VSCROLL,
> - 						MAKELONG(SB_THUMBPOSITION, iNewPos),
> - 						NULL);
> - 		}
> +			if (iNewPos != si.nPos)
> +			{
> +				// If position has changed set new position
> +				iNewPos >>= f->m_vScale;
> +				SendMessage(hwnd,
> +							WM_VSCROLL,
> +							MAKELONG(SB_THUMBPOSITION, iNewPos),
> +							NULL);
> +			}
> +		}
> 	}
> 	return 0;
> 
> 
> 
__________________________________________________
Do you Yahoo!?
Yahoo! Shopping - Send Flowers for Valentine's Day
http://shopping.yahoo.com
This archive was generated by hypermail 2.1.4 : Mon Feb 17 2003 - 16:14:32 EST