From 410924d94bd17dc75a4ff1c2af0ca88a94692dc4 Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Sun, 3 Apr 2016 16:56:00 +0200 Subject: [PATCH] Snap scrolling to major axis of movement This is what Safari does, and it leads to much better behavior, in particular wrt overscrolling. It does cause a staircase effect when scrolling diagonally, which again Safari has, too. I don't think that bad, because it should occur very rarely in practice. Fixes #10341 --- ports/glutin/window.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ports/glutin/window.rs b/ports/glutin/window.rs index c8534710797..dcbb7d809bd 100644 --- a/ports/glutin/window.rs +++ b/ports/glutin/window.rs @@ -260,7 +260,14 @@ impl Window { } /// Helper function to send a scroll event. - fn scroll_window(&self, dx: f32, dy: f32, phase: TouchEventType) { + fn scroll_window(&self, mut dx: f32, mut dy: f32, phase: TouchEventType) { + // Scroll events snap to the major axis of movement, with vertical + // preferred over horizontal. + if dy.abs() >= dx.abs() { + dx = 0.0; + } else { + dy = 0.0; + } let mouse_pos = self.mouse_pos.get(); let event = WindowEvent::Scroll(Point2D::typed(dx as f32, dy as f32), Point2D::typed(mouse_pos.x as i32, mouse_pos.y as i32),