Comment 39 for bug 619403

Revision history for this message
In , Albert Zeyer (albertzeyer) wrote :

First thing, I would reopen this bug report (remove the WONTFIX) - it really doesn't matter if it's not clear yet where to implement this.

On the topic at where to implement this:

Conceptually, mouse scroll wheel acceleration is really the same thing as mouse cursor movement acceleration. That's why I think it would make most sense to implement at the same place, like I did in my initial implementation.

Note that while I'm not sure if my initial implementation was the most optimal way to implement this, it actually worked great, in all applications. The only thing which optionally could have made it even better would be if the applications all would do pixel-based scrolling and not more, but even if the applications behave just like they do, line-based scrolling or whatever other scrolling behavior, they don't need to know and they should not need to know about any underlying mouse scroll wheel acceleration. Just like they also should not need to know about mouse cursor move acceleration.

Maybe 3D games are an exception, which would want to disable mouse cursor move acceleration because they use the mouse cursor movement in a different way. The same argument might be true for mouse scroll wheel acceleration. This is again an argument that mouse scroll wheel acceleration should be handled in the same way as mouse cursor move acceleration.

I don't exactly understand why we are not looking at MacOSX how and at what level it is implemented there. It is a solved problem on MacOSX and works great. So about any question like at what level to implement it, why not do it like it's done on MacOSX?
So, I did some research on this, and here are some links, or keywords to look at and search for:
https://gist.github.com/svoisen/5215826
kCGScrollWheelEventIsContinuous
https://chromium.googlesource.com/chromium/src/+/68ac3a05284cd246589a38843f2ba5b20ed5db72%5E!/
https://codereview.chromium.org/42607
https://bugs.webkit.org/show_bug.cgi?id=24813
https://github.com/adobe/webkit/blob/master/Source/WebCore/platform/mac/WebCoreSystemInterface.mm
https://bugs.webkit.org/show_bug.cgi?id=45155
http://trac.webkit.org/changeset/66812/webkit
https://github.com/aosm/IOHIDFamily/blob/d36f126e5b8d3183a037c453df7feedaba874553/IOHIDSystem/IOKit/hidsystem/IOHIPointing.h
https://github.com/aosm/IOHIDFamily/blob/d36f126e5b8d3183a037c453df7feedaba874553/IOHIDSystem/IOHIPointing.cpp
https://stackoverflow.com/questions/44196338/where-is-mouse-cursor-movement

So, I guess the implementation of the main logic of the scroll acceleration can be found in that file IOHIPointing.cpp.
You even find that the pointer (mouse cursor) and (scroll) wheel share the same structure to handle the acceleration:

struct IOHIPointing::ExpansionData
{
    UInt32 scrollType;

    ScrollAccelInfo * scrollWheelInfo;
    ScrollAccelInfo * scrollPointerInfo;
...
}