Take care of scroll divisor remainders for PS/2 drag scroll (#20732)
This commit is contained in:
		
							parent
							
								
									960d6e0d7d
								
							
						
					
					
						commit
						f35dee5c05
					
				
					 1 changed files with 10 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue