For details see: https://devblogs.microsoft.com/oldnewthing/20030807-00/?p=42963
https://github.com/nickgammon/mushclient/blob/e3ac17980c5e63cdd5c56b04d1f5e9add8dd5935/mushview.cpp#L5255-L5256
and
https://github.com/nickgammon/mushclient/blob/e3ac17980c5e63cdd5c56b04d1f5e9add8dd5935/mushview.cpp#L5294-L5295
both just divide the zDelta value by WHEEL_DELTA and then multiply by a line quantity to convert a scroll movement into a set number of lines. On my machine with high precision tracking, that makes scrolling slowly (where zDelta < WHEEL_DELTA) impossible because zDelta always gets zeroed by the division and nothing is ever carried over.
This makes scrolling slowly on my laptop trackpad with small zdelta quite unsatisfying because I have to be aggressive for the display to move at all.
See also this video, which compares MUSHclient's inbuilt scrolling with synthetic scrolling from a splitscreen plugin I made.
https://youtu.be/onlsSs9TCrU
In the video, scroll events when the cursor is above the horizontal split go directly to the client. Scroll events from below the split line go to the plugin where I just don't do anything with WHEEL_DELTA ( https://github.com/fiendish/aardwolfclientpackage/blob/632240d1288d9c63823da9b1b96f0e10f28280f6/MUSHclient/worlds/plugins/aard_splitscreen_scrollback.xml#L298 ).
Notice how scrolling slowly above the split often results in no movement at all, whereas scrolling below the split actually results in the desired amount of movement (though not line-by-line in this video).
https://github.com/nickgammon/mushclient/blob/e3ac17980c5e63cdd5c56b04d1f5e9add8dd5935/mushview.cpp#L5255-L5256
and
https://github.com/nickgammon/mushclient/blob/e3ac17980c5e63cdd5c56b04d1f5e9add8dd5935/mushview.cpp#L5294-L5295
both just divide the zDelta value by WHEEL_DELTA and then multiply by a line quantity to convert a scroll movement into a set number of lines. On my machine with high precision tracking, that makes scrolling slowly (where zDelta < WHEEL_DELTA) impossible because zDelta always gets zeroed by the division and nothing is ever carried over.
This makes scrolling slowly on my laptop trackpad with small zdelta quite unsatisfying because I have to be aggressive for the display to move at all.
See also this video, which compares MUSHclient's inbuilt scrolling with synthetic scrolling from a splitscreen plugin I made.
https://youtu.be/onlsSs9TCrU
In the video, scroll events when the cursor is above the horizontal split go directly to the client. Scroll events from below the split line go to the plugin where I just don't do anything with WHEEL_DELTA ( https://github.com/fiendish/aardwolfclientpackage/blob/632240d1288d9c63823da9b1b96f0e10f28280f6/MUSHclient/worlds/plugins/aard_splitscreen_scrollback.xml#L298 ).
Notice how scrolling slowly above the split often results in no movement at all, whereas scrolling below the split actually results in the desired amount of movement (though not line-by-line in this video).