That's a good point, but they're probably handled separately. For example my laptop's touchpad looks like:Analogue scroll events are actually a thing, think of touchpad scrolling. Touchpads are probably providing absolute instead of relative position information, though.
Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 272 (BTN_LEFT) Event code 325 (BTN_TOOL_FINGER) Event code 328 (BTN_TOOL_QUINTTAP) Event code 330 (BTN_TOUCH) Event code 333 (BTN_TOOL_DOUBLETAP) Event code 334 (BTN_TOOL_TRIPLETAP) Event code 335 (BTN_TOOL_QUADTAP) Event type 3 (EV_ABS) Event code 0 (ABS_X) Value 42 Min 0 Max 1162 Resolution 12 Event code 1 (ABS_Y) Value 634 Min 0 Max 634 Resolution 12 Event code 47 (ABS_MT_SLOT) Value 0 Min 0 Max 4 Event code 53 (ABS_MT_POSITION_X) Value 0 Min 0 Max 1162 Resolution 12 Event code 54 (ABS_MT_POSITION_Y) Value 0 Min 0 Max 634 Resolution 12 Event code 55 (ABS_MT_TOOL_TYPE) Value 0 Min 0 Max 2 Event code 57 (ABS_MT_TRACKING_ID) Value 0 Min 0 Max 65535 Event type 4 (EV_MSC) Event code 5 (MSC_TIMESTAMP) Properties: Property type 0 (INPUT_PROP_POINTER) Property type 2 (INPUT_PROP_BUTTONPAD)
It would probably need two limit values: when it switches to slow speed and when it changes to fast speed. If these are the same number there's an uncomfortable area where the speed would skip erratically due to the noise in the nubs. The principle is simple, but there's some tuning like this to make it feel nice.i think it would make sense to fire small scroll events at a low frequency when the nub is less off center, and just fire more frequently if the nub is further off center.