Applied to HEAD and committed. Hub is looking at
STABLE.

Thanks a ton,
Dom

--- Johnny Lee <[EMAIL PROTECTED]> 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

Reply via email to