diff options
author | Nick Brassel <[email protected]> | 2023-11-28 16:39:48 +1100 |
---|---|---|
committer | Nick Brassel <[email protected]> | 2023-11-28 16:40:47 +1100 |
commit | 0115951de12bd4c798a43a380651c34552552e85 (patch) | |
tree | 62999011ae782d93aa6dc9c889615db2a840cafc /drivers/ps2/ps2_mouse.c | |
parent | 0379d1f59e58cefa18cdb72ba1b77507d1108ae6 (diff) | |
parent | 4d99e0a23cff02f4c6e55e093b5de08a9be0df7c (diff) | |
download | qmk_firmware-0.23.0.tar.gz qmk_firmware-0.23.0.zip |
`develop` -> `master`, 2023q4 edition0.23.0
Diffstat (limited to 'drivers/ps2/ps2_mouse.c')
-rw-r--r-- | drivers/ps2/ps2_mouse.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/ps2/ps2_mouse.c b/drivers/ps2/ps2_mouse.c index ae594c94bc..88c9bdcebe 100644 --- a/drivers/ps2/ps2_mouse.c +++ b/drivers/ps2/ps2_mouse.c @@ -265,6 +265,7 @@ static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) { SCROLL_SENT, } scroll_state = SCROLL_NONE; static uint16_t scroll_button_time = 0; + static int16_t scroll_x, scroll_y; if (PS2_MOUSE_SCROLL_BTN_MASK == (mouse_report->buttons & (PS2_MOUSE_SCROLL_BTN_MASK))) { // All scroll buttons are pressed @@ -272,13 +273,19 @@ static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) { if (scroll_state == SCROLL_NONE) { scroll_button_time = timer_read(); scroll_state = SCROLL_BTN; + scroll_x = 0; + scroll_y = 0; } // If the mouse has moved, update the report to scroll instead of move the mouse if (mouse_report->x || mouse_report->y) { - scroll_state = SCROLL_SENT; - mouse_report->v = -mouse_report->y / (PS2_MOUSE_SCROLL_DIVISOR_V); - mouse_report->h = mouse_report->x / (PS2_MOUSE_SCROLL_DIVISOR_H); + scroll_state = SCROLL_SENT; + scroll_y += mouse_report->y; + scroll_x += mouse_report->x; + mouse_report->v = -scroll_y / (PS2_MOUSE_SCROLL_DIVISOR_V); + mouse_report->h = scroll_x / (PS2_MOUSE_SCROLL_DIVISOR_H); + scroll_y += (mouse_report->v * (PS2_MOUSE_SCROLL_DIVISOR_V)); + scroll_x -= (mouse_report->h * (PS2_MOUSE_SCROLL_DIVISOR_H)); mouse_report->x = 0; mouse_report->y = 0; #ifdef PS2_MOUSE_INVERT_H |