Ver código fonte

cocoa: Don't round scroll deltas from trackpads

Rounding the scroll deltas from trackpads causes jerky scrolling behavior
by artificially amplifying the effects of very small scroll movements.

We should only round events from devices with discrete scroll wheels,
because we know the smallest unit of movement there is a single tick.
Cameron Gutman 4 anos atrás
pai
commit
da0f76de6d
1 arquivos alterados com 13 adições e 9 exclusões
  1. 13 9
      src/video/cocoa/SDL_cocoamouse.m

+ 13 - 9
src/video/cocoa/SDL_cocoamouse.m

@@ -473,15 +473,19 @@ Cocoa_HandleMouseWheel(SDL_Window *window, NSEvent *event)
         }
         }
     }
     }
 
 
-    if (x > 0) {
-        x = SDL_ceil(x);
-    } else if (x < 0) {
-        x = SDL_floor(x);
-    }
-    if (y > 0) {
-        y = SDL_ceil(y);
-    } else if (y < 0) {
-        y = SDL_floor(y);
+    /* For discrete scroll events from conventional mice, always send a full tick.
+       For continuous scroll events from trackpads, send fractional deltas for smoother scrolling. */
+    if (![event respondsToSelector:@selector(hasPreciseScrollingDeltas)] || ![event hasPreciseScrollingDeltas]) {
+        if (x > 0) {
+            x = SDL_ceil(x);
+        } else if (x < 0) {
+            x = SDL_floor(x);
+        }
+        if (y > 0) {
+            y = SDL_ceil(y);
+        } else if (y < 0) {
+            y = SDL_floor(y);
+        }
     }
     }
 
 
     SDL_SendMouseWheel(window, mouseID, x, y, direction);
     SDL_SendMouseWheel(window, mouseID, x, y, direction);